@nlabs/metropolisjs 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +55 -167
- package/AGENTS.md +52 -10
- package/README.md +52 -2
- package/docs/ACTIONS.md +84 -22
- package/docs/assets/metropolisjs-logo.png +0 -0
- package/examples/factory-pattern-usage.ts +15 -10
- package/lex.config.mjs +38 -9
- package/lib/actions/appActions/appActions.d.ts.map +1 -1
- package/lib/actions/appActions/appActions.js +77 -6
- package/lib/actions/crmActions/crmActions.d.ts +87 -0
- package/lib/actions/crmActions/crmActions.d.ts.map +1 -0
- package/lib/actions/crmActions/crmActions.js +338 -0
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.d.ts.map +1 -1
- package/lib/actions/index.js +3 -1
- package/lib/actions/restActions/restActions.d.ts +19 -0
- package/lib/actions/restActions/restActions.d.ts.map +1 -0
- package/lib/actions/restActions/restActions.js +40 -0
- package/lib/actions/userActions/userActions.d.ts +12 -0
- package/lib/actions/userActions/userActions.d.ts.map +1 -1
- package/lib/actions/userActions/userActions.js +20 -4
- package/lib/adapters/appAdapter/appAdapter.d.ts +2 -2
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -1
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +2 -2
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -1
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +2 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -1
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +2 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -1
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +2 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -1
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +2 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -1
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +2 -2
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -1
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +2 -2
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -1
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +2 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -1
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +2 -2
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -1
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +2 -2
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -1
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +2 -2
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -1
- package/lib/adapters/postAdapter/postAdapter.d.ts +2 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -1
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +2 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -1
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +2 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -1
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +2 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -1
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +2 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -1
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +2 -2
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -1
- package/lib/adapters/userAdapter/userAdapter.d.ts +2 -2
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -1
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +2 -2
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -1
- package/lib/config/index.d.ts +1 -0
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +1 -1
- package/lib/constants/Collections.d.ts +16 -0
- package/lib/constants/Collections.d.ts.map +1 -1
- package/lib/constants/Collections.js +17 -1
- package/lib/index.d.ts +4 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -3
- package/lib/stores/appStore.d.ts +10 -0
- package/lib/stores/appStore.d.ts.map +1 -1
- package/lib/stores/appStore.js +12 -2
- package/lib/tests/actionTestScenarios.d.ts +20 -0
- package/lib/tests/actionTestScenarios.d.ts.map +1 -0
- package/lib/tests/actionTestScenarios.js +851 -0
- package/lib/tests/testGraphQLServer.d.ts.map +1 -0
- package/lib/tests/testGraphQLServer.js +197 -0
- package/lib/tests/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/tests/testGraphQLServerSimple.js +52 -0
- package/lib/types/crm.types.d.ts +100 -0
- package/lib/types/crm.types.d.ts.map +1 -0
- package/lib/types/crm.types.js +6 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +2 -1
- package/lib/utils/actionFactory.d.ts +6 -4
- package/lib/utils/actionFactory.d.ts.map +1 -1
- package/lib/utils/actionFactory.js +9 -1
- package/lib/utils/api.d.ts +14 -2
- package/lib/utils/api.d.ts.map +1 -1
- package/lib/utils/api.js +114 -32
- package/lib/utils/baseActionFactory.d.ts +2 -2
- package/lib/utils/dateUtils.d.ts +1 -1
- package/lib/utils/dateUtils.d.ts.map +1 -1
- package/lib/utils/index.d.ts +2 -2
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +3 -3
- package/lib/utils/location.d.ts +1 -1
- package/lib/utils/location.d.ts.map +1 -1
- package/lib/utils/requestCache.d.ts +1 -1
- package/lib/utils/requestCache.d.ts.map +1 -1
- package/lib/utils/useMetropolis.d.ts +2 -0
- package/lib/utils/useMetropolis.d.ts.map +1 -1
- package/lib/utils/useMetropolis.js +19 -1
- package/lib/utils/validatorFactory.d.ts +1 -1
- package/lib/utils/validatorFactory.d.ts.map +1 -1
- package/package.json +18 -12
- package/tsconfig.lint.json +2 -2
- package/tsconfig.test.json +3 -2
- package/jest.config.mjs +0 -28
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +0 -1
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +0 -197
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +0 -1
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +0 -52
- /package/lib/{__tests__/e2e/helpers → tests}/testGraphQLServer.d.ts +0 -0
- /package/lib/{__tests__/e2e/helpers → tests}/testGraphQLServerSimple.d.ts +0 -0
|
@@ -104,6 +104,14 @@ const getInvalidFields = (error)=>{
|
|
|
104
104
|
});
|
|
105
105
|
return invalidFields;
|
|
106
106
|
};
|
|
107
|
+
const getPasswordResetIdentifier = (request)=>{
|
|
108
|
+
const identifier = typeof request === 'string' ? String(request || '').trim() : String(request.email || request.phone || request.username || '').trim();
|
|
109
|
+
return {
|
|
110
|
+
identifier,
|
|
111
|
+
type: typeof request !== 'string' && request.phone ? 'phone' : identifier.includes('@') ? 'email' : 'username'
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
const getPasswordResetType = (confirmation)=>confirmation.type || (confirmation.phone ? 'phone' : 'email');
|
|
107
115
|
const withInvalidFieldRetry = async (requestWithProps, props, fallbackProps = DEFAULT_USER_QUERY_FIELDS)=>{
|
|
108
116
|
const safeProps = sanitizeUserProps(props, fallbackProps);
|
|
109
117
|
try {
|
|
@@ -785,10 +793,10 @@ export const createUserActions = (flux, options)=>{
|
|
|
785
793
|
return true;
|
|
786
794
|
};
|
|
787
795
|
const confirmSignUp = async (code, type, requestOptions = {})=>true;
|
|
788
|
-
const
|
|
796
|
+
const requestPasswordReset = async (request, requestOptions = {})=>{
|
|
789
797
|
let forgotPasswordSucceeded = false;
|
|
790
|
-
const identifier
|
|
791
|
-
const attribute =
|
|
798
|
+
const { identifier, type } = getPasswordResetIdentifier(request);
|
|
799
|
+
const attribute = type === 'phone' ? 'phone' : type === 'email' ? 'email' : 'username';
|
|
792
800
|
const queryVariables = {
|
|
793
801
|
user: {
|
|
794
802
|
type: 'UserInput!',
|
|
@@ -812,6 +820,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
812
820
|
}
|
|
813
821
|
return true;
|
|
814
822
|
};
|
|
823
|
+
const forgotPassword = async (username, requestOptions = {})=>requestPasswordReset(username, requestOptions);
|
|
815
824
|
const sendVerificationEmail = async (email, emailOptions = {}, requestOptions = {})=>{
|
|
816
825
|
const queryVariables = {
|
|
817
826
|
user: {
|
|
@@ -881,11 +890,17 @@ export const createUserActions = (flux, options)=>{
|
|
|
881
890
|
return true;
|
|
882
891
|
});
|
|
883
892
|
};
|
|
893
|
+
const completePasswordReset = async (confirmation, requestOptions = {})=>{
|
|
894
|
+
const username = String(confirmation.email || confirmation.phone || confirmation.username || '').trim();
|
|
895
|
+
const type = getPasswordResetType(confirmation);
|
|
896
|
+
return resetPassword(username, confirmation.password, confirmation.code, type, requestOptions);
|
|
897
|
+
};
|
|
884
898
|
const updatePassword = async (password, newPassword, requestOptions = {})=>true;
|
|
885
899
|
return {
|
|
886
900
|
addUser,
|
|
887
901
|
confirmCode,
|
|
888
902
|
confirmSignUp,
|
|
903
|
+
completePasswordReset,
|
|
889
904
|
currentAuthenticatedUser,
|
|
890
905
|
currentUser,
|
|
891
906
|
deleteBillingCard,
|
|
@@ -900,6 +915,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
900
915
|
listByTags,
|
|
901
916
|
refreshSession: refreshSessionAction,
|
|
902
917
|
remove,
|
|
918
|
+
requestPasswordReset,
|
|
903
919
|
resetPassword,
|
|
904
920
|
saveBillingCard,
|
|
905
921
|
search,
|
|
@@ -916,4 +932,4 @@ export const createUserActions = (flux, options)=>{
|
|
|
916
932
|
};
|
|
917
933
|
};
|
|
918
934
|
|
|
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+XG4gICAgdHJ1ZTtcblxuICBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGxldCBmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSBTdHJpbmcodXNlcm5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBpZGVudGlmaWVyLmluY2x1ZGVzKCdAJykgPyAnZW1haWwnIDogJ3VzZXJuYW1lJztcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIFthdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5mb3Jnb3RQYXNzd29yZDtcbiAgICAgIGZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkID0gc3VjY2VzcztcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLkZPUkdPVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnZm9yZ290UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pO1xuXG4gICAgaWYoIWZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvcmdvdF9wYXNzd29yZF9mYWlsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzZW5kVmVyaWZpY2F0aW9uRW1haWwgPSBhc3luYyAoXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBlbWFpbE9wdGlvbnM6IFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyA9IHt9LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy5zdWJqZWN0ID8ge3ZlcmlmaWNhdGlvbkVtYWlsU3ViamVjdDogZW1haWxPcHRpb25zLnN1YmplY3R9IDoge30pLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMudGVtcGxhdGUgPyB7dmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZTogZW1haWxPcHRpb25zLnRlbXBsYXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnRleHQgPyB7dmVyaWZpY2F0aW9uRW1haWxUZXh0OiBlbWFpbE9wdGlvbnMudGV4dH0gOiB7fSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnNlbmRWZXJpZmljYXRpb25FbWFpbDtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuQ09ORklSTV9TSUdOX1VQX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICBmbHV4LFxuICAgICAgJ3NlbmRWZXJpZmljYXRpb25FbWFpbCcsXG4gICAgICBEQVRBX1RZUEUsXG4gICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgIFtdLFxuICAgICAge29uU3VjY2Vzc31cbiAgICApLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5zZW5kVmVyaWZpY2F0aW9uRW1haWw7XG4gICAgICBpZighc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlbmRfdmVyaWZpY2F0aW9uX2VtYWlsX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZXRQYXNzd29yZCA9IGFzeW5jIChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uKHR5cGUgPT09ICdlbWFpbCcgPyB7ZW1haWw6IHVzZXJuYW1lfSA6IHtwaG9uZTogdXNlcm5hbWV9KSxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8ucmVzZXRQYXNzd29yZDtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLlJFU0VUX1BBU1NXT1JEX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KGZsdXgsICdyZXNldFBhc3N3b3JkJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgW10sIHtvblN1Y2Nlc3N9KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8ucmVzZXRQYXNzd29yZDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzZXRfcGFzc3dvcmRfZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVQYXNzd29yZCA9IGFzeW5jIChwYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICB0cnVlXG4gIDtcblxuICByZXR1cm4ge1xuICAgIGFkZFVzZXIsXG4gICAgY29uZmlybUNvZGUsXG4gICAgY29uZmlybVNpZ25VcCxcbiAgICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIsXG4gICAgY3VycmVudFVzZXIsXG4gICAgZGVsZXRlQmlsbGluZ0NhcmQsXG4gICAgbGlzdCxcbiAgICBmb3Jnb3RQYXNzd29yZCxcbiAgICBpc0xvZ2dlZEluLFxuICAgIGl0ZW1CeUlkLFxuICAgIGdldFVzZXJCeUF0dHJpYnV0ZSxcbiAgICBsaXN0QnlDb25uZWN0aW9uLFxuICAgIGxpc3RCeUxhdGVzdCxcbiAgICBsaXN0QnlSZWFjdGlvbnMsXG4gICAgbGlzdEJ5VGFncyxcbiAgICByZWZyZXNoU2Vzc2lvbjogcmVmcmVzaFNlc3Npb25BY3Rpb24sXG4gICAgcmVtb3ZlLFxuICAgIHJlc2V0UGFzc3dvcmQsXG4gICAgc2F2ZUJpbGxpbmdDYXJkLFxuICAgIHNlYXJjaCxcbiAgICBzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgc2Vzc2lvbixcbiAgICBzaWduSW4sXG4gICAgc2lnbk91dCxcbiAgICBzaWduVXAsXG4gICAgdXBkYXRlUGFzc3dvcmQsXG4gICAgdXBkYXRlVXNlcixcbiAgICB1cGRhdGVQbGFuLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyOiB1c2VyQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogdXNlckJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVVzZXJJbnB1dCIsIlVTRVJfQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicHVibGljUXVlcnkiLCJyZWZyZXNoU2Vzc2lvbiIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsImlzTG9nZ2VkSW4iLCJpc0xvZ2dlZEluV2l0aFN0b3JhZ2UiLCJub3JtYWxpemVTZXNzaW9uIiwic3RvcmVTZXNzaW9uIiwiZ2V0Q29uZmlnRnJvbUZsdXgiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsInN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbiIsIkRBVEFfVFlQRSIsIkRFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMiLCJTRU5TSVRJVkVfVVNFUl9GSUVMRFMiLCJTZXQiLCJJTlZBTElEX0ZJRUxEX1JFR0VYIiwiaGFzU2Vzc2lvbklkZW50aXR5IiwidXNlciIsIl9pZCIsInVzZXJJZCIsInVzZXJuYW1lIiwiZW1haWwiLCJzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCIsInVzZXJJbnB1dCIsImN1cnJlbnRTZXNzaW9uIiwibmV4dFVzZXIiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiZmllbGQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInBhc3N3b3JkIiwiU3RyaW5nIiwidHJpbSIsImN1cnJlbnRWYWx1ZSIsInN5bmNTdG9yZWRTZXNzaW9uIiwiZmx1eCIsInNlc3Npb25QYXRjaCIsImdldFN0YXRlIiwiZ2V0U2Vzc2lvblBheWxvYWQiLCJwYXlsb2FkIiwic2Vzc2lvbiIsImdldEZpZWxkUm9vdCIsInRyaW1tZWQiLCJtYXRjaCIsInNhbml0aXplVXNlclByb3BzIiwicHJvcHMiLCJmYWxsYmFja1Byb3BzIiwic2VlbiIsInNhbml0aXplZCIsImxpc3QiLCJyb290IiwiaGFzIiwiYWRkIiwicHVzaCIsImxlbmd0aCIsImdldEludmFsaWRGaWVsZHMiLCJlcnJvciIsImVycm9ycyIsInNvdXJjZSIsImludmFsaWRGaWVsZHMiLCJmb3JFYWNoIiwiaXRlbSIsIm1lc3NhZ2UiLCJleGVjIiwibGFzdEluZGV4Iiwid2l0aEludmFsaWRGaWVsZFJldHJ5IiwicmVxdWVzdFdpdGhQcm9wcyIsInNhZmVQcm9wcyIsInNpemUiLCJyZXRyeVByb3BzIiwiZmlsdGVyIiwiZGVmYXVsdFVzZXJWYWxpZGF0b3IiLCJpbnB1dCIsIm9wdGlvbnMiLCJ2YWxpZGF0ZWQiLCJzdHJpY3QiLCJFcnJvciIsImNyZWF0ZVVzZXJBY3Rpb25zIiwidXNlckJhc2UiLCJhZGFwdGVyIiwidXNlckFkYXB0ZXIiLCJhZGFwdGVyT3B0aW9ucyIsInVzZXJBZGFwdGVyT3B0aW9ucyIsImNsZWFyVXNlclJlcXVlc3RDYWNoZXMiLCJhZGRVc2VyIiwidXNlclByb3BzIiwicmVxdWVzdE9wdGlvbnMiLCJxdWVyeVZhcmlhYmxlcyIsInR5cGUiLCJvblN1Y2Nlc3MiLCJkYXRhIiwidXNlcnMiLCJkaXNwYXRjaCIsIkFERF9JVEVNX1NVQ0NFU1MiLCJyZXR1cm5Qcm9wcyIsInNpZ25VcCIsImV4cGlyZXMiLCJTSUdOX1VQX1NVQ0NFU1MiLCJTSUdOX1VQX0VSUk9SIiwidXBkYXRlVXNlciIsInVwZGF0ZUlucHV0IiwiYmlydGhkYXRlIiwiZG9iIiwiZmlyc3ROYW1lIiwiZ2VuZGVyIiwibGFzdE5hbWUiLCJtYWlsaW5nTGlzdCIsInBob25lIiwibGVnYWN5VXNlciIsInVwZGF0ZSIsInVwZGF0ZWRVc2VyIiwiVVBEQVRFX0lURU1fU1VDQ0VTUyIsImNvbmZpcm1Db2RlIiwiY29kZSIsImNvbmZpcm1lZCIsIkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTIiwicmVtb3ZlIiwiUkVNT1ZFX0lURU1fU1VDQ0VTUyIsInNlc3Npb25Qcm9wcyIsInNlc3Npb25EYXRhIiwiZ2V0VXNlckJ5U2Vzc2lvbiIsIkdFVF9TRVNTSU9OX0VSUk9SIiwibmV4dFNlc3Npb24iLCJHRVRfU0VTU0lPTl9TVUNDRVNTIiwicGVyc29uYUlkIiwiaXRlbUJ5SWQiLCJjYWNoZWRSZXN1bHQiLCJnZXRVc2VyQnlJZCIsIkdFVF9JVEVNX1NVQ0NFU1MiLCJyZXN1bHQiLCJzYWZlVXNlclByb3BzIiwiZ2V0VXNlckJ5QXR0cmlidXRlIiwiYXR0cmlidXRlIiwibm9ybWFsaXplZEF0dHJpYnV0ZSIsIm5vcm1hbGl6ZWRWYWx1ZSIsIm1hdGNoaW5nVXNlciIsInNhdmVCaWxsaW5nQ2FyZCIsImNhcmQiLCJzZXNzaW9uVXNlcklkIiwiZGVsZXRlQmlsbGluZ0NhcmQiLCJ1cGRhdGVQbGFuIiwicGxhbklkIiwibmV4dFBsYW5JZCIsImdldFVzZXJMaXN0IiwiR0VUX0xJU1RfU1VDQ0VTUyIsImxpc3RCeUxhdGVzdCIsImZyb20iLCJ0byIsImxpc3RCeUNvbm5lY3Rpb24iLCJsaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWVzIiwicGVyc29uYVByb3BzIiwibGlzdEJ5VGFncyIsInRhZ05hbWVzIiwidGFncyIsInNlYXJjaCIsInF1ZXJ5IiwiY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyIiwiY3VycmVudFVzZXIiLCJyZWZyZXNoU2Vzc2lvbkFjdGlvbiIsInRva2VuIiwic2lnbkluIiwibGVnYWN5VmFyaWFibGVzIiwiY29uZmlnIiwicmVxdWVzdGVkRXhwaXJlcyIsIk1hdGgiLCJtYXgiLCJOdW1iZXIiLCJhcHAiLCJtYXhNaW51dGVzIiwicXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0Iiwic3RvcmVkU2Vzc2lvbiIsIlNJR05fSU5fU1VDQ0VTUyIsInBlcmZvcm1TaWduSW4iLCJzZXNzaW9uUmVzdWx0IiwiYmFzZVNlc3Npb24iLCJoeWRyYXRlZFNlc3Npb24iLCJmYWxsYmFja1Nlc3Npb24iLCJmaW5hbFNlc3Npb24iLCJTSUdOX0lOX0VSUk9SIiwic2lnbk91dCIsIlNJR05fT1VUX1NVQ0NFU1MiLCJjb25maXJtU2lnblVwIiwiZm9yZ290UGFzc3dvcmQiLCJmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCIsImlkZW50aWZpZXIiLCJpbmNsdWRlcyIsInN1Y2Nlc3MiLCJGT1JHT1RfUEFTU1dPUkRfU1VDQ0VTUyIsIkZPUkdPVF9QQVNTV09SRF9FUlJPUiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImVtYWlsT3B0aW9ucyIsInN1YmplY3QiLCJ2ZXJpZmljYXRpb25FbWFpbFN1YmplY3QiLCJ0ZW1wbGF0ZSIsInZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGUiLCJ0ZXh0IiwidmVyaWZpY2F0aW9uRW1haWxUZXh0IiwiQ09ORklSTV9TSUdOX1VQX0VSUk9SIiwidGhlbiIsInJlc2V0UGFzc3dvcmQiLCJSRVNFVF9QQVNTV09SRF9TVUNDRVNTIiwiUkVTRVRfUEFTU1dPUkRfRVJST1IiLCJ1cGRhdGVQYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwidXBkYXRlVXNlckFkYXB0ZXIiLCJ1cGRhdGVBZGFw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
|
|
935
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHB1YmxpY1F1ZXJ5LCByZWZyZXNoU2Vzc2lvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y3JlYXRlQmFzZUFjdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmltcG9ydCB7XG4gIGNsZWFyUGVyc2lzdGVkU2Vzc2lvbixcbiAgaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSxcbiAgaXNMb2dnZWRJbiBhcyBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UsXG4gIG5vcm1hbGl6ZVNlc3Npb24sXG4gIHN0b3JlU2Vzc2lvblxufSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uLmpzJztcbmltcG9ydCB7Z2V0Q29uZmlnRnJvbUZsdXh9IGZyb20gJy4uLy4uL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb259IGZyb20gJy4uL3BlcnNvbmFBY3Rpb25zL3BlcnNvbmFBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7VXNlcn0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaVJlc3VsdHNUeXBlLCBTZXNzaW9uVHlwZX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB0eXBlIHtCYXNlQWRhcHRlck9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAndXNlcnMnO1xuY29uc3QgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyA9IFsndXNlcklkJywgJ3VzZXJuYW1lJ107XG5jb25zdCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMgPSBuZXcgU2V0KFtcbiAgJ3Bhc3N3b3JkJyxcbiAgJ3NhbHQnLFxuICAndG9rZW4nLFxuICAncmVmcmVzaFRva2VuJyxcbiAgJ3ZlcmlmaWVkRW1haWxDb2RlJyxcbiAgJ3ZlcmlmaWVkU21zQ29kZSdcbl0pO1xuY29uc3QgSU5WQUxJRF9GSUVMRF9SRUdFWCA9IC9DYW5ub3QgcXVlcnkgZmllbGQgXCIoW15cIl0rKVwiL2c7XG5jb25zdCBoYXNTZXNzaW9uSWRlbnRpdHkgPSAodXNlcj86IFBhcnRpYWw8VXNlcj4gfCBudWxsKTogYm9vbGVhbiA9PlxuICAhISh1c2VyICYmICgodXNlciBhcyBhbnkpLl9pZCB8fCAodXNlciBhcyBhbnkpLnVzZXJJZCB8fCAodXNlciBhcyBhbnkpLnVzZXJuYW1lIHx8ICh1c2VyIGFzIGFueSkuZW1haWwpKTtcblxuY29uc3Qgc2FuaXRpemVVcGRhdGVVc2VySW5wdXQgPSAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+ID0ge30sIGN1cnJlbnRTZXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUGFydGlhbDxVc2VyPiA9PiB7XG4gIGNvbnN0IG5leHRVc2VyID0gT2JqZWN0LmVudHJpZXModXNlcklucHV0KS5yZWR1Y2UoKHVzZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBbZmllbGQsIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAncGFzc3dvcmQnKSB7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpZihwYXNzd29yZCkge1xuICAgICAgICB1c2VyLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAndXNlcklkJykge1xuICAgICAgdXNlci51c2VySWQgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRTZXNzaW9uW2ZpZWxkXTtcblxuICAgIGlmKFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhjdXJyZW50VmFsdWUgPz8gJycpKSB7XG4gICAgICB1c2VyW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIG5leHRVc2VyIGFzIFBhcnRpYWw8VXNlcj47XG59O1xuXG5jb25zdCBzeW5jU3RvcmVkU2Vzc2lvbiA9IGFzeW5jIChmbHV4OiBGbHV4RnJhbWV3b3JrLCBzZXNzaW9uUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uUGF0Y2h9KTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QYXlsb2FkID0gKHBheWxvYWQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGlmKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmICdzZXNzaW9uJyBpbiAocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICByZXR1cm4gKCgocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuc2Vzc2lvbikgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JyA/IHBheWxvYWQgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5jb25zdCBnZXRGaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBmaWVsZC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gdHJpbW1lZC5tYXRjaCgvXltBLVphLXpfXVtBLVphLXowLTlfXSovKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn07XG5cbmNvbnN0IHNhbml0aXplVXNlclByb3BzID0gKHByb3BzOiBzdHJpbmdbXSA9IFtdLCBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2FuaXRpemVkID0gcHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG5cbiAgaWYoc2FuaXRpemVkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrUHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG59O1xuXG5jb25zdCBnZXRJbnZhbGlkRmllbGRzID0gKGVycm9yOiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICBjb25zdCBlcnJvcnMgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3JzIHx8IChlcnJvciBhcyBhbnkpPy5zb3VyY2U/LmVycm9ycyB8fCBbXTtcbiAgY29uc3QgaW52YWxpZEZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGVycm9ycy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW0/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuXG4gICAgd2hpbGUobWF0Y2gpIHtcbiAgICAgIGludmFsaWRGaWVsZHMuYWRkKG1hdGNoWzFdKTtcbiAgICAgIG1hdGNoID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIElOVkFMSURfRklFTERfUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllciA9IChyZXF1ZXN0OiBzdHJpbmcgfCBQYXNzd29yZFJlc2V0UmVxdWVzdCk6IHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyB8ICd1c2VybmFtZSc7XG59ID0+IHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgID8gU3RyaW5nKHJlcXVlc3QgfHwgJycpLnRyaW0oKVxuICAgIDogU3RyaW5nKHJlcXVlc3QuZW1haWwgfHwgcmVxdWVzdC5waG9uZSB8fCByZXF1ZXN0LnVzZXJuYW1lIHx8ICcnKS50cmltKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZGVudGlmaWVyLFxuICAgIHR5cGU6IHR5cGVvZiByZXF1ZXN0ICE9PSAnc3RyaW5nJyAmJiByZXF1ZXN0LnBob25lID8gJ3Bob25lJyA6IGlkZW50aWZpZXIuaW5jbHVkZXMoJ0AnKSA/ICdlbWFpbCcgOiAndXNlcm5hbWUnXG4gIH07XG59O1xuXG5jb25zdCBnZXRQYXNzd29yZFJlc2V0VHlwZSA9IChjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24pOiAnZW1haWwnIHwgJ3Bob25lJyA9PlxuICBjb25maXJtYXRpb24udHlwZSB8fCAoY29uZmlybWF0aW9uLnBob25lID8gJ3Bob25lJyA6ICdlbWFpbCcpO1xuXG5jb25zdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkgPSBhc3luYyA8VD4oXG4gIHJlcXVlc3RXaXRoUHJvcHM6IChwcm9wczogc3RyaW5nW10pID0+IFByb21pc2U8VD4sXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZmFsbGJhY2tQcm9wczogc3RyaW5nW10gPSBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgc2FmZVByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMocHJvcHMsIGZhbGxiYWNrUHJvcHMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RXaXRoUHJvcHMoc2FmZVByb3BzKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBnZXRJbnZhbGlkRmllbGRzKGVycm9yKTtcblxuICAgIGlmKGludmFsaWRGaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlQcm9wcyA9IHNhZmVQcm9wcy5maWx0ZXIoKGZpZWxkKSA9PiAhaW52YWxpZEZpZWxkcy5oYXMoZ2V0RmllbGRSb290KGZpZWxkKSkpO1xuXG4gICAgaWYocmV0cnlQcm9wcy5sZW5ndGggPT09IDAgfHwgcmV0cnlQcm9wcy5sZW5ndGggPT09IHNhZmVQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0V2l0aFByb3BzKHJldHJ5UHJvcHMpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbnNPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXJPcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHN1YmplY3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkUmVzZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBob25lPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFJlc2V0Q29uZmlybWF0aW9uIGV4dGVuZHMgUGFzc3dvcmRSZXNldFJlcXVlc3Qge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiAnZW1haWwnIHwgJ3Bob25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSB1c2Vyczoge1xuICAgIHJlYWRvbmx5IGFjdGl2ZUNvdW50PzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFkZFVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGNvbmZpcm1Db2RlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBkZWFjdGl2YXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBmb3Jnb3RQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXRlbUJ5SWQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJCeUF0dHJpYnV0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZ2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VG9rZW4/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGl0ZW1CeVVzZXJuYW1lPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyTGlzdD86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeUNvbm5lY3Rpb24/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5TGF0ZXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVJlYWN0aW9ucz86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlUYWdzPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHNlYXJjaD86IFVzZXJbXTtcbiAgICByZWFkb25seSByZWZyZXNoU2Vzc2lvbj86IFNlc3Npb25UeXBlO1xuICAgIHJlYWRvbmx5IHJlbW92ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgcmVzZXRQYXNzd29yZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2F2ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzZW5kVmVyaWZpY2F0aW9uRW1haWw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNpZ25Jbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnblVwPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBkZWxldGVCaWxsaW5nQ2FyZD86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgdXBkYXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVQYXNzd29yZD86IFBhcnRpYWw8Ym9vbGVhbj47XG4gICAgcmVhZG9ubHkgdXBkYXRlUGxhbj86IFBhcnRpYWw8VXNlcj47XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyVmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlVXNlcklucHV0KGlucHV0KTtcblxuICBpZihvcHRpb25zPy5zdHJpY3QgJiYgIXZhbGlkYXRlZC51c2VybmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUgaXMgcmVxdWlyZWQgaW4gc3RyaWN0IG1vZGUnKTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIHVzZXJBY3Rpb25zIHtcbiAgYWRkVXNlcjogKHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGNvbmZpcm1Db2RlOiAoY29kZTogbnVtYmVyLCB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjb25maXJtU2lnblVwOiAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyOiAocmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY3VycmVudFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBsaXN0OiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5Q29ubmVjdGlvbjogKHVzZXJJZDogc3RyaW5nLCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlciwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgaXRlbUJ5SWQ6ICh1c2VySWQ6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGdldFVzZXJCeUF0dHJpYnV0ZTogKFxuICAgIGF0dHJpYnV0ZTogJ2VtYWlsJyB8ICd1c2VybmFtZScsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICB1c2VyUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZGVsZXRlQmlsbGluZ0NhcmQ6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgbGlzdEJ5TGF0ZXN0OiAodXNlcm5hbWU/OiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlSZWFjdGlvbnM6IChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5VGFnczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgZm9yZ290UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXF1ZXN0UGFzc3dvcmRSZXNldDogKHJlcXVlc3Q6IHN0cmluZyB8IFBhc3N3b3JkUmVzZXRSZXF1ZXN0LCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBpc0xvZ2dlZEluOiAoKSA9PiBib29sZWFuO1xuICByZWZyZXNoU2Vzc2lvbjogKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFNlc3Npb25UeXBlPjtcbiAgcmVtb3ZlOiAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHJlc2V0UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjb21wbGV0ZVBhc3N3b3JkUmVzZXQ6IChjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+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+XG4gICAgdHJ1ZTtcblxuICBjb25zdCByZXF1ZXN0UGFzc3dvcmRSZXNldCA9IGFzeW5jIChcbiAgICByZXF1ZXN0OiBzdHJpbmcgfCBQYXNzd29yZFJlc2V0UmVxdWVzdCxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBsZXQgZm9yZ290UGFzc3dvcmRTdWNjZWVkZWQgPSBmYWxzZTtcbiAgICBjb25zdCB7aWRlbnRpZmllciwgdHlwZX0gPSBnZXRQYXNzd29yZFJlc2V0SWRlbnRpZmllcihyZXF1ZXN0KTtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSB0eXBlID09PSAncGhvbmUnID8gJ3Bob25lJyA6IHR5cGUgPT09ICdlbWFpbCcgPyAnZW1haWwnIDogJ3VzZXJuYW1lJztcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIFthdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5mb3Jnb3RQYXNzd29yZDtcbiAgICAgIGZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkID0gc3VjY2VzcztcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLkZPUkdPVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnZm9yZ290UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pO1xuXG4gICAgaWYoIWZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvcmdvdF9wYXNzd29yZF9mYWlsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICByZXF1ZXN0UGFzc3dvcmRSZXNldCh1c2VybmFtZSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHNlbmRWZXJpZmljYXRpb25FbWFpbCA9IGFzeW5jIChcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGVtYWlsT3B0aW9uczogVmVyaWZpY2F0aW9uRW1haWxPcHRpb25zID0ge30sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnN1YmplY3QgPyB7dmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0OiBlbWFpbE9wdGlvbnMuc3ViamVjdH0gOiB7fSksXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy50ZW1wbGF0ZSA/IHt2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlOiBlbWFpbE9wdGlvbnMudGVtcGxhdGV9IDoge30pLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMudGV4dCA/IHt2ZXJpZmljYXRpb25FbWFpbFRleHQ6IGVtYWlsT3B0aW9ucy50ZXh0fSA6IHt9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuQ09ORklSTV9TSUdOX1VQX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgIGZsdXgsXG4gICAgICAnc2VuZFZlcmlmaWNhdGlvbkVtYWlsJyxcbiAgICAgIERBVEFfVFlQRSxcbiAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgW10sXG4gICAgICB7b25TdWNjZXNzfVxuICAgICkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnNlbmRWZXJpZmljYXRpb25FbWFpbDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2VuZF92ZXJpZmljYXRpb25fZW1haWxfZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXNldFBhc3N3b3JkID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBjb2RlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IGNvZGVcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAuLi4odHlwZSA9PT0gJ2VtYWlsJyA/IHtlbWFpbDogdXNlcm5hbWV9IDoge3Bob25lOiB1c2VybmFtZX0pLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5yZXNldFBhc3N3b3JkO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLlJFU0VUX1BBU1NXT1JEX0VSUk9SXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oZmx1eCwgJ3Jlc2V0UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5yZXNldFBhc3N3b3JkO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNldF9wYXNzd29yZF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNvbXBsZXRlUGFzc3dvcmRSZXNldCA9IGFzeW5jIChcbiAgICBjb25maXJtYXRpb246IFBhc3N3b3JkUmVzZXRDb25maXJtYXRpb24sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBTdHJpbmcoY29uZmlybWF0aW9uLmVtYWlsIHx8IGNvbmZpcm1hdGlvbi5waG9uZSB8fCBjb25maXJtYXRpb24udXNlcm5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCB0eXBlID0gZ2V0UGFzc3dvcmRSZXNldFR5cGUoY29uZmlybWF0aW9uKTtcbiAgICByZXR1cm4gcmVzZXRQYXNzd29yZCh1c2VybmFtZSwgY29uZmlybWF0aW9uLnBhc3N3b3JkLCBjb25maXJtYXRpb24uY29kZSwgdHlwZSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVBhc3N3b3JkID0gYXN5bmMgKHBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgIHRydWVcbiAgO1xuXG4gIHJldHVybiB7XG4gICAgYWRkVXNlcixcbiAgICBjb25maXJtQ29kZSxcbiAgICBjb25maXJtU2lnblVwLFxuICAgIGNvbXBsZXRlUGFzc3dvcmRSZXNldCxcbiAgICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIsXG4gICAgY3VycmVudFVzZXIsXG4gICAgZGVsZXRlQmlsbGluZ0NhcmQsXG4gICAgbGlzdCxcbiAgICBmb3Jnb3RQYXNzd29yZCxcbiAgICBpc0xvZ2dlZEluLFxuICAgIGl0ZW1CeUlkLFxuICAgIGdldFVzZXJCeUF0dHJpYnV0ZSxcbiAgICBsaXN0QnlDb25uZWN0aW9uLFxuICAgIGxpc3RCeUxhdGVzdCxcbiAgICBsaXN0QnlSZWFjdGlvbnMsXG4gICAgbGlzdEJ5VGFncyxcbiAgICByZWZyZXNoU2Vzc2lvbjogcmVmcmVzaFNlc3Npb25BY3Rpb24sXG4gICAgcmVtb3ZlLFxuICAgIHJlcXVlc3RQYXNzd29yZFJlc2V0LFxuICAgIHJlc2V0UGFzc3dvcmQsXG4gICAgc2F2ZUJpbGxpbmdDYXJkLFxuICAgIHNlYXJjaCxcbiAgICBzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgc2Vzc2lvbixcbiAgICBzaWduSW4sXG4gICAgc2lnbk91dCxcbiAgICBzaWduVXAsXG4gICAgdXBkYXRlUGFzc3dvcmQsXG4gICAgdXBkYXRlVXNlcixcbiAgICB1cGRhdGVQbGFuLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyOiB1c2VyQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogdXNlckJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVVzZXJJbnB1dCIsIlVTRVJfQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicHVibGljUXVlcnkiLCJyZWZyZXNoU2Vzc2lvbiIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsImlzTG9nZ2VkSW4iLCJpc0xvZ2dlZEluV2l0aFN0b3JhZ2UiLCJub3JtYWxpemVTZXNzaW9uIiwic3RvcmVTZXNzaW9uIiwiZ2V0Q29uZmlnRnJvbUZsdXgiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsInN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbiIsIkRBVEFfVFlQRSIsIkRFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMiLCJTRU5TSVRJVkVfVVNFUl9GSUVMRFMiLCJTZXQiLCJJTlZBTElEX0ZJRUxEX1JFR0VYIiwiaGFzU2Vzc2lvbklkZW50aXR5IiwidXNlciIsIl9pZCIsInVzZXJJZCIsInVzZXJuYW1lIiwiZW1haWwiLCJzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCIsInVzZXJJbnB1dCIsImN1cnJlbnRTZXNzaW9uIiwibmV4dFVzZXIiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiZmllbGQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInBhc3N3b3JkIiwiU3RyaW5nIiwidHJpbSIsImN1cnJlbnRWYWx1ZSIsInN5bmNTdG9yZWRTZXNzaW9uIiwiZmx1eCIsInNlc3Npb25QYXRjaCIsImdldFN0YXRlIiwiZ2V0U2Vzc2lvblBheWxvYWQiLCJwYXlsb2FkIiwic2Vzc2lvbiIsImdldEZpZWxkUm9vdCIsInRyaW1tZWQiLCJtYXRjaCIsInNhbml0aXplVXNlclByb3BzIiwicHJvcHMiLCJmYWxsYmFja1Byb3BzIiwic2VlbiIsInNhbml0aXplZCIsImxpc3QiLCJyb290IiwiaGFzIiwiYWRkIiwicHVzaCIsImxlbmd0aCIsImdldEludmFsaWRGaWVsZHMiLCJlcnJvciIsImVycm9ycyIsInNvdXJjZSIsImludmFsaWRGaWVsZHMiLCJmb3JFYWNoIiwiaXRlbSIsIm1lc3NhZ2UiLCJleGVjIiwibGFzdEluZGV4IiwiZ2V0UGFzc3dvcmRSZXNldElkZW50aWZpZXIiLCJyZXF1ZXN0IiwiaWRlbnRpZmllciIsInBob25lIiwidHlwZSIsImluY2x1ZGVzIiwiZ2V0UGFzc3dvcmRSZXNldFR5cGUiLCJjb25maXJtYXRpb24iLCJ3aXRoSW52YWxpZEZpZWxkUmV0cnkiLCJyZXF1ZXN0V2l0aFByb3BzIiwic2FmZVByb3BzIiwic2l6ZSIsInJldHJ5UHJvcHMiLCJmaWx0ZXIiLCJkZWZhdWx0VXNlclZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsInZhbGlkYXRlZCIsInN0cmljdCIsIkVycm9yIiwiY3JlYXRlVXNlckFjdGlvbnMiLCJ1c2VyQmFzZSIsImFkYXB0ZXIiLCJ1c2VyQWRhcHRlciIsImFkYXB0ZXJPcHRpb25zIiwidXNlckFkYXB0ZXJPcHRpb25zIiwiY2xlYXJVc2VyUmVxdWVzdENhY2hlcyIsImFkZFVzZXIiLCJ1c2VyUHJvcHMiLCJyZXF1ZXN0T3B0aW9ucyIsInF1ZXJ5VmFyaWFibGVzIiwib25TdWNjZXNzIiwiZGF0YSIsInVzZXJzIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwicmV0dXJuUHJvcHMiLCJzaWduVXAiLCJleHBpcmVzIiwiU0lHTl9VUF9TVUNDRVNTIiwiU0lHTl9VUF9FUlJPUiIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVJbnB1dCIsImJpcnRoZGF0ZSIsImRvYiIsImZpcnN0TmFtZSIsImdlbmRlciIsImxhc3ROYW1lIiwibWFpbGluZ0xpc3QiLCJsZWdhY3lVc2VyIiwidXBkYXRlIiwidXBkYXRlZFVzZXIiLCJVUERBVEVfSVRFTV9TVUNDRVNTIiwiY29uZmlybUNvZGUiLCJjb2RlIiwiY29uZmlybWVkIiwiQ09ORklSTV9TSUdOX1VQX1NVQ0NFU1MiLCJyZW1vdmUiLCJSRU1PVkVfSVRFTV9TVUNDRVNTIiwic2Vzc2lvblByb3BzIiwic2Vzc2lvbkRhdGEiLCJnZXRVc2VyQnlTZXNzaW9uIiwiR0VUX1NFU1NJT05fRVJST1IiLCJuZXh0U2Vzc2lvbiIsIkdFVF9TRVNTSU9OX1NVQ0NFU1MiLCJwZXJzb25hSWQiLCJpdGVtQnlJZCIsImNhY2hlZFJlc3VsdCIsImdldFVzZXJCeUlkIiwiR0VUX0lURU1fU1VDQ0VTUyIsInJlc3VsdCIsInNhZmVVc2VyUHJvcHMiLCJnZXRVc2VyQnlBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJub3JtYWxpemVkQXR0cmlidXRlIiwibm9ybWFsaXplZFZhbHVlIiwibWF0Y2hpbmdVc2VyIiwic2F2ZUJpbGxpbmdDYXJkIiwiY2FyZCIsInNlc3Npb25Vc2VySWQiLCJkZWxldGVCaWxsaW5nQ2FyZCIsInVwZGF0ZVBsYW4iLCJwbGFuSWQiLCJuZXh0UGxhbklkIiwiZ2V0VXNlckxpc3QiLCJHRVRfTElTVF9TVUNDRVNTIiwibGlzdEJ5TGF0ZXN0IiwiZnJvbSIsInRvIiwibGlzdEJ5Q29ubmVjdGlvbiIsImxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZXMiLCJwZXJzb25hUHJvcHMiLCJsaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJ0YWdzIiwic2VhcmNoIiwicXVlcnkiLCJjdXJyZW50QXV0aGVudGljYXRlZFVzZXIiLCJjdXJyZW50VXNlciIsInJlZnJlc2hTZXNzaW9uQWN0aW9uIiwidG9rZW4iLCJzaWduSW4iLCJsZWdhY3lWYXJpYWJsZXMiLCJjb25maWciLCJyZXF1ZXN0ZWRFeHBpcmVzIiwiTWF0aCIsIm1heCIsIk51bWJlciIsImFwcCIsIm1heE1pbnV0ZXMiLCJxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQiLCJzdG9yZWRTZXNzaW9uIiwiU0lHTl9JTl9TVUNDRVNTIiwicGVyZm9ybVNpZ25JbiIsInNlc3Npb25SZXN1bHQiLCJiYXNlU2Vzc2lvbiIsImh5ZHJhdGVkU2Vzc2lvbiIsImZhbGxiYWNrU2Vzc2lvbiIsImZpbmFsU2Vzc2lvbiIsIlNJR05fSU5fRVJST1IiLCJzaWduT3V0IiwiU0lHTl9PVVRfU1VDQ0VTUyIsImNvbmZpcm1TaWduVXAiLCJyZXF1ZXN0UGFzc3dvcmRSZXNldCIsImZvcmdvdFBhc3N3b3JkU3VjY2VlZGVkIiwic3VjY2VzcyIsImZvcmdvdFBhc3N3b3JkIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJzZW5kVmVyaWZpY2F0aW9uRW1haWwiLCJlbWFpbE9wdGlvbnMiLCJzdWJqZWN0IiwidmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0IiwidGVtcGxhdGUiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwidGV4dCIsInZlcmlmaWNhdGlvbkVtYWlsVGV4dCIsIkNPTkZJUk1fU0lHTl9VUF9FUlJPUiIsInRoZW4iLCJyZXNldFBhc3N3b3JkIiwiUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyIsIlJFU0VUX1BBU1NXT1JEX0VSUk9SIiwiY29tcGxldGVQYXNzd29yZFJlc2V0IiwidXBkYXRlUGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsInVwZGF0ZVVzZXJBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGlCQUFpQixRQUFPLDRDQUE0QztBQUM1RSxTQUFRQyxjQUFjLFFBQU8sNEJBQTRCO0FBQ3pELFNBQVFDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLFdBQVcsRUFBRUMsY0FBYyxRQUFPLHFCQUFxQjtBQUN0RyxTQUFRQyxpQkFBaUIsUUFBTyxtQ0FBbUM7QUFDbkUsU0FDRUMscUJBQXFCLEVBQ3JCQyx5QkFBeUIsRUFDekJDLGNBQWNDLHFCQUFxQixFQUNuQ0MsZ0JBQWdCLEVBQ2hCQyxZQUFZLFFBQ1AseUJBQXlCO0FBQ2hDLFNBQVFDLGlCQUFpQixRQUFPLDZCQUE2QjtBQUM3RCxTQUFRQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLDhCQUE4QjtBQUNuRyxTQUFRQyx3QkFBd0IsUUFBTyxzQ0FBc0M7QUFRN0UsTUFBTUMsWUFBWTtBQUNsQixNQUFNQyw0QkFBNEI7SUFBQztJQUFVO0NBQVc7QUFDeEQsTUFBTUMsd0JBQXdCLElBQUlDLElBQUk7SUFDcEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRCxNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMscUJBQXFCLENBQUNDLE9BQzFCLENBQUMsQ0FB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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AppType } from '../../types/apps.types.js';
|
|
2
2
|
export declare class AppValidationError extends Error {
|
|
3
|
-
field?: string;
|
|
4
|
-
constructor(message: string, field?: string);
|
|
3
|
+
field?: string | undefined;
|
|
4
|
+
constructor(message: string, field?: string | undefined);
|
|
5
5
|
}
|
|
6
6
|
export declare const validateAppInput: (app: unknown) => AppType;
|
|
7
7
|
export declare const parseApp: (app: AppType) => AppType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/appAdapter/appAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,qBAAa,kBAAmB,SAAQ,KAAK;IACP,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAiBD,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,KAAG,OAW/C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,OAAO,KAAG,OAUvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"appAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/appAdapter/appAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,qBAAa,kBAAmB,SAAQ,KAAK;IACP,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAiBD,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,KAAG,OAW/C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,OAAO,KAAG,OAUvC,CAAC"}
|
|
@@ -11,8 +11,8 @@ export interface DocumentType {
|
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
}
|
|
13
13
|
export declare class ArangoValidationError extends Error {
|
|
14
|
-
field?: string;
|
|
15
|
-
constructor(message: string, field?: string);
|
|
14
|
+
field?: string | undefined;
|
|
15
|
+
constructor(message: string, field?: string | undefined);
|
|
16
16
|
}
|
|
17
17
|
export declare const validateDocumentInput: (doc: unknown) => DocumentType;
|
|
18
18
|
export declare const formatDocumentOutput: (doc: DocumentType) => DocumentType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arangoAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/arangoAdapter/arangoAdapter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IACV,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAcD,eAAO,MAAM,qBAAqB,GAAI,KAAK,OAAO,KAAG,YAWpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,KAAK,YAAY,KAAG,YAAmB,CAAC;AAE7E,eAAO,MAAM,aAAa,GAAI,KAAK,YAAY,KAAG,YAUjD,CAAC;AAuBF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAQvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"arangoAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/arangoAdapter/arangoAdapter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IACV,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAcD,eAAO,MAAM,qBAAqB,GAAI,KAAK,OAAO,KAAG,YAWpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,KAAK,YAAY,KAAG,YAAmB,CAAC;AAE7E,eAAO,MAAM,aAAa,GAAI,KAAK,YAAY,KAAG,YAUjD,CAAC;AAuBF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAQvE,CAAC"}
|
|
@@ -23,8 +23,8 @@ export interface ContentInputType {
|
|
|
23
23
|
[key: string]: any;
|
|
24
24
|
}
|
|
25
25
|
export declare class ContentValidationError extends Error {
|
|
26
|
-
field?: string;
|
|
27
|
-
constructor(message: string, field?: string);
|
|
26
|
+
field?: string | undefined;
|
|
27
|
+
constructor(message: string, field?: string | undefined);
|
|
28
28
|
}
|
|
29
29
|
export declare const parseContent: (content: ContentType) => ContentType;
|
|
30
30
|
export declare const parseContentInput: (content: ContentInputType) => ContentInputType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/contentAdapter/contentAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACX,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AA2BD,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,WAYnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,gBAAgB,KAAG,gBAY7D,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAAI,SAAS,WAAW,KAAG,WAAoD,CAAC"}
|
|
1
|
+
{"version":3,"file":"contentAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/contentAdapter/contentAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACX,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AA2BD,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,WAYnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,gBAAgB,KAAG,gBAY7D,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAAI,SAAS,WAAW,KAAG,WAAoD,CAAC"}
|
|
@@ -15,8 +15,8 @@ export interface ConversationType {
|
|
|
15
15
|
[key: string]: any;
|
|
16
16
|
}
|
|
17
17
|
export declare class ConversationValidationError extends Error {
|
|
18
|
-
field?: string;
|
|
19
|
-
constructor(message: string, field?: string);
|
|
18
|
+
field?: string | undefined;
|
|
19
|
+
constructor(message: string, field?: string | undefined);
|
|
20
20
|
}
|
|
21
21
|
export declare const validateConversationInput: (conversation: unknown) => ConversationType;
|
|
22
22
|
export declare const formatConversationOutput: (conversation: ConversationType) => ConversationType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversationAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/conversationAdapter/conversationAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAChB,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAmBD,eAAO,MAAM,yBAAyB,GAAI,cAAc,OAAO,KAAG,gBAWjE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,cAAc,gBAAgB,KAAG,gBAAgC,CAAC;AAE3G,eAAO,MAAM,iBAAiB,GAAI,cAAc,gBAAgB,KAAG,gBAUlE,CAAC"}
|
|
1
|
+
{"version":3,"file":"conversationAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/conversationAdapter/conversationAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAChB,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAmBD,eAAO,MAAM,yBAAyB,GAAI,cAAc,OAAO,KAAG,gBAWjE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,cAAc,gBAAgB,KAAG,gBAAgC,CAAC;AAE3G,eAAO,MAAM,iBAAiB,GAAI,cAAc,gBAAgB,KAAG,gBAUlE,CAAC"}
|
|
@@ -37,8 +37,8 @@ export interface EventType {
|
|
|
37
37
|
[key: string]: any;
|
|
38
38
|
}
|
|
39
39
|
export declare class EventValidationError extends Error {
|
|
40
|
-
field?: string;
|
|
41
|
-
constructor(message: string, field?: string);
|
|
40
|
+
field?: string | undefined;
|
|
41
|
+
constructor(message: string, field?: string | undefined);
|
|
42
42
|
}
|
|
43
43
|
export declare const validateEventInput: (event: unknown) => EventType;
|
|
44
44
|
export declare const formatEventOutput: (event: EventType) => EventType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/eventAdapter/eventAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAwCD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAWnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,KAAG,SAAkB,CAAC;AAExE,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,KAAG,SAU7C,CAAC"}
|
|
1
|
+
{"version":3,"file":"eventAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/eventAdapter/eventAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAwCD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAWnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,KAAG,SAAkB,CAAC;AAExE,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,KAAG,SAU7C,CAAC"}
|
|
@@ -20,8 +20,8 @@ export interface FileType {
|
|
|
20
20
|
[key: string]: any;
|
|
21
21
|
}
|
|
22
22
|
export declare class FileValidationError extends Error {
|
|
23
|
-
field?: string;
|
|
24
|
-
constructor(message: string, field?: string);
|
|
23
|
+
field?: string | undefined;
|
|
24
|
+
constructor(message: string, field?: string | undefined);
|
|
25
25
|
}
|
|
26
26
|
export declare const validateFileInput: (file: unknown) => FileType;
|
|
27
27
|
export declare const formatFileOutput: (file: FileType) => FileType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/fileAdapter/fileAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACR,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAsBD,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,KAAG,QAWjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,QAAQ,KAAG,QAAgB,CAAC;AAEnE,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAqB5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,QAAQ,KAAG,QAU1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"fileAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/fileAdapter/fileAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACR,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAsBD,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,KAAG,QAWjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,QAAQ,KAAG,QAAgB,CAAC;AAEnE,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAqB5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,QAAQ,KAAG,QAU1C,CAAC"}
|
|
@@ -20,8 +20,8 @@ export interface Group {
|
|
|
20
20
|
userCount?: number;
|
|
21
21
|
}
|
|
22
22
|
export declare class GroupValidationError extends Error {
|
|
23
|
-
field?: string;
|
|
24
|
-
constructor(message: string, field?: string);
|
|
23
|
+
field?: string | undefined;
|
|
24
|
+
constructor(message: string, field?: string | undefined);
|
|
25
25
|
}
|
|
26
26
|
export declare const validateGroupInput: (group: unknown) => Group;
|
|
27
27
|
export declare const parseGroup: (item: any) => Group;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/groupAdapter/groupAdapter.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,KAAK;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAsBD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAWnD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,GAAG,KAAG,KAkBtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"groupAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/groupAdapter/groupAdapter.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,KAAK;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAsBD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAWnD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,GAAG,KAAG,KAkBtC,CAAC"}
|
|
@@ -29,8 +29,8 @@ export interface ImageType {
|
|
|
29
29
|
[key: string]: any;
|
|
30
30
|
}
|
|
31
31
|
export declare class ImageValidationError extends Error {
|
|
32
|
-
field?: string;
|
|
33
|
-
constructor(message: string, field?: string);
|
|
32
|
+
field?: string | undefined;
|
|
33
|
+
constructor(message: string, field?: string | undefined);
|
|
34
34
|
}
|
|
35
35
|
export declare const validateImageInput: (image: unknown) => ImageType;
|
|
36
36
|
export declare const formatImageOutput: (image: ImageType) => ImageType;
|