@libs-ui/services-diagram-draw 0.2.356-41 → 0.2.356-42

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.
@@ -68,7 +68,7 @@ export class LibsUiDiagramDrawCanvasService {
68
68
  let counter = 0;
69
69
  const elementsOfCodeDataDrop = this.FlatElements?.filter((element) => element.code === dataDrop.code);
70
70
  if (elementsOfCodeDataDrop && elementsOfCodeDataDrop.length) {
71
- counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl))
71
+ counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl), elementsOfCodeDataDrop[0])
72
72
  .specific_counter_current_code;
73
73
  }
74
74
  counter++;
@@ -625,4 +625,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
625
625
  type: Injectable,
626
626
  args: [{ providedIn: 'root' }]
627
627
  }] });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvY2FudmFzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHdkcsTUFBTSxPQUFPLDhCQUE4QjtJQUNqQyxRQUFRLENBQTBCO0lBQ2xDLFlBQVksQ0FBMEI7SUFDdEMsZUFBZSxDQUFvQjtJQUNuQyxzQkFBc0IsR0FBNEIsRUFBRSxDQUFDO0lBRTVDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTdELElBQVcsZUFBZSxDQUFDLGVBQWlDO1FBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBZ0MsRUFBRSxpQkFBMkMsRUFBRSx1QkFBZ0Q7UUFDakosSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxZ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LE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM1QyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0UsUUFBUSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDbkUsQ0FBQztZQUNELG1CQUFtQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUV0QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0E3dUJVLDhCQUE4Qjs0R0FBOUIsOEJBQThCLGNBRGpCLE1BQU07OzRGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjYW52YXNDb25maWdSZWFkb25seSB9IGZyb20gJy4vZGlhZ3JhbS1kcmF3LnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJyYW5jaEVuZENvdW50LCBJSGFuZGxlckZ1bmN0aW9uLCBJUnVsZUNvbm5lY3RhYmxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfSBmcm9tICcuL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdENvbmZpZ0NvbnN0aXR1ZW50QnJhbmNoZXMsIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbCB9IGZyb20gJy4vdXRpbHMvY2FudmFzLnV0aWwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzU2VydmljZSB7XG4gIHByaXZhdGUgZWxlbWVudHMhOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+O1xuICBwcml2YXRlIGZsYXRFbGVtZW50cyE6IEFycmF5PElEaWFncmFtRWxlbWVudD47XG4gIHByaXZhdGUgaGFuZGxlckZ1bmN0aW9uITogSUhhbmRsZXJGdW5jdGlvbjtcbiAgcHJpdmF0ZSBlbGVtZW50UnVsZUNvbm5lY3RhYmxlOiBBcnJheTxJUnVsZUNvbm5lY3RhYmxlPiA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwdWJsaWMgc2V0IEhhbmRsZXJGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb246IElIYW5kbGVyRnVuY3Rpb24pIHtcbiAgICB0aGlzLmhhbmRsZXJGdW5jdGlvbiA9IGhhbmRsZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSGFuZGxlckZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIHBvc2l0aW9uRmlyc3ROb2RlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzOiBBcnJheTxJUnVsZUNvbm5lY3RhYmxlPikge1xuICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmxhdEVsZW1lbnRzID0gW107XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gZWxlbWVudHNbMF07XG4gICAgZmlyc3RFbGVtZW50LnNwZWNpZmljX3ggPSBwb3NpdGlvbkZpcnN0Tm9kZS54O1xuICAgIGZpcnN0RWxlbWVudC5zcGVjaWZpY195ID0gcG9zaXRpb25GaXJzdE5vZGUueTtcbiAgICB0aGlzLkVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgdGhpcy5SdWxlQ29ubmVjdGFibGVFbGVtZW50cyA9IHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHNldCBFbGVtZW50cyhlbGVtZW50cykge1xuICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHM7XG4gIH1cblxuICBzZXQgUnVsZUNvbm5lY3RhYmxlRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+KSB7XG4gICAgdGhpcy5lbGVtZW50UnVsZUNvbm5lY3RhYmxlID0gZWxlbWVudHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSdWxlQ29ubmVjdGFibGU7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tSdWxlRHJhZ0Ryb3AoYmVmb3JlRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgY3VycmVudEVsZW1lbnREcmFnOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGFmdGVyRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgcnVsZUNvbm5lY3RhYmxlRWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcnVsZUl0ZW1EcmFnID0gcnVsZUNvbm5lY3RhYmxlRWxlbWVudHMuZmluZCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50Q29kZSA9PT0gY3VycmVudEVsZW1lbnREcmFnPy5jb2RlKTtcbiAgICBjb25zdCBydWxlQWZ0ZXJJdGVtRHJhZyA9IHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGFmdGVyRWxlbWVudERyYWcgJiYgaXRlbS5lbGVtZW50Q29kZSA9PT0gYWZ0ZXJFbGVtZW50RHJhZy5jb2RlKTtcblxuICAgIGlmIChcbiAgICAgICEhKHJ1bGVJdGVtRHJhZyAmJiBydWxlSXRlbURyYWcuZWxlbWVudENvZGVDb25uZWN0YWJsZUJlZm9yZS5maW5kKChjb2RlKSA9PiBjb2RlID09PSBiZWZvcmVFbGVtZW50RHJhZz8uY29kZSkpICYmXG4gICAgICAoIXJ1bGVBZnRlckl0ZW1EcmFnIHx8ICEhKHJ1bGVBZnRlckl0ZW1EcmFnICYmIHJ1bGVBZnRlckl0ZW1EcmFnLmVsZW1lbnRDb2RlQ29ubmVjdGFibGVCZWZvcmUuZmluZCgoY29kZSkgPT4gY29kZSA9PT0gY3VycmVudEVsZW1lbnREcmFnPy5jb2RlKSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZsYXRFbGVtZW50cygpIHtcbiAgICB0aGlzLmZsYXRFbGVtZW50cyA9IFtdO1xuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5idWlsZEZsYXRFbGVtZW50KHRoaXMuRWxlbWVudHMgYXMgQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgdGhpcy5mbGF0RWxlbWVudHMpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmxhdEVsZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIGNoZWNrRXhpc3ROYW1lRWxlbWVudChuYW1lOiBzdHJpbmcsIGZsYXRFbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICghbmFtZSB8fCAhbmFtZS50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdEVsZW1lbnRzPy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50Lm5hbWUgJiYgZWxlbWVudC5uYW1lLnRyaW0oKSAmJiBlbGVtZW50Lm5hbWUudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IG5hbWUudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFkZEVsZW1lbnQoaXRlbURyb3A6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoRHJvcDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50LCBicmFuY2hDaG9pY2U/OiBudW1iZXIpIHtcbiAgICBpZiAoIWl0ZW1Ecm9wIHx8ICFkYXRhRHJvcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50c0ZsYXQgPSB0aGlzLkZsYXRFbGVtZW50cztcbiAgICBpZiAoZGF0YURyb3AuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgY29uc3QgZWxlbWVudHNPZkNvZGVEYXRhRHJvcCA9IHRoaXMuRmxhdEVsZW1lbnRzPy5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQuY29kZSA9PT0gZGF0YURyb3AuY29kZSk7XG5cbiAgICAgIGlmIChlbGVtZW50c09mQ29kZURhdGFEcm9wICYmIGVsZW1lbnRzT2ZDb2RlRGF0YURyb3AubGVuZ3RoKSB7XG4gICAgICAgIGNvdW50ZXIgPSBlbGVtZW50c09mQ29kZURhdGFEcm9wLnJlZHVjZSgocHJlRWw6IElEaWFncmFtRWxlbWVudCwgY3VycmVudEVsOiBJRGlhZ3JhbUVsZW1lbnQpID0+IChOdW1iZXIoY3VycmVudEVsLnNwZWNpZmljX2NvdW50ZXJfY3VycmVudF9jb2RlKSA+IE51bWJlcihwcmVFbC5zcGVjaWZpY19jb3VudGVyX2N1cnJlbnRfY29kZSkgPyBjdXJyZW50RWwgOiBwcmVFbCkpXG4gICAgICAgICAgLnNwZWNpZmljX2NvdW50ZXJfY3VycmVudF9jb2RlIGFzIG51bWJlcjtcbiAgICAgIH1cbiAgICAgIGNvdW50ZXIrKztcbiAgICAgIGxldCBuYW1lID0gYCR7ZGF0YURyb3AubmFtZX0gJHtjb3VudGVyfWA7XG5cbiAgICAgIHdoaWxlICh0aGlzLmNoZWNrRXhpc3ROYW1lRWxlbWVudChuYW1lIGFzIHN0cmluZywgZWxlbWVudHNGbGF0KSkge1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIG5hbWUgPSBgJHtkYXRhRHJvcC5uYW1lfSAke2NvdW50ZXJ9YDtcbiAgICAgIH1cbiAgICAgIGRhdGFEcm9wLm5hbWUgPSBuYW1lO1xuICAgICAgZGF0YURyb3Auc3BlY2lmaWNfY291bnRlcl9jdXJyZW50X2NvZGUgPSBjb3VudGVyO1xuICAgIH1cbiAgICBpZiAoYnJhbmNoRHJvcCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkRWxlbWVudFRvQnJhbmNoKGl0ZW1Ecm9wLCBicmFuY2hEcm9wLCBjbG9uZURlZXAoZGF0YURyb3ApLCBicmFuY2hDaG9pY2UpO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuRWxlbWVudHM7XG4gICAgY29uc3QgbmV4dEN1cnJlbnRJdGVtRHJvcDogSURpYWdyYW1FbGVtZW50ID0gZWxlbWVudHM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGl0ZW1Ecm9wLm5leHRfaWQpIGFzIElEaWFncmFtRWxlbWVudDtcblxuICAgIGlmICghbmV4dEN1cnJlbnRJdGVtRHJvcCAmJiBkYXRhRHJvcC5jb2RlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4SXRlbURyb3AgPSBlbGVtZW50cz8uZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5pZCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHsgLi4uY2xvbmVEZWVwKGRhdGFEcm9wKSwgcHJlX2lkOiBpdGVtRHJvcC5pZCwgbmV4dF9pZDogZGF0YURyb3AuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCA/IG5leHRDdXJyZW50SXRlbURyb3AuaWQgOiAnJyB9O1xuXG4gICAgaWYgKCFkYXRhRHJvcC5pZCkge1xuICAgICAgbmV3RWxlbWVudC5pZCA9IGAke3V1aWQoKX1gO1xuICAgIH1cblxuICAgIGl0ZW1Ecm9wLm5leHRfaWQgPSBuZXdFbGVtZW50LmlkO1xuXG4gICAgaWYgKG5leHRDdXJyZW50SXRlbURyb3ApIHtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gbmV3RWxlbWVudC5pZDtcbiAgICB9XG4gICAgZWxlbWVudHM/LnNwbGljZSgoaW5kZXhJdGVtRHJvcCBhcyBudW1iZXIpICsgMSwgMCwgbmV3RWxlbWVudCk7XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgYWZ0ZXJFbGVtZW50ID0gZmxhdEVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwucHJlX2lkID09PSBuZXdFbGVtZW50LmlkKTtcblxuICAgIGlmICghYWZ0ZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJlZm9yZUVsZW1lbnQgPSBmbGF0RWxlbWVudHM/LmZpbHRlcigoZWwpID0+IGVsLmlkICE9PSBuZXdFbGVtZW50LmlkICYmIGVsLm5leHRfaWQgPT09IGFmdGVyRWxlbWVudC5pZCk7XG5cbiAgICBiZWZvcmVFbGVtZW50Py5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50Lm5leHRfaWQgPSBuZXdFbGVtZW50LmlkO1xuICAgIH0pO1xuICAgIGlmIChkYXRhRHJvcC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkRWxlbWVudEV4aXRXb3JrRmxvdyhuZXdFbGVtZW50LCBicmFuY2hDaG9pY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFbGVtZW50VG9CcmFuY2goaXRlbURyb3A6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoRHJvcDogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50LCBudW1iZXJCcmFuY2g/OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGJyYW5jaERyb3AuZWxlbWVudHM7XG4gICAgbGV0IG5leHRDdXJyZW50SXRlbURyb3AgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGluZGV4SXRlbURyb3AgPSAtMTtcblxuICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGluZGV4SXRlbURyb3AgPSBlbGVtZW50cy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGl0ZW1Ecm9wLmlkKTtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AgPSBlbGVtZW50cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQ7XG4gICAgICBpZiAoIW5leHRDdXJyZW50SXRlbURyb3AgJiYgaW5kZXhJdGVtRHJvcCA9PT0gLTEpIHtcbiAgICAgICAgbmV4dEN1cnJlbnRJdGVtRHJvcCA9IGVsZW1lbnRzW2luZGV4SXRlbURyb3AgKyAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IG5leHRJZCA9IChuZXh0Q3VycmVudEl0ZW1Ecm9wICYmIG5leHRDdXJyZW50SXRlbURyb3AuaWQpIHx8IGl0ZW1Ecm9wLm5leHRfaWQ7XG5cbiAgICBpZiAoZGF0YURyb3AuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgbmV4dElkID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZW1lbnQ6IElEaWFncmFtRWxlbWVudCA9IHsgLi4uZGF0YURyb3AsIHByZV9pZDogaXRlbURyb3AuaWQsIG5leHRfaWQ6IG5leHRJZCB9O1xuXG4gICAgaWYgKCFkYXRhRHJvcC5pZCkge1xuICAgICAgbmV3RWxlbWVudC5pZCA9IGAke3V1aWQoKX1gO1xuICAgIH1cblxuICAgIGlmICghaXRlbURyb3AuYnJhbmNoZXMgfHwgIWl0ZW1Ecm9wLmJyYW5jaGVzLmZpbmQoKGJyYW5jaCkgPT4gYnJhbmNoID09PSBicmFuY2hEcm9wKSkge1xuICAgICAgaXRlbURyb3AubmV4dF9pZCA9IG5ld0VsZW1lbnQuaWQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRDdXJyZW50SXRlbURyb3ApIHtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gbmV3RWxlbWVudC5pZDtcbiAgICB9XG4gICAgZWxlbWVudHM/LnNwbGljZShpbmRleEl0ZW1Ecm9wICsgMSwgMCwgbmV3RWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQpO1xuICAgIGlmIChpdGVtRHJvcCAmJiBpdGVtRHJvcC5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICB0aGlzLnVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coaXRlbURyb3AsIHRoaXMuRmxhdEVsZW1lbnRzPy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZGF0YURyb3AuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgdGhpcy5jaGVja0VuZE1vdmVFbGVtZW50V2hlbkRyb3BFbGVtZW50Q29kZUV4aXQoYnJhbmNoRHJvcCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFEcm9wLmVsZW1lbnRfdHlwZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hZGRFbGVtZW50RXhpdFdvcmtGbG93KG5ld0VsZW1lbnQsIG51bWJlckJyYW5jaCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coZWxlbWVudFdvcmtmbG93OiBJRGlhZ3JhbUVsZW1lbnQsIG5leHRFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnRXb3JrZmxvdyB8fCBlbGVtZW50V29ya2Zsb3cuZWxlbWVudF90eXBlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEVsZW1lbnQ6IEFycmF5PElEaWFncmFtRWxlbWVudD4gPSBbXTtcblxuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5mbGF0RWxlbWVudEhhc0JyYW5jaChuZXh0RWxlbWVudCwgZmxhdEVsZW1lbnQpO1xuICAgIGVsZW1lbnRXb3JrZmxvdy5icmFuY2hlcz8uZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXTtcblxuICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBlbGVtZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyAmJiBlbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coZWxlbWVudCwgZWxlbWVudHNbaW5kZXggKyAxXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQgfHwgZWxlbWVudC5pZCA9PT0gbmV4dEVsZW1lbnQuaWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQucHJlX2lkID09PSBuZXh0RWxlbWVudC5pZCB8fCBmbGF0RWxlbWVudC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKSkge1xuICAgICAgICAgIC8vIHRyxrDhu51uZyBo4bujcCBn4buNaSDEkeG7hyBxdXkgTmV4dEVsZW1lbnQgbMOgIGto4buRaSB0csaw4bubYyBob+G6t2MgY2hhIGPhu6dhIGPDoWMgZWxlbWVudCBoaeG7h24gdOG6oWlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgICAgIGlmIChlbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IG5leHRFbGVtZW50LmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KGVsZW1lbnQsIG5leHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudFdvcmtmbG93Lm5leHRfaWQgIT09IG5leHRFbGVtZW50LmlkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IG5leHRFbGVtZW50LmlkO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRW5kTW92ZUVsZW1lbnRXaGVuRHJvcEVsZW1lbnRDb2RlRXhpdChjdXJyZW50QnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudHMgPSB0aGlzLkZsYXRFbGVtZW50cztcbiAgICBjb25zdCBlbGVtZW50SGFzQ3VycmVudEJyYW5jaCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLmJyYW5jaGVzICYmICEhZWwuYnJhbmNoZXMuZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgIGlmICghZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLmlkID09PSBlbGVtZW50SGFzQ3VycmVudEJyYW5jaC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQ7XG5cbiAgICBpZiAoIW5leHRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaCA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG5cbiAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLCBuZXh0RWxlbWVudC5pZCBhcyBzdHJpbmcsIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaCwgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgIGlmICghZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmJyYW5jaEVtcHR5ICYmIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaC5jb3VudCA9PT0gMCkge1xuICAgICAgZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gubmV4dF9pZCA9ICcnO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50TmV4dFRvSWQgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uZXh0X2lkID09PSBuZXh0RWxlbWVudC5pZCk7IC8vIEto4buRaSBjaGFcblxuICAgIGlmICghZWxlbWVudE5leHRUb0lkIHx8IGVsZW1lbnROZXh0VG9JZC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XIHx8ICFlbGVtZW50TmV4dFRvSWQubmV4dF9pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZGF0YUZpc3RFbGVtZW50ID0gZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoO1xuXG4gICAgaWYgKGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmlkICE9PSBlbGVtZW50TmV4dFRvSWQuaWQpIHtcbiAgICAgIGRhdGFGaXN0RWxlbWVudCA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgbmV4dEVsZW1lbnQuaWQgYXMgc3RyaW5nLCBkYXRhRmlzdEVsZW1lbnQsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICB9XG4gICAgaWYgKGRhdGFGaXN0RWxlbWVudC5jb3VudCA+IDEgfHwgIWRhdGFGaXN0RWxlbWVudC5icmFuY2hDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYnJhbmNoQWRkSXRlbSA9IGRhdGFGaXN0RWxlbWVudC5icmFuY2hDb250YWluZXI7XG5cbiAgICBpZiAoZWxlbWVudEhhc0N1cnJlbnRCcmFuY2guaWQgPT09IGVsZW1lbnROZXh0VG9JZC5pZCkge1xuICAgICAgaWYgKG5leHRFbGVtZW50LmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgdGhpcy5tb3ZlRWxlbWVudHNUb0JyYW5jaChuZXh0RWxlbWVudCwgYnJhbmNoQWRkSXRlbSk7XG4gICAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLCB0aGlzLkZsYXRFbGVtZW50cyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnQgPSBlbGVtZW50ICYmIGVsZW1lbnQubmV4dF9pZCA/IGVsZW1lbnQgOiBlbGVtZW50SGFzQ3VycmVudEJyYW5jaDtcbiAgICAgICAgLy8gRml4YnVnOiAxNTc3MVxuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQoZWxlbWVudENvdW50LCBlbGVtZW50Q291bnQubmV4dF9pZCBhcyBzdHJpbmcsIGRhdGEsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICAgICAgaWYgKCFkYXRhLmNvdW50KSB7XG4gICAgICAgICAgcmV0dXJuIChlbGVtZW50Q291bnQubmV4dF9pZCA9ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLm5leHRfaWQgPSAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQgPSB0aGlzLmRlbGV0ZUVsZW1lbnQobmV4dEVsZW1lbnQpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZGF0YSwgZWxlbWVudCB9ID0gZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZFswXTtcbiAgICAgIGNvbnN0IGluZm9PZkVsZW1lbnQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCwgdGhpcy5GbGF0RWxlbWVudHMpO1xuICAgICAgY29uc3QgcGFyZW50T2ZFbGVtZW50ID0gaW5mb09mRWxlbWVudC5lbGVtZW50O1xuICAgICAgbGV0IGRhdGFPZkVsZW1lbnRJbmZvID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTtcblxuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChwYXJlbnRPZkVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBwYXJlbnRPZkVsZW1lbnQ/Lm5leHRfaWQgYXMgc3RyaW5nLCBkYXRhT2ZFbGVtZW50SW5mbywgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgaWYgKGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmIChkYXRhLmNvdW50ID4gMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudCwgYnJhbmNoQWRkSXRlbSwgbmV4dEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhRmlzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyICE9PSBkYXRhLmJyYW5jaENvbnRhaW5lciAmJiBkYXRhRmlzdEVsZW1lbnQuY291bnQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgICAgICBkYXRhT2ZFbGVtZW50SW5mbyA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG4gICAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChwYXJlbnRPZkVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBwYXJlbnRPZkVsZW1lbnQ/Lm5leHRfaWQgYXMgc3RyaW5nLCBkYXRhT2ZFbGVtZW50SW5mbywgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhT2ZFbGVtZW50SW5mby5jb3VudCA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4YnVnOiAxNTUxOFxuICAgICAgICBpZiAoZGF0YS5icmFuY2hDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudCwgZGF0YS5icmFuY2hDb250YWluZXIsIG5leHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KFxuICAgICAgICAgIHBhcmVudE9mRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsXG4gICAgICAgICAgcGFyZW50T2ZFbGVtZW50Py5uZXh0X2lkIGFzIHN0cmluZyxcbiAgICAgICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpLFxuICAgICAgICAgIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnQsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgIGNvbnN0IGZsYXRFbGVtZW50ID0gdGhpcy5GbGF0RWxlbWVudHM7XG5cbiAgICAgIGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgfSA9IGl0ZW07XG5cbiAgICAgICAgaWYgKGVsZW1lbnQubmV4dF9pZCAmJiBmbGF0RWxlbWVudD8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWxlbWVudC5uZXh0X2lkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvRnJvbUVsZW1lbnQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCwgZmxhdEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChpbmZvRnJvbUVsZW1lbnQuZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IGluZm9Gcm9tRWxlbWVudC5lbGVtZW50Lm5leHRfaWQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KGVsZW1lbnQsIGZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWxlbWVudC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQpOyAvLyBGaXhCdWc6IDE1NzI5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChcbiAgICAgICAgcGFyZW50T2ZFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCxcbiAgICAgICAgcGFyZW50T2ZFbGVtZW50Py5uZXh0X2lkIGFzIHN0cmluZyxcbiAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKSxcbiAgICAgICAgZmxhdEVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50W11cbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5leHRFbGVtZW50LmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIHRoaXMubW92ZUVsZW1lbnRzVG9CcmFuY2gobmV4dEVsZW1lbnQsIGJyYW5jaEFkZEl0ZW0pO1xuICAgICAgLy8ga2nhu4NtIHRyYSBraOG7kWkgY2hhIGNo4bupYSBjw6FjIGVsZW1lbnQgY8OzIGJyYW5jaCB4ZW0gY8OzIGVsZW1lbnQgbsOgbyBjb3VudCA9IDAgxJHhu4MgcmVzZXQgbmV4dF9pZCA9ICcnIGPhu6dhIGto4buRaSDEkcOzXG4gICAgICBjb25zdCBkYXRhT2ZFbGVtZW50TmV4dFRvSWQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgZWxlbWVudE5leHRUb0lkLm5leHRfaWQsIGRhdGFPZkVsZW1lbnROZXh0VG9JZCwgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgaWYgKCFkYXRhT2ZFbGVtZW50TmV4dFRvSWQuY291bnQpIHtcbiAgICAgICAgZWxlbWVudE5leHRUb0lkLm5leHRfaWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50TmV4dFRvSWQubmV4dF9pZCA9ICcnO1xuICAgIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLm5leHRfaWQgPSAnJztcbiAgICBjb25zdCBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkID0gdGhpcy5kZWxldGVFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgIGlmIChkYXRhRWxlbWVudEhhc0N1cnJlbnRCcmFuY2guYnJhbmNoQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaC5icmFuY2hDb250YWluZXIsIG5leHRFbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGJyYW5jaEFkZEl0ZW0gJiYgYnJhbmNoQWRkSXRlbSAhPT0gZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmJyYW5jaENvbnRhaW5lcikge1xuICAgICAgdGhpcy5jbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnROZXh0VG9JZCwgYnJhbmNoQWRkSXRlbSwgbmV4dEVsZW1lbnQpOyAvLyBkw7JuZyBuw6B5IHPhur0ga2jhu59pIHThuqFvIGzhuqFpIG5leHRfaWQgY+G7p2Ega2jhu5FpIGNoYVxuICAgIH1cblxuICAgIGlmICghZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8ga2nhu4NtIHRyYSBraOG7kWkgY2hhIGNo4bupYSBjw6FjIGVsZW1lbnQgY8OzIGJyYW5jaCB4ZW0gY8OzIGVsZW1lbnQgbsOgbyBjb3VudCA9IDAgxJHhu4MgcmVzZXQgbmV4dF9pZCA9ICcnIGPhu6dhIGto4buRaSDEkcOzXG4gICAgZGF0YUZpc3RFbGVtZW50ID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTtcbiAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgbmV4dEVsZW1lbnQuaWQgYXMgc3RyaW5nLCBkYXRhRmlzdEVsZW1lbnQsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICBpZiAoIWRhdGFGaXN0RWxlbWVudC5jb3VudCkge1xuICAgICAgLy8gbuG6v3Uga2jhu5FpIGNoYSBraeG7g20gdHJhIGto4buRaSBjaGEgY2jhu6lhIGPDoWMgZWxlbWVudCBjw7MgYnJhbmNoIGPDsyBjb3VudCA9IDAgdGjDrCByZXNldCBuZXh0X2lkID0gJydcbiAgICAgIGVsZW1lbnROZXh0VG9JZC5uZXh0X2lkID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IG5ld0lkID0gZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZFswXS5lbGVtZW50Lm5leHRfaWQ7XG5cbiAgICBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLmVsZW1lbnQubmV4dF9pZCA9IG5ld0lkKSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVFbGVtZW50c1RvQnJhbmNoKGVsZW1lbnRTdGFydDogSURpYWdyYW1FbGVtZW50LCBicmFuY2hDb250YWluZXI6IElEaWFncmFtRWxlbWVudEJyYW5jaCkge1xuICAgIGlmICghZWxlbWVudFN0YXJ0IHx8IGVsZW1lbnRTdGFydC5jb2RlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUIHx8ICFicmFuY2hDb250YWluZXIgfHwgIWJyYW5jaENvbnRhaW5lci5lbGVtZW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRDb250YWluZXJIYXNFbGVtZW50U3RhcnQoZWxlbWVudFN0YXJ0LCB0aGlzLkVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgY29udGFpbmVyLCBpbmRleCB9ID0gcmVzdWx0O1xuICAgIGNvbnN0IGVsZW1lbnRzSGFzTW92ZTogQXJyYXk8SURpYWdyYW1FbGVtZW50PiA9IGNvbnRhaW5lci5zbGljZShOdW1iZXIoaW5kZXgpKTtcbiAgICBjb25zdCBlbGVtZW50c09mQnJhbmNoQ29udGFpbmVyID0gYnJhbmNoQ29udGFpbmVyLmVsZW1lbnRzO1xuICAgIGNvbnN0IGxhc3RFbGVtZW50T2ZCcmFuY2hDb250YWluZXIgPSBlbGVtZW50c09mQnJhbmNoQ29udGFpbmVyW2VsZW1lbnRzT2ZCcmFuY2hDb250YWluZXIubGVuZ3RoIC0gMV07XG5cbiAgICBlbGVtZW50c0hhc01vdmUuZm9yRWFjaCgoZWxlbWVudCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnQsIHRydWUpKTtcbiAgICBpZiAobGFzdEVsZW1lbnRPZkJyYW5jaENvbnRhaW5lciAmJiBsYXN0RWxlbWVudE9mQnJhbmNoQ29udGFpbmVyLmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIGxhc3RFbGVtZW50T2ZCcmFuY2hDb250YWluZXIubmV4dF9pZCA9IGVsZW1lbnRTdGFydC5pZDtcbiAgICAgIGVsZW1lbnRTdGFydC5wcmVfaWQgPSBsYXN0RWxlbWVudE9mQnJhbmNoQ29udGFpbmVyLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RFbGVtZW50TW92ZSA9IGVsZW1lbnRzSGFzTW92ZVtlbGVtZW50c0hhc01vdmUubGVuZ3RoIC0gMV07XG4gICAgbGV0IG5leHRFbGVtZW50ID0gZWxlbWVudFN0YXJ0O1xuXG4gICAgaWYgKGxhc3RFbGVtZW50TW92ZSAmJiBsYXN0RWxlbWVudE1vdmUubmV4dF9pZCkge1xuICAgICAgbmV4dEVsZW1lbnQgPSB0aGlzLkZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGFzdEVsZW1lbnRNb3ZlLm5leHRfaWQpIGFzIElEaWFncmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVFbGVtZW50U3RhcnQ6IElEaWFncmFtRWxlbWVudCA9IGNvbnRhaW5lcltOdW1iZXIoaW5kZXgpIC0gMV07XG5cbiAgICBicmFuY2hDb250YWluZXIuZWxlbWVudHMucHVzaCguLi5lbGVtZW50c0hhc01vdmUpO1xuICAgIGlmICghcHJlRWxlbWVudFN0YXJ0IHx8IHByZUVsZW1lbnRTdGFydC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KHByZUVsZW1lbnRTdGFydCwgbmV4dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZENvbnRhaW5lckhhc0VsZW1lbnRTdGFydChlbGVtZW50U3RhcnQ6IElEaWFncmFtRWxlbWVudCwgY29udGFpbmVyQ2FwYWNpdHk6IEFycmF5PElEaWFncmFtRWxlbWVudD4pOiB7IGVsZW1lbnRTdGFydDogSURpYWdyYW1FbGVtZW50OyBpbmRleDogc3RyaW5nOyBjb250YWluZXI6IEFycmF5PElEaWFncmFtRWxlbWVudD4gfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFjb250YWluZXJDYXBhY2l0eSB8fCAhY29udGFpbmVyQ2FwYWNpdHkubGVuZ3RoIHx8ICFlbGVtZW50U3RhcnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5kZXggaW4gY29udGFpbmVyQ2FwYWNpdHkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXJDYXBhY2l0eVtpbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50LmlkID09PSBlbGVtZW50U3RhcnQuaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50U3RhcnQ6IGVsZW1lbnRTdGFydCxcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXJDYXBhY2l0eSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBicmFuY2hlcyA9IGVsZW1lbnQuYnJhbmNoZXM7XG5cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZENvbnRhaW5lckhhc0VsZW1lbnRTdGFydChlbGVtZW50U3RhcnQsIGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KGVsZW1lbnREZWxldGU6IElEaWFncmFtRWxlbWVudCwgaWdub3JlVXBkYXRlUHJlSWQ/OiBib29sZWFuKTogQXJyYXk8eyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGRhdGE6IElCcmFuY2hFbmRDb3VudCB9PiB7XG4gICAgaWYgKCFlbGVtZW50RGVsZXRlIHx8ICFlbGVtZW50RGVsZXRlLmlkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQgPSBuZXcgQXJyYXk8eyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGRhdGE6IElCcmFuY2hFbmRDb3VudCB9PigpO1xuICAgIGNvbnN0IGZsYXRFbGVtZW50cyA9IHRoaXMuRmxhdEVsZW1lbnRzO1xuICAgIGNvbnN0IGVsZW1lbnRzSGFzTmV4dElkVG9FbGVtZW50RGVsZXRlID0gZmxhdEVsZW1lbnRzPy5maWx0ZXIoKGVsKSA9PiBlbC5uZXh0X2lkID09PSBlbGVtZW50RGVsZXRlLmlkKTtcbiAgICBjb25zdCBlbGVtZW50SGFzUHJlSWRUb0VsZW1lbnREZWxldGUgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5wcmVfaWQgPT09IGVsZW1lbnREZWxldGUuaWQgJiYgZWwuaWQgPT09IGVsZW1lbnREZWxldGUubmV4dF9pZCk7XG5cbiAgICBpZiAoIWlnbm9yZVVwZGF0ZVByZUlkICYmIGVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSkge1xuICAgICAgZWxlbWVudEhhc1ByZUlkVG9FbGVtZW50RGVsZXRlLnByZV9pZCA9IGVsZW1lbnREZWxldGUucHJlX2lkO1xuICAgIH1cbiAgICBlbGVtZW50c0hhc05leHRJZFRvRWxlbWVudERlbGV0ZT8uZm9yRWFjaCgoZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZSkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSkge1xuICAgICAgICBlbGVtZW50SGFzTmV4dElkVG9FbGVtZW50RGVsZXRlLm5leHRfaWQgPSBlbGVtZW50SGFzUHJlSWRUb0VsZW1lbnREZWxldGUuaWQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnREZWxldGUuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgICBpZiAoIWVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSAmJiBlbGVtZW50RGVsZXRlLm5leHRfaWQpIHtcbiAgICAgICAgICAvLyBGaXhidWc6IDE1NjIzXG4gICAgICAgICAgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5uZXh0X2lkID0gZWxlbWVudERlbGV0ZS5uZXh0X2lkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUuYnJhbmNoZXMgJiYgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG5cbiAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChlbGVtZW50SGFzTmV4dElkVG9FbGVtZW50RGVsZXRlLCBlbGVtZW50RGVsZXRlLmlkIGFzIHN0cmluZywgZGF0YSwgdGhpcy5GbGF0RWxlbWVudHMgYXMgQXJyYXk8SURpYWdyYW1FbGVtZW50Pik7XG4gICAgICAgIGlmICghZGF0YS5jb3VudCkge1xuICAgICAgICAgIGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUubmV4dF9pZCA9ICcnO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQucHVzaCh7IGVsZW1lbnQ6IGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUsIGRhdGEgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5uZXh0X2lkID0gZWxlbWVudERlbGV0ZS5uZXh0X2lkO1xuICAgIH0pO1xuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5maW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIodGhpcy5FbGVtZW50cyBhcyBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlKTtcblxuICAgIHJldHVybiBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50KSB7XG4gICAgaWYgKCFkYXRhRHJvcCB8fCAhZWxlbWVudEhhc0N1cnJlbnRCcmFuY2ggfHwgIWJyYW5jaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbGVtZW50RHJvcDogSURpYWdyYW1FbGVtZW50ID0gZWxlbWVudEhhc0N1cnJlbnRCcmFuY2g7XG5cbiAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGVsZW1lbnREcm9wID0gYnJhbmNoLmVsZW1lbnRzW2JyYW5jaC5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50VG9CcmFuY2goZWxlbWVudERyb3AsIGJyYW5jaCwgY2xvbmVEZWVwKGRhdGFEcm9wKSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVsZW1lbnRFeGl0V29ya0Zsb3cobmV3RWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBudW1iZXJCcmFuY2g/OiBudW1iZXIpIHtcbiAgICBjb25zdCBleGl0ID0ge1xuICAgICAgZWxlbWVudF90eXBlOiBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElULFxuICAgICAgY29kZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdpMThuX2VuZF9qb3VybmV5X25ldycpLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgaWYgKG5ld0VsZW1lbnQuYnJhbmNoZXMgJiYgbmV3RWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgIG5ld0VsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBudW1iZXJCcmFuY2gpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXdFbGVtZW50LmJyYW5jaGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChuZXdFbGVtZW50LCBpdGVtLCBleGl0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFbGVtZW50RXhpdFdoZW5EZWxldGVEaXJlY3Rpb25MaW5lKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBleGl0ID0ge1xuICAgICAgZWxlbWVudF90eXBlOiBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElULFxuICAgICAgY29kZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdpMThuX2VuZF9qb3VybmV5X25ldycpLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgZGVsZXRlIGVsZW1lbnQubm9kZU90aGVyQ29uZmlnO1xuICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBicmFuY2gsIGV4aXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEtoaSBt4buZdCBlbGVtZW50IGLhu4sgeG/DoSwgaMOgbSBuw6B5IHPhur0gdOG7sSDEkeG7mW5nIHRow6ptIGV4aXQgY2hvIHThuqV0IGPhuqMgY8OhYyBlbGVtZW50IHBow61hIHRyxrDhu5tjIMSRYW5nIHRy4buPIHThu5tpIGVsZW1lbnQgxJHDsy5cbiAgICovXG4gIHB1YmxpYyBhZGRFbGVtZW50RXhpdEZvckFsbEVsZW1lbnRQcmV2aW91c1doZW5FbGVtZW50RGVsZXRlKGVsZW1lbnRzRGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIGNvbnN0IGZsYXRFbGVtZW50ID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzSW5FbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnRbXSA9IFtdO1xuXG4gICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmJ1aWxkRmxhdEVsZW1lbnQoZWxlbWVudHNEZWxldGUsIGZsYXRFbGVtZW50c0luRWxlbWVudERlbGV0ZSk7XG5cbiAgICBmbGF0RWxlbWVudHNJbkVsZW1lbnREZWxldGUuZm9yRWFjaCgoZWxlbWVudERlbCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnREZWwucHJlX290aGVyX2lkICYmIGVsZW1lbnREZWwucHJlX290aGVyX2lkLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50RGVsLnByZV9vdGhlcl9pZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZsYXRFbGVtZW50Py5maW5kKChlbCkgPT4gZWwuaWQgPT09IGl0ZW0pO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cgJiYgZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkIHx8ICFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhFbCA9IGJyYW5jaC5uZXh0X290aGVyX2lkLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBlbGVtZW50RGVsLmlkKTtcblxuICAgICAgICAgICAgICBpZiAoaW5kZXhFbCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5zcGxpY2UoaW5kZXhFbCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRFeGl0V2hlbkRlbGV0ZURpcmVjdGlvbkxpbmUoZWxlbWVudCwgYnJhbmNoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucG9zaXRpb25fZW5kID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5leHRfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5uZXh0X290aGVyX2lkLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBlbGVtZW50RGVsLmlkKTtcblxuICAgICAgICAgIGlmIChpbmRleEVsICE9PSAtMSkge1xuICAgICAgICAgICAgZWxlbWVudC5uZXh0X290aGVyX2lkLnNwbGljZShpbmRleEVsLCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0Q29uZmlnRGVmYXVsdEJyYW5jaGVzID0gdGhpcy5oYW5kbGVyRnVuY3Rpb24/LmdldENvbmZpZ0RlZmF1bHRCcmFuY2hlcyA/PyBnZXREZWZhdWx0Q29uZmlnQ29uc3RpdHVlbnRCcmFuY2hlcztcbiAgICAgICAgICAgICAgZ2V0Q29uZmlnRGVmYXVsdEJyYW5jaGVzKGVsZW1lbnQuY29kZSA/PyAnJywgZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmFuY2ggPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoT2ZFbGVtZW50KGVsZW1lbnQuaWQgPz8gJycsIHRoaXMuRmxhdEVsZW1lbnRzLCBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudEV4aXRXaGVuRGVsZXRlRGlyZWN0aW9uTGluZShlbGVtZW50LCBicmFuY2gpO1xuICAgICAgICAgICAgZWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZWxlbWVudC5wb3NpdGlvbl9lbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50RGVsLm5leHRfb3RoZXJfaWQgJiYgZWxlbWVudERlbC5uZXh0X290aGVyX2lkLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50RGVsLm5leHRfb3RoZXJfaWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmbGF0RWxlbWVudD8uZmluZCgoZWwpID0+IGVsLmlkID09PSBpdGVtKTtcblxuICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wcmVfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5wcmVfb3RoZXJfaWQuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGVsZW1lbnREZWwuaWQpO1xuXG4gICAgICAgICAgaWYgKGluZGV4RWwgIT09IC0xKSB7XG4gICAgICAgICAgICBlbGVtZW50LnByZV9vdGhlcl9pZC5zcGxpY2UoaW5kZXhFbCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnREZWwuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyAmJiBlbGVtZW50RGVsLmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudERlbC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkIHx8ICFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmxhdEVsZW1lbnQ/LmZpbmQoKGVsKSA9PiBlbC5pZCA9PT0gaXRlbSk7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wcmVfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5wcmVfb3RoZXJfaWQuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGVsZW1lbnREZWwuaWQpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXhFbCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5wcmVfb3RoZXJfaWQuc3BsaWNlKGluZGV4RWwsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVPckNoYW5nZUVsZW1lbnQoZWxlbWVudFJlbW92ZTogSURpYWdyYW1FbGVtZW50LCBlbGVtZW50Q2hhbmdlOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGJyYW5jaENob29zZT86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudFJlbW92ZSB8fCBlbGVtZW50UmVtb3ZlLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgcHJlRWxlbWVudCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0gZWxlbWVudFJlbW92ZS5wcmVfaWQpO1xuICAgIGNvbnN0IGluZm9PZkVsZW1lbnRSZW1vdmUgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudFJlbW92ZSwgdGhpcy5GbGF0RWxlbWVudHMpO1xuXG4gICAgY29uc3QgZXhpdCA9IHtcbiAgICAgIGVsZW1lbnRfdHlwZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIGNvZGU6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnaTE4bl9vdXRfam91cm5leScpLFxuICAgICAgaWQ6IGAke3V1aWQoKX1gLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudE5leHRCZWZvcmVEZWxldGUgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5wcmVfaWQgPT09IGVsZW1lbnRSZW1vdmUuaWQgJiYgZWwuaWQgPT09IGVsZW1lbnRSZW1vdmUubmV4dF9pZCk7XG5cbiAgICBpZiAoZWxlbWVudE5leHRCZWZvcmVEZWxldGUgJiYgZWxlbWVudE5leHRCZWZvcmVEZWxldGUuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgaWYgKHByZUVsZW1lbnQgJiYgcHJlRWxlbWVudC5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XICYmIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCkge1xuICAgICAgICBpbmZvT2ZFbGVtZW50UmVtb3ZlLmN1cnJlbnRCcmFuY2gubm9kZU90aGVyQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHByZUVsZW1lbnQgJiYgcHJlRWxlbWVudC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICAgIHByZUVsZW1lbnQubm9kZU90aGVyQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmVFbGVtZW50ICYmICFlbGVtZW50TmV4dEJlZm9yZURlbGV0ZSkge1xuICAgICAgcHJlRWxlbWVudC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlRWxlbWVudCAmJiBwcmVFbGVtZW50LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cgJiYgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoKSB7XG4gICAgICAgIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnRSZW1vdmUpO1xuXG4gICAgLy8geMOzYSB0aOG6s25nXG4gICAgaWYgKCFlbGVtZW50Q2hhbmdlKSB7XG4gICAgICBpZiAoIWVsZW1lbnROZXh0QmVmb3JlRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZXhpdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGF5IMSRxqFuID09IMSRxqFuLCB0aGF5IMSRxqFuID0gbmjDoW5oXG4gICAgaWYgKGVsZW1lbnRSZW1vdmUuZWxlbWVudF90eXBlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgaWYgKCFlbGVtZW50UmVtb3ZlLm5leHRfaWQgJiYgZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICAgIC8vIDQ4MjI5XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZXhpdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGVsZW1lbnRDaGFuZ2UsIGJyYW5jaENob29zZSk7XG4gICAgICBpZiAoZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XICYmIGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlICYmIGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRoYXkgbmjDoW5oID0gxJHGoW5cbiAgICBpZiAoZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGV4aXQpO1xuICAgICAgdGhpcy5hZGRFbGVtZW50KHByZUVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBpbmZvT2ZFbGVtZW50UmVtb3ZlLmN1cnJlbnRCcmFuY2ggYXMgSURpYWdyYW1FbGVtZW50QnJhbmNoLCBlbGVtZW50Q2hhbmdlLCBicmFuY2hDaG9vc2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhheSBuaMOhbmggPSBuaMOhbmhcbiAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGV4aXQpO1xuICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZWxlbWVudENoYW5nZSwgYnJhbmNoQ2hvb3NlKTtcbiAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZXhpdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQ2hhbmdlRWxlbWVudEFuZEluc2VydEJyYW5jaEtlZXAoZWxlbWVudFJlbW92ZTogSURpYWdyYW1FbGVtZW50LCBlbGVtZW50Q2hhbmdlOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGJyYW5jaEtlZXBFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGJyYW5jaENob2ljZT86IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZsYXRFbGVtZW50cyA9IHRoaXMuRmxhdEVsZW1lbnRzO1xuICAgIGNvbnN0IHByZUVsZW1lbnQgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGVsZW1lbnRSZW1vdmUucHJlX2lkKTtcbiAgICBjb25zdCBpbmZvT2ZFbGVtZW50UmVtb3ZlID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnRSZW1vdmUsIHRoaXMuRmxhdEVsZW1lbnRzKTtcblxuICAgIHRoaXMuYWRkQnJhbmNoS2VlcFRvRmxvdyhicmFuY2hLZWVwRWxlbWVudCwgcHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCk7XG4gICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnRSZW1vdmUpO1xuICAgIGlmIChlbGVtZW50Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGVsZW1lbnRDaGFuZ2UsIGJyYW5jaENob2ljZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRCcmFuY2hLZWVwVG9GbG93KGJyYW5jaEtlZXBFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGl0ZW1Ecm9wOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaERyb3A6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYnJhbmNoS2VlcEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBicmFuY2hLZWVwRWxlbWVudC5lbGVtZW50cztcbiAgICBjb25zdCBuZXh0Q3VycmVudEl0ZW1Ecm9wID0gZWxlbWVudHNbMF07XG5cbiAgICBpZiAobmV4dEN1cnJlbnRJdGVtRHJvcCkge1xuICAgICAgaWYgKGl0ZW1Ecm9wLmVsZW1lbnRfdHlwZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgaXRlbURyb3AubmV4dF9pZCA9IG5leHRDdXJyZW50SXRlbURyb3AgJiYgbmV4dEN1cnJlbnRJdGVtRHJvcC5pZDtcbiAgICAgIH1cbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gaXRlbURyb3AuaWQ7XG4gICAgfVxuICAgIGlmIChicmFuY2hEcm9wKSB7XG4gICAgICBicmFuY2hEcm9wLmVsZW1lbnRzLnB1c2goLi4uZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuRWxlbWVudHMucHVzaCguLi5lbGVtZW50cyk7XG4gIH1cbn1cbiJdfQ==
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvY2FudmFzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHdkcsTUFBTSxPQUFPLDhCQUE4QjtJQUNqQyxRQUFRLENBQTBCO0lBQ2xDLFlBQVksQ0FBMEI7SUFDdEMsZUFBZSxDQUFvQjtJQUNuQyxzQkFBc0IsR0FBNEIsRUFBRSxDQUFDO0lBRTVDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTdELElBQVcsZUFBZSxDQUFDLGVBQWlDO1FBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBZ0MsRUFBRSxpQkFBMkMsRUFBRSx1QkFBZ0Q7UUFDakosSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxZ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QztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM1QyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0UsUUFBUSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDbkUsQ0FBQztZQUNELG1CQUFtQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUV0QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0E3dUJVLDhCQUE4Qjs0R0FBOUIsOEJBQThCLGNBRGpCLE1BQU07OzRGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjYW52YXNDb25maWdSZWFkb25seSB9IGZyb20gJy4vZGlhZ3JhbS1kcmF3LnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJyYW5jaEVuZENvdW50LCBJSGFuZGxlckZ1bmN0aW9uLCBJUnVsZUNvbm5lY3RhYmxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfSBmcm9tICcuL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdENvbmZpZ0NvbnN0aXR1ZW50QnJhbmNoZXMsIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbCB9IGZyb20gJy4vdXRpbHMvY2FudmFzLnV0aWwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzU2VydmljZSB7XG4gIHByaXZhdGUgZWxlbWVudHMhOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+O1xuICBwcml2YXRlIGZsYXRFbGVtZW50cyE6IEFycmF5PElEaWFncmFtRWxlbWVudD47XG4gIHByaXZhdGUgaGFuZGxlckZ1bmN0aW9uITogSUhhbmRsZXJGdW5jdGlvbjtcbiAgcHJpdmF0ZSBlbGVtZW50UnVsZUNvbm5lY3RhYmxlOiBBcnJheTxJUnVsZUNvbm5lY3RhYmxlPiA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwdWJsaWMgc2V0IEhhbmRsZXJGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb246IElIYW5kbGVyRnVuY3Rpb24pIHtcbiAgICB0aGlzLmhhbmRsZXJGdW5jdGlvbiA9IGhhbmRsZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSGFuZGxlckZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIHBvc2l0aW9uRmlyc3ROb2RlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzOiBBcnJheTxJUnVsZUNvbm5lY3RhYmxlPikge1xuICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmxhdEVsZW1lbnRzID0gW107XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gZWxlbWVudHNbMF07XG4gICAgZmlyc3RFbGVtZW50LnNwZWNpZmljX3ggPSBwb3NpdGlvbkZpcnN0Tm9kZS54O1xuICAgIGZpcnN0RWxlbWVudC5zcGVjaWZpY195ID0gcG9zaXRpb25GaXJzdE5vZGUueTtcbiAgICB0aGlzLkVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgdGhpcy5SdWxlQ29ubmVjdGFibGVFbGVtZW50cyA9IHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHNldCBFbGVtZW50cyhlbGVtZW50cykge1xuICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHM7XG4gIH1cblxuICBzZXQgUnVsZUNvbm5lY3RhYmxlRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+KSB7XG4gICAgdGhpcy5lbGVtZW50UnVsZUNvbm5lY3RhYmxlID0gZWxlbWVudHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSdWxlQ29ubmVjdGFibGU7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tSdWxlRHJhZ0Ryb3AoYmVmb3JlRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgY3VycmVudEVsZW1lbnREcmFnOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGFmdGVyRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgcnVsZUNvbm5lY3RhYmxlRWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcnVsZUl0ZW1EcmFnID0gcnVsZUNvbm5lY3RhYmxlRWxlbWVudHMuZmluZCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50Q29kZSA9PT0gY3VycmVudEVsZW1lbnREcmFnPy5jb2RlKTtcbiAgICBjb25zdCBydWxlQWZ0ZXJJdGVtRHJhZyA9IHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGFmdGVyRWxlbWVudERyYWcgJiYgaXRlbS5lbGVtZW50Q29kZSA9PT0gYWZ0ZXJFbGVtZW50RHJhZy5jb2RlKTtcblxuICAgIGlmIChcbiAgICAgICEhKHJ1bGVJdGVtRHJhZyAmJiBydWxlSXRlbURyYWcuZWxlbWVudENvZGVDb25uZWN0YWJsZUJlZm9yZS5maW5kKChjb2RlKSA9PiBjb2RlID09PSBiZWZvcmVFbGVtZW50RHJhZz8uY29kZSkpICYmXG4gICAgICAoIXJ1bGVBZnRlckl0ZW1EcmFnIHx8ICEhKHJ1bGVBZnRlckl0ZW1EcmFnICYmIHJ1bGVBZnRlckl0ZW1EcmFnLmVsZW1lbnRDb2RlQ29ubmVjdGFibGVCZWZvcmUuZmluZCgoY29kZSkgPT4gY29kZSA9PT0gY3VycmVudEVsZW1lbnREcmFnPy5jb2RlKSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZsYXRFbGVtZW50cygpIHtcbiAgICB0aGlzLmZsYXRFbGVtZW50cyA9IFtdO1xuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5idWlsZEZsYXRFbGVtZW50KHRoaXMuRWxlbWVudHMgYXMgQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgdGhpcy5mbGF0RWxlbWVudHMpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmxhdEVsZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIGNoZWNrRXhpc3ROYW1lRWxlbWVudChuYW1lOiBzdHJpbmcsIGZsYXRFbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICghbmFtZSB8fCAhbmFtZS50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdEVsZW1lbnRzPy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50Lm5hbWUgJiYgZWxlbWVudC5uYW1lLnRyaW0oKSAmJiBlbGVtZW50Lm5hbWUudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IG5hbWUudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFkZEVsZW1lbnQoaXRlbURyb3A6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoRHJvcDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50LCBicmFuY2hDaG9pY2U/OiBudW1iZXIpIHtcbiAgICBpZiAoIWl0ZW1Ecm9wIHx8ICFkYXRhRHJvcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50c0ZsYXQgPSB0aGlzLkZsYXRFbGVtZW50cztcbiAgICBpZiAoZGF0YURyb3AuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgY29uc3QgZWxlbWVudHNPZkNvZGVEYXRhRHJvcCA9IHRoaXMuRmxhdEVsZW1lbnRzPy5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQuY29kZSA9PT0gZGF0YURyb3AuY29kZSk7XG5cbiAgICAgIGlmIChlbGVtZW50c09mQ29kZURhdGFEcm9wICYmIGVsZW1lbnRzT2ZDb2RlRGF0YURyb3AubGVuZ3RoKSB7XG4gICAgICAgIGNvdW50ZXIgPSBlbGVtZW50c09mQ29kZURhdGFEcm9wLnJlZHVjZSgocHJlRWw6IElEaWFncmFtRWxlbWVudCwgY3VycmVudEVsOiBJRGlhZ3JhbUVsZW1lbnQpID0+IChOdW1iZXIoY3VycmVudEVsLnNwZWNpZmljX2NvdW50ZXJfY3VycmVudF9jb2RlKSA+IE51bWJlcihwcmVFbC5zcGVjaWZpY19jb3VudGVyX2N1cnJlbnRfY29kZSkgPyBjdXJyZW50RWwgOiBwcmVFbCksIGVsZW1lbnRzT2ZDb2RlRGF0YURyb3BbMF0pXG4gICAgICAgICAgLnNwZWNpZmljX2NvdW50ZXJfY3VycmVudF9jb2RlIGFzIG51bWJlcjtcbiAgICAgIH1cbiAgICAgIGNvdW50ZXIrKztcbiAgICAgIGxldCBuYW1lID0gYCR7ZGF0YURyb3AubmFtZX0gJHtjb3VudGVyfWA7XG5cbiAgICAgIHdoaWxlICh0aGlzLmNoZWNrRXhpc3ROYW1lRWxlbWVudChuYW1lIGFzIHN0cmluZywgZWxlbWVudHNGbGF0KSkge1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIG5hbWUgPSBgJHtkYXRhRHJvcC5uYW1lfSAke2NvdW50ZXJ9YDtcbiAgICAgIH1cbiAgICAgIGRhdGFEcm9wLm5hbWUgPSBuYW1lO1xuICAgICAgZGF0YURyb3Auc3BlY2lmaWNfY291bnRlcl9jdXJyZW50X2NvZGUgPSBjb3VudGVyO1xuICAgIH1cbiAgICBpZiAoYnJhbmNoRHJvcCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkRWxlbWVudFRvQnJhbmNoKGl0ZW1Ecm9wLCBicmFuY2hEcm9wLCBjbG9uZURlZXAoZGF0YURyb3ApLCBicmFuY2hDaG9pY2UpO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuRWxlbWVudHM7XG4gICAgY29uc3QgbmV4dEN1cnJlbnRJdGVtRHJvcDogSURpYWdyYW1FbGVtZW50ID0gZWxlbWVudHM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGl0ZW1Ecm9wLm5leHRfaWQpIGFzIElEaWFncmFtRWxlbWVudDtcblxuICAgIGlmICghbmV4dEN1cnJlbnRJdGVtRHJvcCAmJiBkYXRhRHJvcC5jb2RlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4SXRlbURyb3AgPSBlbGVtZW50cz8uZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5pZCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHsgLi4uY2xvbmVEZWVwKGRhdGFEcm9wKSwgcHJlX2lkOiBpdGVtRHJvcC5pZCwgbmV4dF9pZDogZGF0YURyb3AuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCA/IG5leHRDdXJyZW50SXRlbURyb3AuaWQgOiAnJyB9O1xuXG4gICAgaWYgKCFkYXRhRHJvcC5pZCkge1xuICAgICAgbmV3RWxlbWVudC5pZCA9IGAke3V1aWQoKX1gO1xuICAgIH1cblxuICAgIGl0ZW1Ecm9wLm5leHRfaWQgPSBuZXdFbGVtZW50LmlkO1xuXG4gICAgaWYgKG5leHRDdXJyZW50SXRlbURyb3ApIHtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gbmV3RWxlbWVudC5pZDtcbiAgICB9XG4gICAgZWxlbWVudHM/LnNwbGljZSgoaW5kZXhJdGVtRHJvcCBhcyBudW1iZXIpICsgMSwgMCwgbmV3RWxlbWVudCk7XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgYWZ0ZXJFbGVtZW50ID0gZmxhdEVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwucHJlX2lkID09PSBuZXdFbGVtZW50LmlkKTtcblxuICAgIGlmICghYWZ0ZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJlZm9yZUVsZW1lbnQgPSBmbGF0RWxlbWVudHM/LmZpbHRlcigoZWwpID0+IGVsLmlkICE9PSBuZXdFbGVtZW50LmlkICYmIGVsLm5leHRfaWQgPT09IGFmdGVyRWxlbWVudC5pZCk7XG5cbiAgICBiZWZvcmVFbGVtZW50Py5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50Lm5leHRfaWQgPSBuZXdFbGVtZW50LmlkO1xuICAgIH0pO1xuICAgIGlmIChkYXRhRHJvcC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkRWxlbWVudEV4aXRXb3JrRmxvdyhuZXdFbGVtZW50LCBicmFuY2hDaG9pY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFbGVtZW50VG9CcmFuY2goaXRlbURyb3A6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoRHJvcDogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50LCBudW1iZXJCcmFuY2g/OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGJyYW5jaERyb3AuZWxlbWVudHM7XG4gICAgbGV0IG5leHRDdXJyZW50SXRlbURyb3AgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGluZGV4SXRlbURyb3AgPSAtMTtcblxuICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGluZGV4SXRlbURyb3AgPSBlbGVtZW50cy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGl0ZW1Ecm9wLmlkKTtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AgPSBlbGVtZW50cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQ7XG4gICAgICBpZiAoIW5leHRDdXJyZW50SXRlbURyb3AgJiYgaW5kZXhJdGVtRHJvcCA9PT0gLTEpIHtcbiAgICAgICAgbmV4dEN1cnJlbnRJdGVtRHJvcCA9IGVsZW1lbnRzW2luZGV4SXRlbURyb3AgKyAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IG5leHRJZCA9IChuZXh0Q3VycmVudEl0ZW1Ecm9wICYmIG5leHRDdXJyZW50SXRlbURyb3AuaWQpIHx8IGl0ZW1Ecm9wLm5leHRfaWQ7XG5cbiAgICBpZiAoZGF0YURyb3AuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgbmV4dElkID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZW1lbnQ6IElEaWFncmFtRWxlbWVudCA9IHsgLi4uZGF0YURyb3AsIHByZV9pZDogaXRlbURyb3AuaWQsIG5leHRfaWQ6IG5leHRJZCB9O1xuXG4gICAgaWYgKCFkYXRhRHJvcC5pZCkge1xuICAgICAgbmV3RWxlbWVudC5pZCA9IGAke3V1aWQoKX1gO1xuICAgIH1cblxuICAgIGlmICghaXRlbURyb3AuYnJhbmNoZXMgfHwgIWl0ZW1Ecm9wLmJyYW5jaGVzLmZpbmQoKGJyYW5jaCkgPT4gYnJhbmNoID09PSBicmFuY2hEcm9wKSkge1xuICAgICAgaXRlbURyb3AubmV4dF9pZCA9IG5ld0VsZW1lbnQuaWQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRDdXJyZW50SXRlbURyb3ApIHtcbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gbmV3RWxlbWVudC5pZDtcbiAgICB9XG4gICAgZWxlbWVudHM/LnNwbGljZShpbmRleEl0ZW1Ecm9wICsgMSwgMCwgbmV3RWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQpO1xuICAgIGlmIChpdGVtRHJvcCAmJiBpdGVtRHJvcC5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICB0aGlzLnVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coaXRlbURyb3AsIHRoaXMuRmxhdEVsZW1lbnRzPy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtRHJvcC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZGF0YURyb3AuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgdGhpcy5jaGVja0VuZE1vdmVFbGVtZW50V2hlbkRyb3BFbGVtZW50Q29kZUV4aXQoYnJhbmNoRHJvcCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFEcm9wLmVsZW1lbnRfdHlwZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hZGRFbGVtZW50RXhpdFdvcmtGbG93KG5ld0VsZW1lbnQsIG51bWJlckJyYW5jaCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coZWxlbWVudFdvcmtmbG93OiBJRGlhZ3JhbUVsZW1lbnQsIG5leHRFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnRXb3JrZmxvdyB8fCBlbGVtZW50V29ya2Zsb3cuZWxlbWVudF90eXBlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEVsZW1lbnQ6IEFycmF5PElEaWFncmFtRWxlbWVudD4gPSBbXTtcblxuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5mbGF0RWxlbWVudEhhc0JyYW5jaChuZXh0RWxlbWVudCwgZmxhdEVsZW1lbnQpO1xuICAgIGVsZW1lbnRXb3JrZmxvdy5icmFuY2hlcz8uZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXTtcblxuICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBlbGVtZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyAmJiBlbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU5leHRJZE9mQ2hpbGRFbGVtZW50SW5FbGVtZW50V29ya2Zsb3coZWxlbWVudCwgZWxlbWVudHNbaW5kZXggKyAxXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQgfHwgZWxlbWVudC5pZCA9PT0gbmV4dEVsZW1lbnQuaWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQucHJlX2lkID09PSBuZXh0RWxlbWVudC5pZCB8fCBmbGF0RWxlbWVudC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKSkge1xuICAgICAgICAgIC8vIHRyxrDhu51uZyBo4bujcCBn4buNaSDEkeG7hyBxdXkgTmV4dEVsZW1lbnQgbMOgIGto4buRaSB0csaw4bubYyBob+G6t2MgY2hhIGPhu6dhIGPDoWMgZWxlbWVudCBoaeG7h24gdOG6oWlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgICAgIGlmIChlbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IG5leHRFbGVtZW50LmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KGVsZW1lbnQsIG5leHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudFdvcmtmbG93Lm5leHRfaWQgIT09IG5leHRFbGVtZW50LmlkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IG5leHRFbGVtZW50LmlkO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRW5kTW92ZUVsZW1lbnRXaGVuRHJvcEVsZW1lbnRDb2RlRXhpdChjdXJyZW50QnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudHMgPSB0aGlzLkZsYXRFbGVtZW50cztcbiAgICBjb25zdCBlbGVtZW50SGFzQ3VycmVudEJyYW5jaCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLmJyYW5jaGVzICYmICEhZWwuYnJhbmNoZXMuZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgIGlmICghZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLmlkID09PSBlbGVtZW50SGFzQ3VycmVudEJyYW5jaC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQ7XG5cbiAgICBpZiAoIW5leHRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaCA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG5cbiAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLCBuZXh0RWxlbWVudC5pZCBhcyBzdHJpbmcsIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaCwgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgIGlmICghZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmJyYW5jaEVtcHR5ICYmIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaC5jb3VudCA9PT0gMCkge1xuICAgICAgZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gubmV4dF9pZCA9ICcnO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50TmV4dFRvSWQgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uZXh0X2lkID09PSBuZXh0RWxlbWVudC5pZCk7IC8vIEto4buRaSBjaGFcblxuICAgIGlmICghZWxlbWVudE5leHRUb0lkIHx8IGVsZW1lbnROZXh0VG9JZC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XIHx8ICFlbGVtZW50TmV4dFRvSWQubmV4dF9pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZGF0YUZpc3RFbGVtZW50ID0gZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoO1xuXG4gICAgaWYgKGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmlkICE9PSBlbGVtZW50TmV4dFRvSWQuaWQpIHtcbiAgICAgIGRhdGFGaXN0RWxlbWVudCA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgbmV4dEVsZW1lbnQuaWQgYXMgc3RyaW5nLCBkYXRhRmlzdEVsZW1lbnQsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICB9XG4gICAgaWYgKGRhdGFGaXN0RWxlbWVudC5jb3VudCA+IDEgfHwgIWRhdGFGaXN0RWxlbWVudC5icmFuY2hDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYnJhbmNoQWRkSXRlbSA9IGRhdGFGaXN0RWxlbWVudC5icmFuY2hDb250YWluZXI7XG5cbiAgICBpZiAoZWxlbWVudEhhc0N1cnJlbnRCcmFuY2guaWQgPT09IGVsZW1lbnROZXh0VG9JZC5pZCkge1xuICAgICAgaWYgKG5leHRFbGVtZW50LmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgdGhpcy5tb3ZlRWxlbWVudHNUb0JyYW5jaChuZXh0RWxlbWVudCwgYnJhbmNoQWRkSXRlbSk7XG4gICAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLCB0aGlzLkZsYXRFbGVtZW50cyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnQgPSBlbGVtZW50ICYmIGVsZW1lbnQubmV4dF9pZCA/IGVsZW1lbnQgOiBlbGVtZW50SGFzQ3VycmVudEJyYW5jaDtcbiAgICAgICAgLy8gRml4YnVnOiAxNTc3MVxuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQoZWxlbWVudENvdW50LCBlbGVtZW50Q291bnQubmV4dF9pZCBhcyBzdHJpbmcsIGRhdGEsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICAgICAgaWYgKCFkYXRhLmNvdW50KSB7XG4gICAgICAgICAgcmV0dXJuIChlbGVtZW50Q291bnQubmV4dF9pZCA9ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLm5leHRfaWQgPSAnJztcbiAgICAgIGNvbnN0IGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQgPSB0aGlzLmRlbGV0ZUVsZW1lbnQobmV4dEVsZW1lbnQpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZGF0YSwgZWxlbWVudCB9ID0gZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZFswXTtcbiAgICAgIGNvbnN0IGluZm9PZkVsZW1lbnQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCwgdGhpcy5GbGF0RWxlbWVudHMpO1xuICAgICAgY29uc3QgcGFyZW50T2ZFbGVtZW50ID0gaW5mb09mRWxlbWVudC5lbGVtZW50O1xuICAgICAgbGV0IGRhdGFPZkVsZW1lbnRJbmZvID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTtcblxuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChwYXJlbnRPZkVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBwYXJlbnRPZkVsZW1lbnQ/Lm5leHRfaWQgYXMgc3RyaW5nLCBkYXRhT2ZFbGVtZW50SW5mbywgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgaWYgKGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmIChkYXRhLmNvdW50ID4gMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudCwgYnJhbmNoQWRkSXRlbSwgbmV4dEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhRmlzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyICE9PSBkYXRhLmJyYW5jaENvbnRhaW5lciAmJiBkYXRhRmlzdEVsZW1lbnQuY291bnQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgICAgICBkYXRhT2ZFbGVtZW50SW5mbyA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG4gICAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChwYXJlbnRPZkVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBwYXJlbnRPZkVsZW1lbnQ/Lm5leHRfaWQgYXMgc3RyaW5nLCBkYXRhT2ZFbGVtZW50SW5mbywgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhT2ZFbGVtZW50SW5mby5jb3VudCA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4YnVnOiAxNTUxOFxuICAgICAgICBpZiAoZGF0YS5icmFuY2hDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudCwgZGF0YS5icmFuY2hDb250YWluZXIsIG5leHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KFxuICAgICAgICAgIHBhcmVudE9mRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsXG4gICAgICAgICAgcGFyZW50T2ZFbGVtZW50Py5uZXh0X2lkIGFzIHN0cmluZyxcbiAgICAgICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpLFxuICAgICAgICAgIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnQsIGJyYW5jaEFkZEl0ZW0sIG5leHRFbGVtZW50KTtcbiAgICAgIGNvbnN0IGZsYXRFbGVtZW50ID0gdGhpcy5GbGF0RWxlbWVudHM7XG5cbiAgICAgIGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgfSA9IGl0ZW07XG5cbiAgICAgICAgaWYgKGVsZW1lbnQubmV4dF9pZCAmJiBmbGF0RWxlbWVudD8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWxlbWVudC5uZXh0X2lkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvRnJvbUVsZW1lbnQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCwgZmxhdEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChpbmZvRnJvbUVsZW1lbnQuZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQubmV4dF9pZCA9IGluZm9Gcm9tRWxlbWVudC5lbGVtZW50Lm5leHRfaWQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KGVsZW1lbnQsIGZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWxlbWVudC5uZXh0X2lkKSBhcyBJRGlhZ3JhbUVsZW1lbnQpOyAvLyBGaXhCdWc6IDE1NzI5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChcbiAgICAgICAgcGFyZW50T2ZFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCxcbiAgICAgICAgcGFyZW50T2ZFbGVtZW50Py5uZXh0X2lkIGFzIHN0cmluZyxcbiAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKSxcbiAgICAgICAgZmxhdEVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50W11cbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5leHRFbGVtZW50LmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIHRoaXMubW92ZUVsZW1lbnRzVG9CcmFuY2gobmV4dEVsZW1lbnQsIGJyYW5jaEFkZEl0ZW0pO1xuICAgICAgLy8ga2nhu4NtIHRyYSBraOG7kWkgY2hhIGNo4bupYSBjw6FjIGVsZW1lbnQgY8OzIGJyYW5jaCB4ZW0gY8OzIGVsZW1lbnQgbsOgbyBjb3VudCA9IDAgxJHhu4MgcmVzZXQgbmV4dF9pZCA9ICcnIGPhu6dhIGto4buRaSDEkcOzXG4gICAgICBjb25zdCBkYXRhT2ZFbGVtZW50TmV4dFRvSWQgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgZWxlbWVudE5leHRUb0lkLm5leHRfaWQsIGRhdGFPZkVsZW1lbnROZXh0VG9JZCwgdGhpcy5GbGF0RWxlbWVudHMgYXMgSURpYWdyYW1FbGVtZW50W10pO1xuICAgICAgaWYgKCFkYXRhT2ZFbGVtZW50TmV4dFRvSWQuY291bnQpIHtcbiAgICAgICAgZWxlbWVudE5leHRUb0lkLm5leHRfaWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50TmV4dFRvSWQubmV4dF9pZCA9ICcnO1xuICAgIGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLm5leHRfaWQgPSAnJztcbiAgICBjb25zdCBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkID0gdGhpcy5kZWxldGVFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgIGlmIChkYXRhRWxlbWVudEhhc0N1cnJlbnRCcmFuY2guYnJhbmNoQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNsb25lRWxlbWVudEFuZEFkZEVsZW1lbnRFWGl0VG9CcmFuY2goZWxlbWVudEhhc0N1cnJlbnRCcmFuY2gsIGRhdGFFbGVtZW50SGFzQ3VycmVudEJyYW5jaC5icmFuY2hDb250YWluZXIsIG5leHRFbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGJyYW5jaEFkZEl0ZW0gJiYgYnJhbmNoQWRkSXRlbSAhPT0gZGF0YUVsZW1lbnRIYXNDdXJyZW50QnJhbmNoLmJyYW5jaENvbnRhaW5lcikge1xuICAgICAgdGhpcy5jbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnROZXh0VG9JZCwgYnJhbmNoQWRkSXRlbSwgbmV4dEVsZW1lbnQpOyAvLyBkw7JuZyBuw6B5IHPhur0ga2jhu59pIHThuqFvIGzhuqFpIG5leHRfaWQgY+G7p2Ega2jhu5FpIGNoYVxuICAgIH1cblxuICAgIGlmICghZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8ga2nhu4NtIHRyYSBraOG7kWkgY2hhIGNo4bupYSBjw6FjIGVsZW1lbnQgY8OzIGJyYW5jaCB4ZW0gY8OzIGVsZW1lbnQgbsOgbyBjb3VudCA9IDAgxJHhu4MgcmVzZXQgbmV4dF9pZCA9ICcnIGPhu6dhIGto4buRaSDEkcOzXG4gICAgZGF0YUZpc3RFbGVtZW50ID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTtcbiAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoQ29udGFpbmVyQW5kQ291bnRFbGVtZW50SGFzTmV4dElkVG9FbGVtZW50KGVsZW1lbnROZXh0VG9JZCwgbmV4dEVsZW1lbnQuaWQgYXMgc3RyaW5nLCBkYXRhRmlzdEVsZW1lbnQsIHRoaXMuRmxhdEVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcbiAgICBpZiAoIWRhdGFGaXN0RWxlbWVudC5jb3VudCkge1xuICAgICAgLy8gbuG6v3Uga2jhu5FpIGNoYSBraeG7g20gdHJhIGto4buRaSBjaGEgY2jhu6lhIGPDoWMgZWxlbWVudCBjw7MgYnJhbmNoIGPDsyBjb3VudCA9IDAgdGjDrCByZXNldCBuZXh0X2lkID0gJydcbiAgICAgIGVsZW1lbnROZXh0VG9JZC5uZXh0X2lkID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IG5ld0lkID0gZWxlbWVudEhhc0JyYW5jaGVzTm90UmVzZXRJZFswXS5lbGVtZW50Lm5leHRfaWQ7XG5cbiAgICBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLmVsZW1lbnQubmV4dF9pZCA9IG5ld0lkKSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVFbGVtZW50c1RvQnJhbmNoKGVsZW1lbnRTdGFydDogSURpYWdyYW1FbGVtZW50LCBicmFuY2hDb250YWluZXI6IElEaWFncmFtRWxlbWVudEJyYW5jaCkge1xuICAgIGlmICghZWxlbWVudFN0YXJ0IHx8IGVsZW1lbnRTdGFydC5jb2RlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUIHx8ICFicmFuY2hDb250YWluZXIgfHwgIWJyYW5jaENvbnRhaW5lci5lbGVtZW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRDb250YWluZXJIYXNFbGVtZW50U3RhcnQoZWxlbWVudFN0YXJ0LCB0aGlzLkVsZW1lbnRzIGFzIElEaWFncmFtRWxlbWVudFtdKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgY29udGFpbmVyLCBpbmRleCB9ID0gcmVzdWx0O1xuICAgIGNvbnN0IGVsZW1lbnRzSGFzTW92ZTogQXJyYXk8SURpYWdyYW1FbGVtZW50PiA9IGNvbnRhaW5lci5zbGljZShOdW1iZXIoaW5kZXgpKTtcbiAgICBjb25zdCBlbGVtZW50c09mQnJhbmNoQ29udGFpbmVyID0gYnJhbmNoQ29udGFpbmVyLmVsZW1lbnRzO1xuICAgIGNvbnN0IGxhc3RFbGVtZW50T2ZCcmFuY2hDb250YWluZXIgPSBlbGVtZW50c09mQnJhbmNoQ29udGFpbmVyW2VsZW1lbnRzT2ZCcmFuY2hDb250YWluZXIubGVuZ3RoIC0gMV07XG5cbiAgICBlbGVtZW50c0hhc01vdmUuZm9yRWFjaCgoZWxlbWVudCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnQsIHRydWUpKTtcbiAgICBpZiAobGFzdEVsZW1lbnRPZkJyYW5jaENvbnRhaW5lciAmJiBsYXN0RWxlbWVudE9mQnJhbmNoQ29udGFpbmVyLmNvZGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIGxhc3RFbGVtZW50T2ZCcmFuY2hDb250YWluZXIubmV4dF9pZCA9IGVsZW1lbnRTdGFydC5pZDtcbiAgICAgIGVsZW1lbnRTdGFydC5wcmVfaWQgPSBsYXN0RWxlbWVudE9mQnJhbmNoQ29udGFpbmVyLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RFbGVtZW50TW92ZSA9IGVsZW1lbnRzSGFzTW92ZVtlbGVtZW50c0hhc01vdmUubGVuZ3RoIC0gMV07XG4gICAgbGV0IG5leHRFbGVtZW50ID0gZWxlbWVudFN0YXJ0O1xuXG4gICAgaWYgKGxhc3RFbGVtZW50TW92ZSAmJiBsYXN0RWxlbWVudE1vdmUubmV4dF9pZCkge1xuICAgICAgbmV4dEVsZW1lbnQgPSB0aGlzLkZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGFzdEVsZW1lbnRNb3ZlLm5leHRfaWQpIGFzIElEaWFncmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVFbGVtZW50U3RhcnQ6IElEaWFncmFtRWxlbWVudCA9IGNvbnRhaW5lcltOdW1iZXIoaW5kZXgpIC0gMV07XG5cbiAgICBicmFuY2hDb250YWluZXIuZWxlbWVudHMucHVzaCguLi5lbGVtZW50c0hhc01vdmUpO1xuICAgIGlmICghcHJlRWxlbWVudFN0YXJ0IHx8IHByZUVsZW1lbnRTdGFydC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgdGhpcy51cGRhdGVOZXh0SWRPZkNoaWxkRWxlbWVudEluRWxlbWVudFdvcmtmbG93KHByZUVsZW1lbnRTdGFydCwgbmV4dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZENvbnRhaW5lckhhc0VsZW1lbnRTdGFydChlbGVtZW50U3RhcnQ6IElEaWFncmFtRWxlbWVudCwgY29udGFpbmVyQ2FwYWNpdHk6IEFycmF5PElEaWFncmFtRWxlbWVudD4pOiB7IGVsZW1lbnRTdGFydDogSURpYWdyYW1FbGVtZW50OyBpbmRleDogc3RyaW5nOyBjb250YWluZXI6IEFycmF5PElEaWFncmFtRWxlbWVudD4gfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFjb250YWluZXJDYXBhY2l0eSB8fCAhY29udGFpbmVyQ2FwYWNpdHkubGVuZ3RoIHx8ICFlbGVtZW50U3RhcnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5kZXggaW4gY29udGFpbmVyQ2FwYWNpdHkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXJDYXBhY2l0eVtpbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50LmlkID09PSBlbGVtZW50U3RhcnQuaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50U3RhcnQ6IGVsZW1lbnRTdGFydCxcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXJDYXBhY2l0eSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBicmFuY2hlcyA9IGVsZW1lbnQuYnJhbmNoZXM7XG5cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZENvbnRhaW5lckhhc0VsZW1lbnRTdGFydChlbGVtZW50U3RhcnQsIGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KGVsZW1lbnREZWxldGU6IElEaWFncmFtRWxlbWVudCwgaWdub3JlVXBkYXRlUHJlSWQ/OiBib29sZWFuKTogQXJyYXk8eyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGRhdGE6IElCcmFuY2hFbmRDb3VudCB9PiB7XG4gICAgaWYgKCFlbGVtZW50RGVsZXRlIHx8ICFlbGVtZW50RGVsZXRlLmlkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQgPSBuZXcgQXJyYXk8eyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGRhdGE6IElCcmFuY2hFbmRDb3VudCB9PigpO1xuICAgIGNvbnN0IGZsYXRFbGVtZW50cyA9IHRoaXMuRmxhdEVsZW1lbnRzO1xuICAgIGNvbnN0IGVsZW1lbnRzSGFzTmV4dElkVG9FbGVtZW50RGVsZXRlID0gZmxhdEVsZW1lbnRzPy5maWx0ZXIoKGVsKSA9PiBlbC5uZXh0X2lkID09PSBlbGVtZW50RGVsZXRlLmlkKTtcbiAgICBjb25zdCBlbGVtZW50SGFzUHJlSWRUb0VsZW1lbnREZWxldGUgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5wcmVfaWQgPT09IGVsZW1lbnREZWxldGUuaWQgJiYgZWwuaWQgPT09IGVsZW1lbnREZWxldGUubmV4dF9pZCk7XG5cbiAgICBpZiAoIWlnbm9yZVVwZGF0ZVByZUlkICYmIGVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSkge1xuICAgICAgZWxlbWVudEhhc1ByZUlkVG9FbGVtZW50RGVsZXRlLnByZV9pZCA9IGVsZW1lbnREZWxldGUucHJlX2lkO1xuICAgIH1cbiAgICBlbGVtZW50c0hhc05leHRJZFRvRWxlbWVudERlbGV0ZT8uZm9yRWFjaCgoZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZSkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSkge1xuICAgICAgICBlbGVtZW50SGFzTmV4dElkVG9FbGVtZW50RGVsZXRlLm5leHRfaWQgPSBlbGVtZW50SGFzUHJlSWRUb0VsZW1lbnREZWxldGUuaWQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnREZWxldGUuY29kZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgICBpZiAoIWVsZW1lbnRIYXNQcmVJZFRvRWxlbWVudERlbGV0ZSAmJiBlbGVtZW50RGVsZXRlLm5leHRfaWQpIHtcbiAgICAgICAgICAvLyBGaXhidWc6IDE1NjIzXG4gICAgICAgICAgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5uZXh0X2lkID0gZWxlbWVudERlbGV0ZS5uZXh0X2lkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUuYnJhbmNoZXMgJiYgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk7XG5cbiAgICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChlbGVtZW50SGFzTmV4dElkVG9FbGVtZW50RGVsZXRlLCBlbGVtZW50RGVsZXRlLmlkIGFzIHN0cmluZywgZGF0YSwgdGhpcy5GbGF0RWxlbWVudHMgYXMgQXJyYXk8SURpYWdyYW1FbGVtZW50Pik7XG4gICAgICAgIGlmICghZGF0YS5jb3VudCkge1xuICAgICAgICAgIGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUubmV4dF9pZCA9ICcnO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRIYXNCcmFuY2hlc05vdFJlc2V0SWQucHVzaCh7IGVsZW1lbnQ6IGVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnREZWxldGUsIGRhdGEgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudEhhc05leHRJZFRvRWxlbWVudERlbGV0ZS5uZXh0X2lkID0gZWxlbWVudERlbGV0ZS5uZXh0X2lkO1xuICAgIH0pO1xuICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5maW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIodGhpcy5FbGVtZW50cyBhcyBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlKTtcblxuICAgIHJldHVybiBlbGVtZW50SGFzQnJhbmNoZXNOb3RSZXNldElkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZUVsZW1lbnRBbmRBZGRFbGVtZW50RVhpdFRvQnJhbmNoKGVsZW1lbnRIYXNDdXJyZW50QnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBkYXRhRHJvcDogSURpYWdyYW1FbGVtZW50KSB7XG4gICAgaWYgKCFkYXRhRHJvcCB8fCAhZWxlbWVudEhhc0N1cnJlbnRCcmFuY2ggfHwgIWJyYW5jaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbGVtZW50RHJvcDogSURpYWdyYW1FbGVtZW50ID0gZWxlbWVudEhhc0N1cnJlbnRCcmFuY2g7XG5cbiAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGVsZW1lbnREcm9wID0gYnJhbmNoLmVsZW1lbnRzW2JyYW5jaC5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50VG9CcmFuY2goZWxlbWVudERyb3AsIGJyYW5jaCwgY2xvbmVEZWVwKGRhdGFEcm9wKSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVsZW1lbnRFeGl0V29ya0Zsb3cobmV3RWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBudW1iZXJCcmFuY2g/OiBudW1iZXIpIHtcbiAgICBjb25zdCBleGl0ID0ge1xuICAgICAgZWxlbWVudF90eXBlOiBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElULFxuICAgICAgY29kZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdpMThuX2VuZF9qb3VybmV5X25ldycpLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgaWYgKG5ld0VsZW1lbnQuYnJhbmNoZXMgJiYgbmV3RWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgIG5ld0VsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBudW1iZXJCcmFuY2gpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXdFbGVtZW50LmJyYW5jaGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChuZXdFbGVtZW50LCBpdGVtLCBleGl0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFbGVtZW50RXhpdFdoZW5EZWxldGVEaXJlY3Rpb25MaW5lKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBleGl0ID0ge1xuICAgICAgZWxlbWVudF90eXBlOiBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElULFxuICAgICAgY29kZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdpMThuX2VuZF9qb3VybmV5X25ldycpLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgZGVsZXRlIGVsZW1lbnQubm9kZU90aGVyQ29uZmlnO1xuICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBicmFuY2gsIGV4aXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEtoaSBt4buZdCBlbGVtZW50IGLhu4sgeG/DoSwgaMOgbSBuw6B5IHPhur0gdOG7sSDEkeG7mW5nIHRow6ptIGV4aXQgY2hvIHThuqV0IGPhuqMgY8OhYyBlbGVtZW50IHBow61hIHRyxrDhu5tjIMSRYW5nIHRy4buPIHThu5tpIGVsZW1lbnQgxJHDsy5cbiAgICovXG4gIHB1YmxpYyBhZGRFbGVtZW50RXhpdEZvckFsbEVsZW1lbnRQcmV2aW91c1doZW5FbGVtZW50RGVsZXRlKGVsZW1lbnRzRGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIGNvbnN0IGZsYXRFbGVtZW50ID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzSW5FbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnRbXSA9IFtdO1xuXG4gICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmJ1aWxkRmxhdEVsZW1lbnQoZWxlbWVudHNEZWxldGUsIGZsYXRFbGVtZW50c0luRWxlbWVudERlbGV0ZSk7XG5cbiAgICBmbGF0RWxlbWVudHNJbkVsZW1lbnREZWxldGUuZm9yRWFjaCgoZWxlbWVudERlbCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnREZWwucHJlX290aGVyX2lkICYmIGVsZW1lbnREZWwucHJlX290aGVyX2lkLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50RGVsLnByZV9vdGhlcl9pZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZsYXRFbGVtZW50Py5maW5kKChlbCkgPT4gZWwuaWQgPT09IGl0ZW0pO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cgJiYgZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkIHx8ICFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhFbCA9IGJyYW5jaC5uZXh0X290aGVyX2lkLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBlbGVtZW50RGVsLmlkKTtcblxuICAgICAgICAgICAgICBpZiAoaW5kZXhFbCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5zcGxpY2UoaW5kZXhFbCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRFeGl0V2hlbkRlbGV0ZURpcmVjdGlvbkxpbmUoZWxlbWVudCwgYnJhbmNoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucG9zaXRpb25fZW5kID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5leHRfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5uZXh0X290aGVyX2lkLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBlbGVtZW50RGVsLmlkKTtcblxuICAgICAgICAgIGlmIChpbmRleEVsICE9PSAtMSkge1xuICAgICAgICAgICAgZWxlbWVudC5uZXh0X290aGVyX2lkLnNwbGljZShpbmRleEVsLCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0Q29uZmlnRGVmYXVsdEJyYW5jaGVzID0gdGhpcy5oYW5kbGVyRnVuY3Rpb24/LmdldENvbmZpZ0RlZmF1bHRCcmFuY2hlcyA/PyBnZXREZWZhdWx0Q29uZmlnQ29uc3RpdHVlbnRCcmFuY2hlcztcbiAgICAgICAgICAgICAgZ2V0Q29uZmlnRGVmYXVsdEJyYW5jaGVzKGVsZW1lbnQuY29kZSA/PyAnJywgZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmFuY2ggPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0QnJhbmNoT2ZFbGVtZW50KGVsZW1lbnQuaWQgPz8gJycsIHRoaXMuRmxhdEVsZW1lbnRzLCBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudEV4aXRXaGVuRGVsZXRlRGlyZWN0aW9uTGluZShlbGVtZW50LCBicmFuY2gpO1xuICAgICAgICAgICAgZWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZWxlbWVudC5wb3NpdGlvbl9lbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50RGVsLm5leHRfb3RoZXJfaWQgJiYgZWxlbWVudERlbC5uZXh0X290aGVyX2lkLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50RGVsLm5leHRfb3RoZXJfaWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmbGF0RWxlbWVudD8uZmluZCgoZWwpID0+IGVsLmlkID09PSBpdGVtKTtcblxuICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wcmVfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5wcmVfb3RoZXJfaWQuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGVsZW1lbnREZWwuaWQpO1xuXG4gICAgICAgICAgaWYgKGluZGV4RWwgIT09IC0xKSB7XG4gICAgICAgICAgICBlbGVtZW50LnByZV9vdGhlcl9pZC5zcGxpY2UoaW5kZXhFbCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnREZWwuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyAmJiBlbGVtZW50RGVsLmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudERlbC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkIHx8ICFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmxhdEVsZW1lbnQ/LmZpbmQoKGVsKSA9PiBlbC5pZCA9PT0gaXRlbSk7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wcmVfb3RoZXJfaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRleEVsID0gZWxlbWVudC5wcmVfb3RoZXJfaWQuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IGVsZW1lbnREZWwuaWQpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXhFbCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5wcmVfb3RoZXJfaWQuc3BsaWNlKGluZGV4RWwsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVPckNoYW5nZUVsZW1lbnQoZWxlbWVudFJlbW92ZTogSURpYWdyYW1FbGVtZW50LCBlbGVtZW50Q2hhbmdlOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGJyYW5jaENob29zZT86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudFJlbW92ZSB8fCBlbGVtZW50UmVtb3ZlLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEVsZW1lbnRzID0gdGhpcy5GbGF0RWxlbWVudHM7XG4gICAgY29uc3QgcHJlRWxlbWVudCA9IGZsYXRFbGVtZW50cz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0gZWxlbWVudFJlbW92ZS5wcmVfaWQpO1xuICAgIGNvbnN0IGluZm9PZkVsZW1lbnRSZW1vdmUgPSBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZ2V0RWxlbWVudEhhc0N1cnJlbnRCcmFuY2hPckN1cnJlbnRFbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudFJlbW92ZSwgdGhpcy5GbGF0RWxlbWVudHMpO1xuXG4gICAgY29uc3QgZXhpdCA9IHtcbiAgICAgIGVsZW1lbnRfdHlwZTogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCxcbiAgICAgIGNvZGU6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnaTE4bl9vdXRfam91cm5leScpLFxuICAgICAgaWQ6IGAke3V1aWQoKX1gLFxuICAgICAgc3BlY2lmaWNfd2lkdGg6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxULFxuICAgICAgc3BlY2lmaWNfaGVpZ2h0OiBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQsXG4gICAgICBzcGVjaWZpY194OiAwLFxuICAgICAgc3BlY2lmaWNfeTogMCxcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudE5leHRCZWZvcmVEZWxldGUgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5wcmVfaWQgPT09IGVsZW1lbnRSZW1vdmUuaWQgJiYgZWwuaWQgPT09IGVsZW1lbnRSZW1vdmUubmV4dF9pZCk7XG5cbiAgICBpZiAoZWxlbWVudE5leHRCZWZvcmVEZWxldGUgJiYgZWxlbWVudE5leHRCZWZvcmVEZWxldGUuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkge1xuICAgICAgaWYgKHByZUVsZW1lbnQgJiYgcHJlRWxlbWVudC5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XICYmIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCkge1xuICAgICAgICBpbmZvT2ZFbGVtZW50UmVtb3ZlLmN1cnJlbnRCcmFuY2gubm9kZU90aGVyQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHByZUVsZW1lbnQgJiYgcHJlRWxlbWVudC5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICAgIHByZUVsZW1lbnQubm9kZU90aGVyQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmVFbGVtZW50ICYmICFlbGVtZW50TmV4dEJlZm9yZURlbGV0ZSkge1xuICAgICAgcHJlRWxlbWVudC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlRWxlbWVudCAmJiBwcmVFbGVtZW50LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cgJiYgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoKSB7XG4gICAgICAgIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaC5ub2RlT3RoZXJDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnRSZW1vdmUpO1xuXG4gICAgLy8geMOzYSB0aOG6s25nXG4gICAgaWYgKCFlbGVtZW50Q2hhbmdlKSB7XG4gICAgICBpZiAoIWVsZW1lbnROZXh0QmVmb3JlRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZXhpdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGF5IMSRxqFuID09IMSRxqFuLCB0aGF5IMSRxqFuID0gbmjDoW5oXG4gICAgaWYgKGVsZW1lbnRSZW1vdmUuZWxlbWVudF90eXBlICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgaWYgKCFlbGVtZW50UmVtb3ZlLm5leHRfaWQgJiYgZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICAgIC8vIDQ4MjI5XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZXhpdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGVsZW1lbnRDaGFuZ2UsIGJyYW5jaENob29zZSk7XG4gICAgICBpZiAoZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XICYmIGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlICYmIGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnROZXh0QmVmb3JlRGVsZXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRoYXkgbmjDoW5oID0gxJHGoW5cbiAgICBpZiAoZWxlbWVudENoYW5nZS5lbGVtZW50X3R5cGUgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGV4aXQpO1xuICAgICAgdGhpcy5hZGRFbGVtZW50KHByZUVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBpbmZvT2ZFbGVtZW50UmVtb3ZlLmN1cnJlbnRCcmFuY2ggYXMgSURpYWdyYW1FbGVtZW50QnJhbmNoLCBlbGVtZW50Q2hhbmdlLCBicmFuY2hDaG9vc2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhheSBuaMOhbmggPSBuaMOhbmhcbiAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGV4aXQpO1xuICAgIHRoaXMuYWRkRWxlbWVudChwcmVFbGVtZW50IGFzIElEaWFncmFtRWxlbWVudCwgaW5mb09mRWxlbWVudFJlbW92ZS5jdXJyZW50QnJhbmNoIGFzIElEaWFncmFtRWxlbWVudEJyYW5jaCwgZWxlbWVudENoYW5nZSwgYnJhbmNoQ2hvb3NlKTtcbiAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZXhpdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQ2hhbmdlRWxlbWVudEFuZEluc2VydEJyYW5jaEtlZXAoZWxlbWVudFJlbW92ZTogSURpYWdyYW1FbGVtZW50LCBlbGVtZW50Q2hhbmdlOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGJyYW5jaEtlZXBFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGJyYW5jaENob2ljZT86IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZsYXRFbGVtZW50cyA9IHRoaXMuRmxhdEVsZW1lbnRzO1xuICAgIGNvbnN0IHByZUVsZW1lbnQgPSBmbGF0RWxlbWVudHM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGVsZW1lbnRSZW1vdmUucHJlX2lkKTtcbiAgICBjb25zdCBpbmZvT2ZFbGVtZW50UmVtb3ZlID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnRSZW1vdmUsIHRoaXMuRmxhdEVsZW1lbnRzKTtcblxuICAgIHRoaXMuYWRkQnJhbmNoS2VlcFRvRmxvdyhicmFuY2hLZWVwRWxlbWVudCwgcHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCk7XG4gICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnRSZW1vdmUpO1xuICAgIGlmIChlbGVtZW50Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnQocHJlRWxlbWVudCBhcyBJRGlhZ3JhbUVsZW1lbnQsIGluZm9PZkVsZW1lbnRSZW1vdmUuY3VycmVudEJyYW5jaCBhcyBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGVsZW1lbnRDaGFuZ2UsIGJyYW5jaENob2ljZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRCcmFuY2hLZWVwVG9GbG93KGJyYW5jaEtlZXBFbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGl0ZW1Ecm9wOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaERyb3A6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYnJhbmNoS2VlcEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBicmFuY2hLZWVwRWxlbWVudC5lbGVtZW50cztcbiAgICBjb25zdCBuZXh0Q3VycmVudEl0ZW1Ecm9wID0gZWxlbWVudHNbMF07XG5cbiAgICBpZiAobmV4dEN1cnJlbnRJdGVtRHJvcCkge1xuICAgICAgaWYgKGl0ZW1Ecm9wLmVsZW1lbnRfdHlwZSAhPT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgaXRlbURyb3AubmV4dF9pZCA9IG5leHRDdXJyZW50SXRlbURyb3AgJiYgbmV4dEN1cnJlbnRJdGVtRHJvcC5pZDtcbiAgICAgIH1cbiAgICAgIG5leHRDdXJyZW50SXRlbURyb3AucHJlX2lkID0gaXRlbURyb3AuaWQ7XG4gICAgfVxuICAgIGlmIChicmFuY2hEcm9wKSB7XG4gICAgICBicmFuY2hEcm9wLmVsZW1lbnRzLnB1c2goLi4uZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuRWxlbWVudHMucHVzaCguLi5lbGVtZW50cyk7XG4gIH1cbn1cbiJdfQ==
@@ -2208,7 +2208,7 @@ class LibsUiDiagramDrawCanvasService {
2208
2208
  let counter = 0;
2209
2209
  const elementsOfCodeDataDrop = this.FlatElements?.filter((element) => element.code === dataDrop.code);
2210
2210
  if (elementsOfCodeDataDrop && elementsOfCodeDataDrop.length) {
2211
- counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl))
2211
+ counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl), elementsOfCodeDataDrop[0])
2212
2212
  .specific_counter_current_code;
2213
2213
  }
2214
2214
  counter++;