@colijnit/transaction 256.1.27 → 256.1.28
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/bundles/colijnit-transaction.umd.js +278 -111
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +11 -9
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +12 -10
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile/component/delivery-planning-overview-tile-line/delivery-planning-overview-tile-line.component.js +4 -15
- package/esm2015/lib/component/dialog/dialog-branch/dialog-branch.component.js +131 -0
- package/esm2015/lib/component/dialog/dialog-branch/dialog-branch.module.js +26 -0
- package/esm2015/lib/component/transaction-internal/transaction-internal.module.js +4 -4
- package/esm2015/lib/component/transaction-line/transaction-planning-line/transaction-planning-line.component.js +38 -3
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-sales-quotation/transaction-quick-access-sales-quotation.component.js +2 -3
- package/esm2015/lib/service/dialog.service.js +6 -9
- package/esm2015/lib/service/transaction-base.service.js +1 -2
- package/esm2015/lib/service/transaction.service.js +2 -2
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +288 -125
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/delivery-planning/style/_layout.scss +5 -0
- package/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile/component/delivery-planning-overview-tile-line/style/_layout.scss +11 -10
- package/lib/component/dialog/dialog-branch/dialog-branch.component.d.ts +48 -0
- package/lib/component/dialog/dialog-branch/dialog-branch.module.d.ts +2 -0
- package/lib/component/dialog/dialog-branch/style/_layout.scss +11 -0
- package/lib/component/dialog/dialog-branch/style/_material-definition.scss +2 -0
- package/lib/component/dialog/dialog-branch/style/_theme.scss +4 -0
- package/lib/component/dialog/dialog-branch/style/material.scss +4 -0
- package/lib/component/transaction-internal/style/_layout.scss +3 -0
- package/lib/component/transaction-line/transaction-line/style/_layout.scss +8 -0
- package/lib/component/transaction-line/transaction-planning-line/transaction-planning-line.component.d.ts +2 -1
- package/lib/service/dialog.service.d.ts +1 -1
- package/package.json +2 -2
|
@@ -82,7 +82,6 @@ export class TransactionBaseService extends BaseModuleService {
|
|
|
82
82
|
this.relationUpdated = new BehaviorSubject(undefined);
|
|
83
83
|
this.transactionKindSet = new BehaviorSubject(false);
|
|
84
84
|
this.transactionMargeViewClicked = new Subject();
|
|
85
|
-
this.currentBranch = "1"; // current user branch, needs to be set before we can do anything with transactions
|
|
86
85
|
this.autoSave = false;
|
|
87
86
|
this.manualSaveParam = false;
|
|
88
87
|
this.applicationUser = false;
|
|
@@ -664,4 +663,4 @@ TransactionBaseService.ctorParameters = () => [
|
|
|
664
663
|
{ type: RelationService },
|
|
665
664
|
{ type: SharedService }
|
|
666
665
|
];
|
|
667
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDbkcsT0FBTyxFQUVMLHlCQUF5QixFQUMxQixNQUFNLCtEQUErRCxD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Q0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0JBQ3RGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7O1lBcnBCRixVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7WUExQ3hCLDBCQUEwQjtZQUMxQixhQUFhO1lBQ2IsMkJBQTJCO1lBQzNCLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQTBCMUIscUNBQXFDO1lBR3JDLGVBQWU7WUFDZixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2FjdGlvbkxvY2tSZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1sb2NrLXJlc3VsdC5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBcnRpY2xlQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi9hcnRpY2xlLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLXJlbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24uYm8nO1xyXG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtTdXBwbGllckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1mdWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtEb2NEZWxpdmVyeUJhdGNofSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZG9jLWRlbGl2ZXJ5LWJhdGNoLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1saW5lLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgVHJhbnNhY3Rpb25MaW5lSW5mbyxcclxuICBUcmFuc2FjdGlvblJlZlRyYW5zYWN0aW9uXHJcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8taGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7R2V0UHVyY2hhc2VQb3J0YWxMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLXBvcnRhbC1saW5lJztcclxuaW1wb3J0IHtSZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlZi10cmFuc2FjdGlvbi5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoUmVzdWx0fSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtcmVzdWx0JztcclxuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tc21hbGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGlvblN0YXR1c30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5wdXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnl9IGZyb20gJy4uL2VudW0vdHJhbnNhY3Rpb24tdHlwZS1jYXRlZ29yeS5lbnVtJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7QmFzZU1vZHVsZVNlcnZpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTInO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2NyZWVuLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICcuLi9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZSc7XHJcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9uU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uJztcclxuaW1wb3J0IHtTaGFyZWRTZXJ2aWNlfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGNvbXBvbmVudHNcIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbk1hcmdpbkluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbWFyZ2luLWluZm8uYm9cIjtcclxuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW0nO1xyXG5pbXBvcnQge1N1cHBsaWVyTGlnaHRPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1saWdodC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWxpc3Qtb2JqZWN0LmJvJztcclxuXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcInJvb3RcIn0pXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJhc2VTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZHVsZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCB0eXBlb2YgUmVsYXRpb24+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHR5cGVvZiBSZWxhdGlvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBDdXN0b21lckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBTdXBwbGllckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgQ3VzdG9tZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2VydmljZU9yZGVyLCBDdXN0b21lckZ1bGxPYmplY3RdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpdGxlRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgXCJSRVRBSUxcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiUFVSQ0hBU0VcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBcIlFVT1RBVElPTlwiXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pY29uRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBJY29uLkNhcnRTaG9wcGluZ1JlZ3VsYXJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBJY29uLlBhbGxldEJveGVzU2hhcnBSZWd1bGFyXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIEljb24uUmVndWxhckNhcnRTaG9wcGluZ0NpcmNsZVF1ZXN0aW9uXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0QWN0aXZlUnVicmljRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnk+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5PihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlB1cmNoYXNlT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyUXVvdGF0aW9uXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuQ2FzaERlc2ssIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJDYXNoUmVnaXN0ZXJdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiT1ZFUlZJRVdfQU5EX1BBWU1FTlRcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiT1ZFUlZJRVdcIl1cclxuICBdKTtcclxuXHJcbiAgcHVibGljIGxvZ291dDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHJlbGF0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFJlbGF0aW9uPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVsYXRpb24+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uS2luZFNldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uTWFyZ2VWaWV3Q2xpY2tlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50QnJhbmNoOiBzdHJpbmcgPSBcIjFcIjsgLy8gY3VycmVudCB1c2VyIGJyYW5jaCwgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB3ZSBjYW4gZG8gYW55dGhpbmcgd2l0aCB0cmFuc2FjdGlvbnNcclxuICBwdWJsaWMgYXV0b1NhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbWFudWFsU2F2ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFwcGxpY2F0aW9uVXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWZ0ZXJTYWxlc1N5c3RlbVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzZXQgYWN0aXZlUnVicmljKHZhbHVlOiBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSkge1xyXG4gICAgdGhpcy5fYWN0aXZlUnVicmljID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmFjdGl2ZVJ1YnJpY0NoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZVJ1YnJpYyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZVJ1YnJpYygpOiBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUnVicmljO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbGF0aW9uT25SZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBnZXQgdGl0bGVGb3JDaGVja291dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpY29uRm9yQ2hlY2tvdXQoKTogSWNvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faWNvbkZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcGF5bWVudFN0ZXBUaXRsZUZvckNoZWNrb3V0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tvdXRQYXltZW50U3RlcFRpdGxlRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbktpbmQodmFsdWU6IFRyYW5zYWN0aW9uS2luZCkge1xyXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uS2luZCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb25LaW5kID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuYWN0aXZlUnVicmljID0gdGhpcy5fZGVmYXVsdEFjdGl2ZVJ1YnJpY0Zyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHZhbHVlKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbktpbmRTZXQubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJhbnNhY3Rpb25LaW5kKCk6IFRyYW5zYWN0aW9uS2luZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25LaW5kO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGN1cnJlbnRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBuZXcgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UoKTtcclxuICBwdWJsaWMgaGFzVHJhbnNhY3Rpb25MaW5lczogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIHNldCBwdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckdlbmVyYXRlUHVyY2hhc2VPcmRlcnNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmVjZWl2ZUdvb2RzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZWNlaXZlR29vZHNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucHVyY2hhc2VPcmRlclJlY2VpdmVHb29kc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9yZWNlaXZlR29vZHNDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZWNlaXZlR29vZHNDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZUdvb2RzQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhbGxvY2F0ZUdvb2RzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJBbGxvY2F0ZUdvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzYWxlc09yZGVyUGlja2luZ0dvb2RzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9waWNraW5nR29vZHNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlclBpY2tpbmdHb29kc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9waWNraW5nR29vZHNDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzYWxlc09yZGVyUGlja2VkQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9waWNrZWRDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9waWNrZWRDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzYWxlc09yZGVyVG9CZVBpY2tlZENvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdG9CZVBpY2tlZENvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyVG9CZVBpY2tlZENvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl90b0JlUGlja2VkQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWxsb2NhdGVHb29kc0NvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVsaXZlcnlDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RlbGl2ZXJ5Q29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJEZWxpdmVyeUNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9kZWxpdmVyeUNvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlbGl2ZXJ5Q29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlbGl2ZXJ5Q29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBpbnZvaWNlQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnZvaWNlQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmludm9pY2VDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5faW52b2ljZUNvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJDb25maXJtYXRpb25TZW50KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudENoYW5nZWQubmV4dCh0aGlzLl9zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNhbGVzT3JkZXJDb25maXJtYXRpb25TZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbnZvaWNlQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludm9pY2VDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlbGF0aW9uKHZhbHVlOiBSZWxhdGlvbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3JlbGF0aW9uID0gdmFsdWU7XHJcbiAgICAgIHRoaXMucmVsYXRpb25VcGRhdGVkLm5leHQodGhpcy5fcmVsYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZWxhdGlvbigpOiBSZWxhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHRyYW5zYWN0aW9uRGlydHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RyYW5zYWN0aW9uRGlydHkgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25EaXJ0eS5uZXh0KHRoaXMuX3RyYW5zYWN0aW9uRGlydHkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbkRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uRGlydHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNhc2hSZWdpc3RlcnNEaXJ0eSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2FzaFJlZ2lzdGVyc0RpcnR5ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhc2hSZWdpc3RlcnNEaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAgdGhpcy5fY2FzaFJlZ2lzdGVyc0RpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYXNoUmVnaXN0ZXJHcm91cHNEaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXNoUmVnaXN0ZXJzRGlydHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmVbXSA9IFtdO1xyXG4gIHB1YmxpYyBkb2NEZWxpdmVyeUJhdGNoOiBEb2NEZWxpdmVyeUJhdGNoID0gbmV3IERvY0RlbGl2ZXJ5QmF0Y2goKVxyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlckFsbG93c0Ryb3BTaGlwbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlclJlY2VpdmVHb29kc1dpdGhEYXRhVGVybWluYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJNTG9jYXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJKc1BpY2tpbmdMaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyU2VsbERpcmVjdGx5RnJvbVN1cHA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJTdG9ja011dEJlZm9yZURlbGl2ZXJ5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBhcnRpY2xlQW1vdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9uTG9ja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FscmVhZHlMb2NrZWQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25MaW5lQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBub3QgYmVpbmcgdXNlZCBhdCB0aGUgbW9tZW50LCBzbyBpdCBzaG91bGQgYmUgZmFsc2VcclxuICBwcm90ZWN0ZWQgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FjdGl2ZVJ1YnJpYzogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkgPSBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyT3ZlcnZpZXc7XHJcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQ7XHJcbiAgcHJpdmF0ZSBfcmVsYXRpb246IFJlbGF0aW9uID0gbmV3IFJlbGF0aW9uKCk7XHJcbiAgcHJpdmF0ZSBfcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZWNlaXZlR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGlja2luZ0dvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGlja2VkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdG9CZVBpY2tlZENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kZWxpdmVyeUNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2ludm9pY2VDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbHJlYWR5TG9ja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25EaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Nhc2hSZWdpc3RlcnNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uTWFyZ2luSW5mbzogVHJhbnNhY3Rpb25NYXJnaW5JbmZvO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvcHRpb25zU2VydmljZTogVHJhbnNhY3Rpb25TZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjb25uZWN0b3I6IFRyYW5zYWN0aW9uQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBhcnRpY2xlQ29ubmVjdG9yOiBBcnRpY2xlQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWN0aW9uYXJ5U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25FdmVudFNlcnZpY2U6IFRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlOiBUcmFuc2FjdGlvblJlbGF0aW9uU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBzY3JlZW5Db25maWdTZXJ2aWNlOiBUcmFuc2FjdGlvblNjcmVlbkNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJlbGF0aW9uU2VydmljZTogUmVsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHNjcmVlbkNvbmZpZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9uczogYW55LCByZXNldEN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZXNldEN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICB0aGlzLnJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUob3B0aW9ucyk7XHJcbiAgICBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuaW5pdChvcHRpb25zKTtcclxuICAgIGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmluaXQob3B0aW9ucyk7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJlcGFyZU1Mb2NhdEludGVybmFsUGFyYW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uTUxvY2F0KS50aGVuKCh2YWx1ZSkgPT4gdGhpcy5pbnRlcm5hbFBhcmFtZXRlck1Mb2NhdCA9IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVwYXJlUGFrQmlubmVuSW50ZXJuYWxQYXJhbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5SZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsKS50aGVuKCh2YWx1ZSkgPT4gdGhpcy5pbnRlcm5hbFBhcmFtZXRlclBha0Jpbm5lbiA9IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlRGlyZWN0U2VsbEludGVybmFsUGFyYW0oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmludGVybmFsUGFyYW1ldGVyU2VsbERpcmVjdGx5RnJvbVN1cHAgPSBhd2FpdCB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uU2VsbERpcmVjdGx5RnJvbVN1cHBsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlSnNQaWNraW5nTGlzdEludGVybmFsUGFyYW0oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmludGVybmFsUGFyYW1ldGVySnNQaWNraW5nTGlzdCA9IGF3YWl0IHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5QaWNraW5nTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJlcGFyZU1hbnVhbFNhdmVJbnRlcm5hbFBhcmFtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRJbnRlcm5hbFBhcmFtZXRlcihJbnRlcm5hbFBhcmFtLlRyYW5zTWFudWFsU2F2ZSkudGhlbigodmFsdWUpID0+IHRoaXMubWFudWFsU2F2ZVBhcmFtID0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHByZXBhcmVBZnRlclNhbGVzU3lzdGVtUGFyYW0oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmFmdGVyU2FsZXNTeXN0ZW1QYXJhbSA9IGF3YWl0IHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5BZnRlclNhbGVzU3lzdGVtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dpc3RpY3NCdXR0b25WaXNpYmxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlSnNQaWNraW5nTGlzdEludGVybmFsUGFyYW0oKTtcclxuICAgIHJldHVybiB0aGlzLmludGVybmFsUGFyYW1ldGVySnNQaWNraW5nTGlzdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVwYXJlRHJvcFNoaXBtZW50SW50ZXJuYWxQYXJhbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5Ecm9wU2hpcG1lbnQpLnRoZW4oKHZhbHVlKSA9PiB0aGlzLmludGVybmFsUGFyYW1ldGVyQWxsb3dzRHJvcFNoaXBtZW50ID0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXBhcmVSZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsSW50ZXJuYWxQYXJhbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5SZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsKS50aGVuKCh2YWx1ZTogYm9vbGVhbikgPT4gdGhpcy5pbnRlcm5hbFBhcmFtZXRlclJlY2VpdmVHb29kc1dpdGhEYXRhVGVybWluYWwgPSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW06IEludGVybmFsUGFyYW0pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtKTtcclxuICAgIHJldHVybiByZXNwb25zZSAmJiByZXNwb25zZSA9PT0gJ0onO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU5ld1JlbGF0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xheno6IHR5cGVvZiBSZWxhdGlvbiA9IHRoaXMuX2dldFJlbGF0aW9uQ2xhc3ModGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gICAgdGhpcy5yZWxhdGlvbiA9IG5ldyBjbGF6ejtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbk9uVHJhbnNhY3Rpb24ocmVsYXRpb25OcjogbnVtYmVyLCByZWxhdGlvbktpbmQ6IFJlbGF0aW9uS2luZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb24ocmVsYXRpb25LaW5kLCByZWxhdGlvbk5yKTtcclxuICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uID0gcmVsYXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRDdXJyZW50VHJhbnNhY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSgpO1xyXG4gICAgdGhpcy5fcmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICB0aGlzLmFydGljbGVBbW91bnQgPSAwO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5vcmRlckNvbmZpcm1hdGlvbkRyb3BwZWQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5vcmRlckNvbmZpcm1hdGlvblJlc2V0Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24ocmVtZW1iZXJUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Mb2NrZWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgdHJ1ZSlcclxuICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSlcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgICBpZiAocmVtZW1iZXJUcmFuc2FjdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tbWl0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uTG9ja2VkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5ibG9ja1NjcmVlbi5uZXh0KGZhbHNlKTtcclxuICAgIGlmICh0aGlzLm1hbnVhbFNhdmVQYXJhbSAmJiAhZm9yY2UpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCByb2xsYmFja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yb2xsYmFjaygpO1xyXG4gICAgaWYgKHJvbGxiYWNrU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnJlc2V0TG9ja1RyYW5zYWN0aW9uKCk7XHJcbiAgICAgIGlmIChyZWZyZXNoICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpIHtcclxuICAgICAgICB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm9sbGJhY2tTdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrQmVhY29uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0b3Iucm9sbGJhY2tCZWFjb24oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkxpbmVBZGRlZC5uZXh0KHVuZGVmaW5lZCk7IC8vIHJlc2V0IGxpbmUgYWRkZWRcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZCh0cmFuc2FjdGlvbk5yOiBudW1iZXIsIHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkxpbmVBZGRlZC5uZXh0KHVuZGVmaW5lZCk7IC8vIHJlc2V0IGxpbmUgYWRkZWRcclxuICAgIGxldCBmaW5pc2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25IZWFkZXJCeU5yQW5kS2luZCh0cmFuc2FjdGlvbktpbmQsIHRyYW5zYWN0aW9uTnIpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzICYmICFmaW5pc2hlZCkge1xyXG4gICAgICAgIHJlc3BvbnNlLnRyYW5zYWN0aW9uTGluZXMubGVuZ3RoID0gMDsgLy8gcHJldmVudCBsb2FkaW5nIGVtcHR5IGxpbmVzXHJcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZCh0cmFuc2FjdGlvbktpbmQsIHRyYW5zYWN0aW9uTnIpO1xyXG4gICAgZmluaXNoZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRXZWJTZXNzaW9uU2FsZXNPcmRlcih0cmFuc2FjdGlvblV1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIodHJhbnNhY3Rpb25VdWlkKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZSAmJiB0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHRyeVRvTG9ja1RyYW5zYWN0aW9uKGlkPzogbnVtYmVyLCB2ZXJzaW9uPzogbnVtYmVyLCBzZWNvbmRBdHRlbXB0OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkICYmIHZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xyXG4gICAgICB2ZXJzaW9uID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb247XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmJsb2NrU2NyZWVuLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAoIWlkKSB7IC8vIGl0J3MgYSBuZXcgdHJhbnNhY3Rpb24sIG5vIG5lZWQgdG8gbG9ja1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2FscmVhZHlMb2NrZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2NrUmVzcG9uc2U6IFRyYW5zYWN0aW9uTG9ja1Jlc3VsdCA9IGF3YWl0IHRoaXMuX2xvY2tUcmFuc2FjdGlvbihpZCwgdmVyc2lvbik7XHJcbiAgICBpZiAobG9ja1Jlc3BvbnNlKSB7XHJcbiAgICAgIGlmICghbG9ja1Jlc3BvbnNlLmlzTG9ja1N1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmJsb2NrU2NyZWVuLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmIChzZWNvbmRBdHRlbXB0KSB7IC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKFwiVFJBTlNBQ1RJT05fVkVSU0lPTl9NSVNNQVRDSF9FUlJPUlwiLCB0cnVlKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsb2NrUmVzcG9uc2UuaXNMYXRlc3RWZXJzaW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1RvYXN0KFwiVFJBTlNBQ1RJT05fVkVSU0lPTl9NSVNNQVRDSFwiLCB0cnVlKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKGlkKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5oaWRlVG9hc3RBZnRlck1zKDMwMDApO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGxvY2tEZXRhaWxzOiBzdHJpbmcgPSBgJHt0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkJZXCIpfTogJHtsb2NrUmVzcG9uc2UubG9ja2VkQnl9XHJcbiAgICAgICAgICAgICAgICAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiU0lOQ0VcIiwgZmFsc2UpfSAke2xvY2tSZXNwb25zZS5sb2NrZWRTaW5jZS50b0xvY2FsZVN0cmluZygpfWA7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKFwiVFJBTlNBQ1RJT05fQUxSRUFEWV9MT0NLRURcIiwgdHJ1ZSwgbG9ja0RldGFpbHMpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hbHJlYWR5TG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkOiBudW1iZXIsIGxpbmVJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9IaXN0b3J5W10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZCwgbGluZUlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxSZWZUcmFuc2FjdGlvbltdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVmVHJhbnNhY3Rpb25zKHRyYW5zSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdDogR2V0UHVyY2hhc2VQb3J0YWxMaW5lKTogUHJvbWlzZTxQdXJjaGFzZVBvcnRhbExpbmVbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uQW5kQ29tbWl0KHJlc3BvbnNlPzogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIGNvbW1pdFRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gd2UgY2FuIHNhZmVseSBzYXZlL2NvbW1pdCB0aGUgY2hhbmdlc1xyXG4gICAgaWYgKGNvbW1pdFRyYW5zYWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuc2F2ZVRyYW5zYWN0aW9uKGZhbHNlKTtcclxuICAgICAgaWYgKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWl0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVBZnRlclJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZG8gYW4gZXh0cmEgY29tbWl0IHRvIHJlbGVhc2UgdGhlIGxvY2tcclxuICAgICAgLy8gY29uc3QgY29tbWl0U3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuYmxvY2tTY3JlZW4ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSAmJiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZS5pc1N1Y2Nlc3MgLyomJiBjb21taXRTdWNjZXNzKi87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmJsb2NrU2NyZWVuLm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHZhbHVlLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiZcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkICYmXHJcbiAgICAgIHZhbHVlLnRyYW5zYWN0aW9uSW5mby5pZCAhPT0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25Ecm9wcGVkLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5vcmRlckNvbmZpcm1hdGlvblJlc2V0Lm5leHQoKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uS2luZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQ7XHJcbiAgICB0aGlzLmhhc1RyYW5zYWN0aW9uTGluZXMgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuX3NldEFtb3VudCgpO1xyXG4gICAgdGhpcy5fY2hlY2tIZWFkZXJTdGF0dXMoKTtcclxuICAgIHRoaXMuY2hlY2tSZWZUcmFuc2FjdGlvbigpOyAvLyB0b2RvOiBnZXQgZnJvbSB0aGUgaGVhZGVyIHN0YXR1c1xyXG4gICAgaWYgKHRoaXMuZ2V0UmVsYXRpb25PblJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVsYXRpb24gfHwgdGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkICE9PSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0UmVsYXRpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWxhdGlvblVwZGF0ZWQubmV4dCh0aGlzLnJlbGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbiA9IG5ldyBDdXN0b21lckZ1bGxPYmplY3QoKTtcclxuICAgICAgICB0aGlzLnJlbGF0aW9uLnR5cGUgPSBSZWxhdGlvbk5hbWVLaW5kLlByaXZhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uVXBkYXRlZC5uZXh0KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25TZXQubmV4dCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbik7XHJcbiAgICBhd2FpdCB0aGlzLl9oYW5kbGVBZnRlclJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2NoZWNrSGVhZGVyU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cykge1xyXG4gICAgICAvL3NhbGVzIG9yZGVyXHJcbiAgICAgIHRoaXMucHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5T3JkZXJlZDtcclxuICAgICAgdGhpcy5hbGxvY2F0ZUdvb2RzQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseUFsbG9jYXRlZDtcclxuICAgICAgdGhpcy5zYWxlc09yZGVyUGlja2VkQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVBpY2tlZDtcclxuICAgICAgdGhpcy5zYWxlc09yZGVyVG9CZVBpY2tlZENvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlUb0JlUGlja2VkO1xyXG4gICAgICB0aGlzLmRlbGl2ZXJ5Q29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseURlbGl2ZXJlZDtcclxuICAgICAgdGhpcy5pbnZvaWNlQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseUludm9pY2VkO1xyXG4gICAgICAvLyBwdXJjaGFzZVxyXG4gICAgICB0aGlzLnB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UHVyY2hhc2VDb25maXJtZWQ7XHJcbiAgICAgIHRoaXMucmVjZWl2ZUdvb2RzQ29tcGxldGVkID0gdGhpcy5pbnRlcm5hbFBhcmFtZXRlclBha0Jpbm5lbiA/IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlSZWNlaXZlZFVuUHJvY2Vzc2VkIDogdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVJlY2VpdmVkO1xyXG4gICAgICB0aGlzLnNhbGVzT3JkZXJDb25maXJtYXRpb25TZW50ID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNDb25maXJtYXRpb25TZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoZWNrUmVmVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fc2hvdWxkQ2hlY2tSZWZUcmFuc2FjdGlvbnMoKSkge1xyXG4gICAgICBjb25zdCB0cmFuc0lkOiBudW1iZXIgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XHJcbiAgICAgIGlmICghdHJhbnNJZCkgeyAvLyBuZXcgdHJhbnNhY3Rpb24sIGdldCBvdXRcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYXJ0aWNsZVRyYW5zTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKHQgPT4gdC5pc0FydGljbGUpO1xyXG4gICAgICB0aGlzLmdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkKS50aGVuKGFzeW5jIChyZWZzOiBSZWZUcmFuc2FjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnRpY2xlVHJhbnNMaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHJlZlRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbltdID0gW107XHJcbiAgICAgICAgICBjb25zdCB0cmFuc0xpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8gPSBhcnRpY2xlVHJhbnNMaW5lc1tpXTtcclxuICAgICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgIGlmIChyZWZzICYmIHJlZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzYWxlc09yZGVyczogUmVmVHJhbnNhY3Rpb25bXSA9IHJlZnMuZmlsdGVyKHIgPT4gci5yZWZUcmFuc2FjdGlvblR5cGUgPT09IFRyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzYWxlc09yZGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3Q6IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QgPSBuZXcgVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCgpO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3QudHJhbnNhY3Rpb25LaW5kID0gc2FsZXNPcmRlcnNbal0ucmVmVHJhbnNhY3Rpb25UeXBlO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3QudHJhbnNOciA9IHBhcnNlSW50KHNhbGVzT3JkZXJzW2pdLnJlZlRyYW5zYWN0aW9uTnIpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zU2VhcmNoUmVzdWx0OiBUcmFuc2FjdGlvblNlYXJjaFJlc3VsdCA9IGF3YWl0IHRoaXMuc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgIGlmICh0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnMgJiYgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJlZlRyYW5zYWN0aW9ucy5wdXNoKG5ldyBUcmFuc2FjdGlvblJlZlRyYW5zYWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0udHJhbnNJZCxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zTnIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zYWN0aW9uS2luZCxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnJlbGF0aW9uTnIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS5yZWxhdGlvbk5hbWUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJhbnNMaW5lLnJlZlRyYW5zYWN0aW9ucyA9IHJlZlRyYW5zYWN0aW9ucztcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25MaW5lUmVmVHJhbnNhY3Rpb25zQ2hhbmdlZC5uZXh0KHRyYW5zTGluZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdEFtb3VudCh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0UGVyY2VudGFnZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRMb2NrVHJhbnNhY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbHJlYWR5TG9ja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkVHJhbnNhY3Rpb25NYXJnZUluZm9MaXN0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25NYXJnaW5JbmZvPiB7XHJcbiAgICBpZiAodXVpZCkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25NYXJnaW5JbmZvKHV1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFN1cHBsaWVyTGlnaHRCeUlkKHN1cHBsaWVySWQ6IG51bWJlcik6IFByb21pc2U8U3VwcGxpZXJMaWdodE9iamVjdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0U3VwcGxpZXJMaWdodEJ5SWQoc3VwcGxpZXJJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVsYXRpb25CeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlbGF0aW9uTGlzdE9iamVjdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb25CeUlkKGlkKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaGFuZGxlQmVmb3JlUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICBpZiAodGhpcy5yZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5DdXN0b21lcikge1xyXG4gICAgICAgICh0aGlzLnJlbGF0aW9uIGFzIEN1c3RvbWVyRnVsbE9iamVjdCkucmVsYXRpb25TdGF0dXMgPSBSZWxhdGlvblN0YXR1cy5SZWd1bGFyQ3VzdG9tZXI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxhdGlvbi5zdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmVmZXJyZWREZWxpdmVyeURhdGUyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPSBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvY2tUcmFuc2FjdGlvbih0cmFuc0lkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25Mb2NrUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1RyYW5zYWN0aW9uQnlJZCh0cmFuc0lkLCB2ZXJzaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uQ2xhc3ModHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiB0eXBlb2YgUmVsYXRpb24ge1xyXG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kLmhhcyh0cmFuc2FjdGlvbktpbmQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodHJhbnNhY3Rpb25LaW5kKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBSZWxhdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uKHJlbGF0aW9uOiBSZWxhdGlvblNtYWxsT2JqZWN0KTogdm9pZCB7XHJcbiAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvblJlbGF0aW9uU2VydmljZS5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbi5yZWxhdGlvbklkKS50aGVuKChyZWxhdGlvbk5yOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAocmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KHBhcnNlSW50KHJlbGF0aW9uTnIsIDApKS50aGVuKChjdXN0b21lcjogQ3VzdG9tZXJGdWxsT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21lci5hZGRyZXNzZXMgJiYgY3VzdG9tZXIuYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjdXN0b21lci5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb24gPSBjdXN0b21lcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuU3VwcGxpZXIpIHtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0U3VwcGxpZXJGdWxsT2JqZWN0KHBhcnNlSW50KHJlbGF0aW9uTnIsIDApKS50aGVuKChzdXBwbGllcjogU3VwcGxpZXJGdWxsT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdXBwbGllci5hZGRyZXNzZXMgJiYgc3VwcGxpZXIuYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBzdXBwbGllci5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb24gPSBzdXBwbGllcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uVXBkYXRlZC5uZXh0KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QW1vdW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMpIHtcclxuICAgICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIodCA9PiB0LmxpbmVUeXBlID09PSBUcmFuc2FjdGlvbkxpbmVUeXBlLkFydGljbGVMaW5lKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG91bGRDaGVja1JlZlRyYW5zYWN0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmICEhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcyAmJlxyXG4gICAgICAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIgfHxcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciB8fFxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDbkcsT0FBTyxFQUVMLHlCQUF5QixFQUMxQixNQUFNLCtEQUErRCxD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QUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7O1lBcnBCRixVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7WUExQ3hCLDBCQUEwQjtZQUMxQixhQUFhO1lBQ2IsMkJBQTJCO1lBQzNCLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQTBCMUIscUNBQXFDO1lBR3JDLGVBQWU7WUFDZixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2FjdGlvbkxvY2tSZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1sb2NrLXJlc3VsdC5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBcnRpY2xlQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi9hcnRpY2xlLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLXJlbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24uYm8nO1xyXG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtTdXBwbGllckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1mdWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtEb2NEZWxpdmVyeUJhdGNofSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZG9jLWRlbGl2ZXJ5LWJhdGNoLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1saW5lLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgVHJhbnNhY3Rpb25MaW5lSW5mbyxcclxuICBUcmFuc2FjdGlvblJlZlRyYW5zYWN0aW9uXHJcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8taGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7R2V0UHVyY2hhc2VQb3J0YWxMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLXBvcnRhbC1saW5lJztcclxuaW1wb3J0IHtSZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlZi10cmFuc2FjdGlvbi5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoUmVzdWx0fSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtcmVzdWx0JztcclxuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tc21hbGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGlvblN0YXR1c30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5wdXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnl9IGZyb20gJy4uL2VudW0vdHJhbnNhY3Rpb24tdHlwZS1jYXRlZ29yeS5lbnVtJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7QmFzZU1vZHVsZVNlcnZpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTInO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2NyZWVuLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICcuLi9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZSc7XHJcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9uU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uJztcclxuaW1wb3J0IHtTaGFyZWRTZXJ2aWNlfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGNvbXBvbmVudHNcIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbk1hcmdpbkluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbWFyZ2luLWluZm8uYm9cIjtcclxuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW0nO1xyXG5pbXBvcnQge1N1cHBsaWVyTGlnaHRPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1saWdodC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWxpc3Qtb2JqZWN0LmJvJztcclxuXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcInJvb3RcIn0pXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJhc2VTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZHVsZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCB0eXBlb2YgUmVsYXRpb24+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHR5cGVvZiBSZWxhdGlvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBDdXN0b21lckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBTdXBwbGllckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgQ3VzdG9tZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2VydmljZU9yZGVyLCBDdXN0b21lckZ1bGxPYmplY3RdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpdGxlRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgXCJSRVRBSUxcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiUFVSQ0hBU0VcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBcIlFVT1RBVElPTlwiXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pY29uRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBJY29uLkNhcnRTaG9wcGluZ1JlZ3VsYXJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBJY29uLlBhbGxldEJveGVzU2hhcnBSZWd1bGFyXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIEljb24uUmVndWxhckNhcnRTaG9wcGluZ0NpcmNsZVF1ZXN0aW9uXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0QWN0aXZlUnVicmljRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnk+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5PihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlB1cmNoYXNlT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyUXVvdGF0aW9uXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuQ2FzaERlc2ssIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJDYXNoUmVnaXN0ZXJdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiT1ZFUlZJRVdfQU5EX1BBWU1FTlRcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiT1ZFUlZJRVdcIl1cclxuICBdKTtcclxuXHJcbiAgcHVibGljIGxvZ291dDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHJlbGF0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFJlbGF0aW9uPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVsYXRpb24+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uS2luZFNldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uTWFyZ2VWaWV3Q2xpY2tlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50QnJhbmNoOiBzdHJpbmc7XHJcbiAgcHVibGljIGF1dG9TYXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG1hbnVhbFNhdmVQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhcHBsaWNhdGlvblVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW52b2ljZUFkZHJlc3NTYW1lQXNEZWxpdmVyeTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGFmdGVyU2FsZXNTeXN0ZW1QYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc2V0IGFjdGl2ZVJ1YnJpYyh2YWx1ZTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkpIHtcclxuICAgIHRoaXMuX2FjdGl2ZVJ1YnJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5hY3RpdmVSdWJyaWNDaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVSdWJyaWMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmVSdWJyaWMoKTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJ1YnJpYztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWxhdGlvbk9uUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRpdGxlRm9yQ2hlY2tvdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaWNvbkZvckNoZWNrb3V0KCk6IEljb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ljb25Gcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBheW1lbnRTdGVwVGl0bGVGb3JDaGVja291dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNhY3Rpb25LaW5kKHZhbHVlOiBUcmFuc2FjdGlvbktpbmQpIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbktpbmQgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uS2luZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmFjdGl2ZVJ1YnJpYyA9IHRoaXMuX2RlZmF1bHRBY3RpdmVSdWJyaWNGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25LaW5kU2V0Lm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9uS2luZCgpOiBUcmFuc2FjdGlvbktpbmQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uS2luZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gbmV3IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKCk7XHJcbiAgcHVibGljIGhhc1RyYW5zYWN0aW9uTGluZXM6IGJvb2xlYW47XHJcblxyXG4gIHB1YmxpYyBzZXQgcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlY2VpdmVHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVjZWl2ZUdvb2RzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnB1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcmVjZWl2ZUdvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVjZWl2ZUdvb2RzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWxsb2NhdGVHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyQWxsb2NhdGVHb29kc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclBpY2tpbmdHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcGlja2luZ0dvb2RzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJQaWNraW5nR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcGlja2luZ0dvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcGlja2VkQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcGlja2VkQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RvQmVQaWNrZWRDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fdG9CZVBpY2tlZENvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbG9jYXRlR29vZHNDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlbGl2ZXJ5Q29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kZWxpdmVyeUNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyRGVsaXZlcnlDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZWxpdmVyeUNvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeUNvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW52b2ljZUNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faW52b2ljZUNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5pbnZvaWNlQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2ludm9pY2VDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnRDaGFuZ2VkLm5leHQodGhpcy5fc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW52b2ljZUNvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnZvaWNlQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZWxhdGlvbih2YWx1ZTogUmVsYXRpb24pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnJlbGF0aW9uVXBkYXRlZC5uZXh0KHRoaXMuX3JlbGF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVsYXRpb24oKTogUmVsYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbkRpcnR5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90cmFuc2FjdGlvbkRpcnR5ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uRGlydHkubmV4dCh0aGlzLl90cmFuc2FjdGlvbkRpcnR5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJhbnNhY3Rpb25EaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbkRpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjYXNoUmVnaXN0ZXJzRGlydHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Nhc2hSZWdpc3RlcnNEaXJ0eSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYXNoUmVnaXN0ZXJzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIHRoaXMuX2Nhc2hSZWdpc3RlcnNEaXJ0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FzaFJlZ2lzdGVyR3JvdXBzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FzaFJlZ2lzdGVyc0RpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHB1cmNoYXNlUG9ydGFsTGluZTogUHVyY2hhc2VQb3J0YWxMaW5lW10gPSBbXTtcclxuICBwdWJsaWMgZG9jRGVsaXZlcnlCYXRjaDogRG9jRGVsaXZlcnlCYXRjaCA9IG5ldyBEb2NEZWxpdmVyeUJhdGNoKClcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJBbGxvd3NEcm9wU2hpcG1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJSZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyUGFrQmlubmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyTUxvY2F0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVySnNQaWNraW5nTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlclNlbGxEaXJlY3RseUZyb21TdXBwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyU3RvY2tNdXRCZWZvcmVEZWxpdmVyeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFtb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbkxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hbHJlYWR5TG9ja2VkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uTGluZUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gbm90IGJlaW5nIHVzZWQgYXQgdGhlIG1vbWVudCwgc28gaXQgc2hvdWxkIGJlIGZhbHNlXHJcbiAgcHJvdGVjdGVkIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVSdWJyaWM6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5ID0gVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlck92ZXJ2aWV3O1xyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kO1xyXG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbiA9IG5ldyBSZWxhdGlvbigpO1xyXG4gIHByaXZhdGUgX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVjZWl2ZUdvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYWxsb2NhdGVHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BpY2tpbmdHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BpY2tlZENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RvQmVQaWNrZWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVsaXZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbnZvaWNlQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYWxyZWFkeUxvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uRGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYXNoUmVnaXN0ZXJzRGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90cmFuc2FjdGlvbk1hcmdpbkluZm86IFRyYW5zYWN0aW9uTWFyZ2luSW5mbztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgb3B0aW9uc1NlcnZpY2U6IFRyYW5zYWN0aW9uU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29ubmVjdG9yOiBUcmFuc2FjdGlvbkNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYXJ0aWNsZUNvbm5lY3RvcjogQXJ0aWNsZUNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlOiBUcmFuc2FjdGlvbkV2ZW50U2VydmljZSxcclxuICAgIHByb3RlY3RlZCB0cmFuc2FjdGlvblJlbGF0aW9uU2VydmljZTogVHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgc2NyZWVuQ29uZmlnU2VydmljZTogVHJhbnNhY3Rpb25TY3JlZW5Db25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWxhdGlvblNlcnZpY2U6IFJlbGF0aW9uU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzY3JlZW5Db25maWdTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM6IGFueSwgcmVzZXRDdXJyZW50VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocmVzZXRDdXJyZW50VHJhbnNhY3Rpb24pIHtcclxuICAgICAgdGhpcy5yZXNldEN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5vcHRpb25zU2VydmljZS5pbml0aWFsaXplKG9wdGlvbnMpO1xyXG4gICAgYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmluaXQob3B0aW9ucyk7XHJcbiAgICBhd2FpdCB0aGlzLnJlbGF0aW9uU2VydmljZS5pbml0KG9wdGlvbnMpO1xyXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0b3IuY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXBhcmVNTG9jYXRJbnRlcm5hbFBhcmFtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRJbnRlcm5hbFBhcmFtZXRlcihJbnRlcm5hbFBhcmFtLk1Mb2NhdCkudGhlbigodmFsdWUpID0+IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJNTG9jYXQgPSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJlcGFyZVBha0Jpbm5lbkludGVybmFsUGFyYW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbCkudGhlbigodmFsdWUpID0+IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW4gPSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZURpcmVjdFNlbGxJbnRlcm5hbFBhcmFtKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pbnRlcm5hbFBhcmFtZXRlclNlbGxEaXJlY3RseUZyb21TdXBwID0gYXdhaXQgdGhpcy5nZXRJbnRlcm5hbFBhcmFtZXRlcihJbnRlcm5hbFBhcmFtLlNlbGxEaXJlY3RseUZyb21TdXBwbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZUpzUGlja2luZ0xpc3RJbnRlcm5hbFBhcmFtKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pbnRlcm5hbFBhcmFtZXRlckpzUGlja2luZ0xpc3QgPSBhd2FpdCB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uUGlja2luZ0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXBhcmVNYW51YWxTYXZlSW50ZXJuYWxQYXJhbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0SW50ZXJuYWxQYXJhbWV0ZXIoSW50ZXJuYWxQYXJhbS5UcmFuc01hbnVhbFNhdmUpLnRoZW4oKHZhbHVlKSA9PiB0aGlzLm1hbnVhbFNhdmVQYXJhbSA9IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlQWZ0ZXJTYWxlc1N5c3RlbVBhcmFtKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5hZnRlclNhbGVzU3lzdGVtUGFyYW0gPSBhd2FpdCB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uQWZ0ZXJTYWxlc1N5c3RlbSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naXN0aWNzQnV0dG9uVmlzaWJsZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGF3YWl0IHRoaXMucHJlcGFyZUpzUGlja2luZ0xpc3RJbnRlcm5hbFBhcmFtKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFBhcmFtZXRlckpzUGlja2luZ0xpc3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJlcGFyZURyb3BTaGlwbWVudEludGVybmFsUGFyYW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uRHJvcFNoaXBtZW50KS50aGVuKCh2YWx1ZSkgPT4gdGhpcy5pbnRlcm5hbFBhcmFtZXRlckFsbG93c0Ryb3BTaGlwbWVudCA9IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVwYXJlUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbEludGVybmFsUGFyYW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEludGVybmFsUGFyYW1ldGVyKEludGVybmFsUGFyYW0uUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbCkudGhlbigodmFsdWU6IGJvb2xlYW4pID0+IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJSZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsID0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludGVybmFsUGFyYW1ldGVyKHBhcmFtOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW50ZXJuYWxQYXJhbWV0ZXJWYWx1ZShwYXJhbSk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UgPT09ICdKJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVOZXdSZWxhdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsYXp6OiB0eXBlb2YgUmVsYXRpb24gPSB0aGlzLl9nZXRSZWxhdGlvbkNsYXNzKHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICAgIHRoaXMucmVsYXRpb24gPSBuZXcgY2xheno7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25PblRyYW5zYWN0aW9uKHJlbGF0aW9uTnI6IG51bWJlciwgcmVsYXRpb25LaW5kOiBSZWxhdGlvbktpbmQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmdldFJlbGF0aW9uKHJlbGF0aW9uS2luZCwgcmVsYXRpb25Ocik7XHJcbiAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UoKTtcclxuICAgIHRoaXMuX3JlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gMDtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQodW5kZWZpbmVkKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25Ecm9wcGVkLm5leHQodW5kZWZpbmVkKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25SZXNldC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uKHJlbWVtYmVyVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uTG9ja2VkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQsIHRydWUpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMucmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgICAgaWYgKHJlbWVtYmVyVHJhbnNhY3Rpb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbW1pdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jb21taXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByb2xsYmFjayhyZWZyZXNoOiBib29sZWFuID0gZmFsc2UsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbkxvY2tlZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuYmxvY2tTY3JlZW4ubmV4dChmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5tYW51YWxTYXZlUGFyYW0gJiYgIWZvcmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgcm9sbGJhY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iucm9sbGJhY2soKTtcclxuICAgIGlmIChyb2xsYmFja1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgICBpZiAocmVmcmVzaCAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XHJcbiAgICAgICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvbGxiYWNrU3VjY2VzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByb2xsYmFja0JlYWNvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLnJvbGxiYWNrQmVhY29uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3Q6IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uU2VhcmNoUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3Iuc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25MaW5lQWRkZWQubmV4dCh1bmRlZmluZWQpOyAvLyByZXNldCBsaW5lIGFkZGVkXHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZCk7XHJcbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQodHJhbnNhY3Rpb25OcjogbnVtYmVyLCB0cmFuc2FjdGlvbktpbmQ6IFRyYW5zYWN0aW9uS2luZCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25MaW5lQWRkZWQubmV4dCh1bmRlZmluZWQpOyAvLyByZXNldCBsaW5lIGFkZGVkXHJcbiAgICBsZXQgZmluaXNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uSGVhZGVyQnlOckFuZEtpbmQodHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yKS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmlzU3VjY2VzcyAmJiAhZmluaXNoZWQpIHtcclxuICAgICAgICByZXNwb25zZS50cmFuc2FjdGlvbkxpbmVzLmxlbmd0aCA9IDA7IC8vIHByZXZlbnQgbG9hZGluZyBlbXB0eSBsaW5lc1xyXG4gICAgICAgIHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQodHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yKTtcclxuICAgIGZpbmlzaGVkID0gdHJ1ZTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFdlYlNlc3Npb25TYWxlc09yZGVyKHRyYW5zYWN0aW9uVXVpZCk7XHJcbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgJiYgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB0cnlUb0xvY2tUcmFuc2FjdGlvbihpZD86IG51bWJlciwgdmVyc2lvbj86IG51bWJlciwgc2Vjb25kQXR0ZW1wdDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCAmJiB2ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCkge1xyXG4gICAgICBpZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcclxuICAgICAgdmVyc2lvbiA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5ibG9ja1NjcmVlbi5uZXh0KHRydWUpO1xyXG4gICAgaWYgKCFpZCkgeyAvLyBpdCdzIGEgbmV3IHRyYW5zYWN0aW9uLCBubyBuZWVkIHRvIGxvY2tcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9hbHJlYWR5TG9ja2VkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9ja1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkxvY2tSZXN1bHQgPSBhd2FpdCB0aGlzLl9sb2NrVHJhbnNhY3Rpb24oaWQsIHZlcnNpb24pO1xyXG4gICAgaWYgKGxvY2tSZXNwb25zZSkge1xyXG4gICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xvY2tTdWNjZXNzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5ibG9ja1NjcmVlbi5uZXh0KGZhbHNlKTtcclxuICAgICAgICBpZiAoc2Vjb25kQXR0ZW1wdCkgeyAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvcihcIlRSQU5TQUNUSU9OX1ZFUlNJT05fTUlTTUFUQ0hfRVJST1JcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbG9ja1Jlc3BvbnNlLmlzTGF0ZXN0VmVyc2lvbikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dUb2FzdChcIlRSQU5TQUNUSU9OX1ZFUlNJT05fTUlTTUFUQ0hcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uQnlJZChpZCk7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaGlkZVRvYXN0QWZ0ZXJNcygzMDAwKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBsb2NrRGV0YWlsczogc3RyaW5nID0gYCR7dGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJCWVwiKX06ICR7bG9ja1Jlc3BvbnNlLmxvY2tlZEJ5fVxyXG4gICAgICAgICAgICAgICAgJHt0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIlNJTkNFXCIsIGZhbHNlKX0gJHtsb2NrUmVzcG9uc2UubG9ja2VkU2luY2UudG9Mb2NhbGVTdHJpbmcoKX1gO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvcihcIlRSQU5TQUNUSU9OX0FMUkVBRFlfTE9DS0VEXCIsIHRydWUsIGxvY2tEZXRhaWxzKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYWxyZWFkeUxvY2tlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZDogbnVtYmVyLCBsaW5lSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvSGlzdG9yeVtdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQsIGxpbmVJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVmVHJhbnNhY3Rpb25zKHRyYW5zSWQ6IG51bWJlcik6IFByb21pc2U8UmVmVHJhbnNhY3Rpb25bXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZVBvcnRhbExpbmVzKHJlcXVlc3Q6IEdldFB1cmNoYXNlUG9ydGFsTGluZSk6IFByb21pc2U8UHVyY2hhc2VQb3J0YWxMaW5lW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZVBvcnRhbExpbmVzKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNhdmVUcmFuc2FjdGlvbkFuZENvbW1pdChyZXNwb25zZT86IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCBjb21taXRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIHdlIGNhbiBzYWZlbHkgc2F2ZS9jb21taXQgdGhlIGNoYW5nZXNcclxuICAgIGlmIChjb21taXRUcmFuc2FjdGlvbikge1xyXG4gICAgICBjb25zdCBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNhdmVUcmFuc2FjdGlvbihmYWxzZSk7XHJcbiAgICAgIGlmIChzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSAmJiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyB3ZSBuZWVkIHRvIGRvIGFuIGV4dHJhIGNvbW1pdCB0byByZWxlYXNlIHRoZSBsb2NrXHJcbiAgICAgIC8vIGNvbnN0IGNvbW1pdFN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmJsb2NrU2NyZWVuLm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2UgJiYgc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2UuaXNTdWNjZXNzIC8qJiYgY29tbWl0U3VjY2VzcyovO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5ibG9ja1NjcmVlbi5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odmFsdWU6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB2YWx1ZS50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmXHJcbiAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCAmJlxyXG4gICAgICB2YWx1ZS50cmFuc2FjdGlvbkluZm8uaWQgIT09IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCkge1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLm9yZGVyQ29uZmlybWF0aW9uRHJvcHBlZC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uub3JkZXJDb25maXJtYXRpb25SZXNldC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl9oYW5kbGVCZWZvcmVSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbktpbmQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kO1xyXG4gICAgdGhpcy5oYXNUcmFuc2FjdGlvbkxpbmVzID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLl9zZXRBbW91bnQoKTtcclxuICAgIHRoaXMuX2NoZWNrSGVhZGVyU3RhdHVzKCk7XHJcbiAgICB0aGlzLmNoZWNrUmVmVHJhbnNhY3Rpb24oKTsgLy8gdG9kbzogZ2V0IGZyb20gdGhlIGhlYWRlciBzdGF0dXNcclxuICAgIGlmICh0aGlzLmdldFJlbGF0aW9uT25SZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlbGF0aW9uIHx8IHRoaXMucmVsYXRpb24ucmVsYXRpb25JZCAhPT0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2dldFJlbGF0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVsYXRpb25VcGRhdGVkLm5leHQodGhpcy5yZWxhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbi50eXBlID0gUmVsYXRpb25OYW1lS2luZC5Qcml2YXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQubmV4dCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbik7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uU2V0Lm5leHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pO1xyXG4gICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja0hlYWRlclN0YXR1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMpIHtcclxuICAgICAgLy9zYWxlcyBvcmRlclxyXG4gICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseU9yZGVyZWQ7XHJcbiAgICAgIHRoaXMuYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlBbGxvY2F0ZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlQaWNrZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5VG9CZVBpY2tlZDtcclxuICAgICAgdGhpcy5kZWxpdmVyeUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlEZWxpdmVyZWQ7XHJcbiAgICAgIHRoaXMuaW52b2ljZUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlJbnZvaWNlZDtcclxuICAgICAgLy8gcHVyY2hhc2VcclxuICAgICAgdGhpcy5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVB1cmNoYXNlQ29uZmlybWVkO1xyXG4gICAgICB0aGlzLnJlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW4gPyB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UmVjZWl2ZWRVblByb2Nlc3NlZCA6IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlSZWNlaXZlZDtcclxuICAgICAgdGhpcy5zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzQ29uZmlybWF0aW9uU2VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGVja1JlZlRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrUmVmVHJhbnNhY3Rpb25zKCkpIHtcclxuICAgICAgY29uc3QgdHJhbnNJZDogbnVtYmVyID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xyXG4gICAgICBpZiAoIXRyYW5zSWQpIHsgLy8gbmV3IHRyYW5zYWN0aW9uLCBnZXQgb3V0XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFydGljbGVUcmFuc0xpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcih0ID0+IHQuaXNBcnRpY2xlKTtcclxuICAgICAgdGhpcy5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCkudGhlbihhc3luYyAocmVmczogUmVmVHJhbnNhY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJ0aWNsZVRyYW5zTGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCByZWZUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgdHJhbnNMaW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvID0gYXJ0aWNsZVRyYW5zTGluZXNbaV07XHJcbiAgICAgICAgICB0cmFuc0xpbmUucmVmVHJhbnNhY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICBpZiAocmVmcyAmJiByZWZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2FsZXNPcmRlcnM6IFJlZlRyYW5zYWN0aW9uW10gPSByZWZzLmZpbHRlcihyID0+IHIucmVmVHJhbnNhY3Rpb25UeXBlID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2FsZXNPcmRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0ID0gbmV3IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QoKTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uS2luZCA9IHNhbGVzT3JkZXJzW2pdLnJlZlRyYW5zYWN0aW9uVHlwZTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zTnIgPSBwYXJzZUludChzYWxlc09yZGVyc1tqXS5yZWZUcmFuc2FjdGlvbk5yKTtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFuc1NlYXJjaFJlc3VsdDogVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICBpZiAodHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zICYmIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZWZUcmFuc2FjdGlvbnMucHVzaChuZXcgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbihcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zSWQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc05yLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc2FjdGlvbktpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS5yZWxhdGlvbk5yLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0ucmVsYXRpb25OYW1lKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMgPSByZWZUcmFuc2FjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uTGluZVJlZlRyYW5zYWN0aW9uc0NoYW5nZWQubmV4dCh0cmFuc0xpbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdFBlcmNlbnRhZ2UodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0TG9ja1RyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWxyZWFkeUxvY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZFRyYW5zYWN0aW9uTWFyZ2VJbmZvTGlzdCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uTWFyZ2luSW5mbz4ge1xyXG4gICAgaWYgKHV1aWQpIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uTWFyZ2luSW5mbyh1dWlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTdXBwbGllckxpZ2h0QnlJZChzdXBwbGllcklkOiBudW1iZXIpOiBQcm9taXNlPFN1cHBsaWVyTGlnaHRPYmplY3Q+IHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmdldFN1cHBsaWVyTGlnaHRCeUlkKHN1cHBsaWVySWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbGF0aW9uQnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxSZWxhdGlvbkxpc3RPYmplY3Q+IHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmdldFJlbGF0aW9uQnlJZChpZCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9oYW5kbGVBZnRlclJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGluaXRpYWxpemVUcmFuc2FjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdGlvbikge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcclxuICAgICAgaWYgKHRoaXMucmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuQ3VzdG9tZXIpIHtcclxuICAgICAgICAodGhpcy5yZWxhdGlvbiBhcyBDdXN0b21lckZ1bGxPYmplY3QpLnJlbGF0aW9uU3RhdHVzID0gUmVsYXRpb25TdGF0dXMuUmVndWxhckN1c3RvbWVyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsYXRpb24uc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmVmZXJyZWREZWxpdmVyeURhdGUyID0gXCI9XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2NrVHJhbnNhY3Rpb24odHJhbnNJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uTG9ja1Jlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvY2tUcmFuc2FjdGlvbkJ5SWQodHJhbnNJZCwgdmVyc2lvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZWxhdGlvbkNsYXNzKHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogdHlwZW9mIFJlbGF0aW9uIHtcclxuICAgIGlmICh0aGlzLl9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZC5oYXModHJhbnNhY3Rpb25LaW5kKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25DbGFzc0Zyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRyYW5zYWN0aW9uS2luZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmVsYXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZWxhdGlvbihyZWxhdGlvbjogUmVsYXRpb25TbWFsbE9iamVjdCk6IHZvaWQge1xyXG4gICAgaWYgKHJlbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25SZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb24ucmVsYXRpb25JZCkudGhlbigocmVsYXRpb25Ocjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLkN1c3RvbWVyKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmdldEN1c3RvbWVyRnVsbE9iamVjdChwYXJzZUludChyZWxhdGlvbk5yLCAwKSkudGhlbigoY3VzdG9tZXI6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tZXIuYWRkcmVzc2VzICYmIGN1c3RvbWVyLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tZXIuYWRkcmVzc2VzLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgPCBiLnNlcXVlbmNlID8gLTEgOiAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9uID0gY3VzdG9tZXI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUmVsYXRpb25TZXJ2aWNlLmdldFN1cHBsaWVyRnVsbE9iamVjdChwYXJzZUludChyZWxhdGlvbk5yLCAwKSkudGhlbigoc3VwcGxpZXI6IFN1cHBsaWVyRnVsbE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VwcGxpZXIuYWRkcmVzc2VzICYmIHN1cHBsaWVyLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgc3VwcGxpZXIuYWRkcmVzc2VzLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgPCBiLnNlcXVlbmNlID8gLTEgOiAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9uID0gc3VwcGxpZXI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxhdGlvblVwZGF0ZWQubmV4dChudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFtb3VudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzKSB7XHJcbiAgICAgIHRoaXMuYXJ0aWNsZUFtb3VudCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKHQgPT4gdC5saW5lVHlwZSA9PT0gVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvdWxkQ2hlY2tSZWZUcmFuc2FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiAhIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMgJiZcclxuICAgICAgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyIHx8XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIgfHxcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24pO1xyXG4gIH1cclxufVxyXG4iXX0=
|