angular-three 1.6.3 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -246,7 +246,7 @@ export function createEvents(store) {
246
246
  case 'lostpointercapture':
247
247
  return (event) => {
248
248
  const { internal } = store.get();
249
- if ('pointerId' in event && !internal.capturedMap.has(event.pointerId)) {
249
+ if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
250
250
  // If the object event interface had onLostPointerCapture, we'd call it here on every
251
251
  // object that's getting removed.
252
252
  internal.capturedMap.delete(event.pointerId);
@@ -339,4 +339,4 @@ export function createEvents(store) {
339
339
  }
340
340
  return { handlePointer };
341
341
  }
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsNkJBQTZCLENBQ2xDLFdBQXNFLEVBQ3RFLEdBQW1CLEVBQ25CLFFBQXNELEVBQ3RELFNBQWlCO0lBRWpCLE1BQU0sV0FBVyxHQUF3QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxFQUFFO1FBQ2IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7S0FDSjtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBMkIsRUFBRSxNQUFzQjtJQUNuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLG1EQUFtRDtJQUNuRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxF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LENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNsRixDQUFDOzRCQUNGLHVCQUF1Qjs0QkFDdkIsT0FBTyxDQUFDLElBQW1DLENBQUMsQ0FBQzt5QkFDaEQ7cUJBQ0o7eUJBQU07d0JBQ0gsNkdBQTZHO3dCQUM3RyxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTs0QkFDNUQsYUFBYSxDQUNULEtBQUssRUFDTCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNsRixDQUFDO3lCQUNMO3FCQUNKO2lCQUNKO1lBQ0wsQ0FBQztZQUVELGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0UnhTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3J4LXN0b3JlJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3REb21FdmVudCxcbiAgICBOZ3RFdmVudEhhbmRsZXJzLFxuICAgIE5ndEludGVyc2VjdGlvbixcbiAgICBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCxcbiAgICBOZ3RTdGF0ZSxcbiAgICBOZ3RUaHJlZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IG1ha2VJZCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5cbmZ1bmN0aW9uIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKFxuICAgIGNhcHR1cmVkTWFwOiBNYXA8bnVtYmVyLCBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pj4sXG4gICAgb2JqOiBUSFJFRS5PYmplY3QzRCxcbiAgICBjYXB0dXJlczogTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4sXG4gICAgcG9pbnRlcklkOiBudW1iZXJcbik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVEYXRhOiBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB8IHVuZGVmaW5lZCA9IGNhcHR1cmVzLmdldChvYmopO1xuICAgIGlmIChjYXB0dXJlRGF0YSkge1xuICAgICAgICBjYXB0dXJlcy5kZWxldGUob2JqKTtcbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgdGhlIGxhc3QgY2FwdHVyZWQgb2JqZWN0IGZvciB0aGlzIHBvaW50ZXJcbiAgICAgICAgaWYgKGNhcHR1cmVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGNhcHR1cmVkTWFwLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICAgICAgY2FwdHVyZURhdGEudGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShwb2ludGVySWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW50ZXJhY3Rpdml0eShzdG9yZTogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4sIG9iamVjdDogVEhSRUUuT2JqZWN0M0QpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcm5hbCA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKTtcbiAgICAvLyByZW1vdmVzIGV2ZXJ5IHRyYWNlIG9mIGFuIG9iamVjdCBmcm9tIGRhdGEgc3RvcmVcbiAgICBpbnRlcm5hbC5pbnRlcmFjdGlvbiA9IGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KTtcbiAgICBpbnRlcm5hbC5pbml0aWFsSGl0cyA9IGludGVybmFsLmluaXRpYWxIaXRzLmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KTtcbiAgICBpbnRlcm5hbC5ob3ZlcmVkLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmV2ZW50T2JqZWN0ID09PSBvYmplY3QgfHwgdmFsdWUub2JqZWN0ID09PSBvYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIG91dCBpbnRlcnNlY3RzLCB0aGV5IGFyZSBvdXRkYXRlZCBieSBub3dcbiAgICAgICAgICAgIGludGVybmFsLmhvdmVyZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5mb3JFYWNoKChjYXB0dXJlcywgcG9pbnRlcklkKSA9PiB7XG4gICAgICAgIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKGludGVybmFsLmNhcHR1cmVkTWFwLCBvYmplY3QsIGNhcHR1cmVzLCBwb2ludGVySWQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0b3JlLmdldCgncHJldmlvdXNTdG9yZScpKSB7XG4gICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmUuZ2V0KCdwcmV2aW91c1N0b3JlJykhLCBvYmplY3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50cyhzdG9yZTogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4pIHtcbiAgICAvKiogY2FsY3VsYXRlcyBkZWx0YSAqKi9cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG4gICAgICAgIGNvbnN0IGR4ID0gZXZlbnQub2Zmc2V0WCAtIGludGVybmFsLmluaXRpYWxDbGlja1swXTtcbiAgICAgICAgY29uc3QgZHkgPSBldmVudC5vZmZzZXRZIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzFdO1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpKTtcbiAgICB9XG5cbiAgICAvKiogcmV0dXJucyB0cnVlIGlmIGFuIGluc3RhbmNlIGhhcyBhIHZhbGlkIHBvaW50ZXItZXZlbnQgcmVnaXN0ZXJlZCwgdGhpcyBleGNsdWRlcyBzY3JvbGwsIGNsaWNrcyBldGMuLi4gKiovXG4gICAgZnVuY3Rpb24gZmlsdGVyUG9pbnRlckV2ZW50cyhvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RzLmZpbHRlcigob2JqKSA9PlxuICAgICAgICAgICAgWydtb3ZlJywgJ292ZXInLCAnZW50ZXInLCAnb3V0JywgJ2xlYXZlJ10uc29tZSgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGBwb2ludGVyJHtuYW1lfWAgYXMga2V5b2YgTmd0RXZlbnRIYW5kbGVycztcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TG9jYWxTdGF0ZShvYmopLmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW50ZXJzZWN0KGV2ZW50OiBOZ3REb21FdmVudCwgZmlsdGVyPzogKG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pID0+IFRIUkVFLk9iamVjdDNEW10pIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSA9IFtdO1xuICAgICAgICAvLyBhbGxvdyBjYWxsZXJzIHRvIGVsaW1pbmF0ZSBldmVudCBvYmplY3RzXG4gICAgICAgIGNvbnN0IGV2ZW50T2JqZWN0cyA9IGZpbHRlciA/IGZpbHRlcihzdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbikgOiBzdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbjtcbiAgICAgICAgLy8gcmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50T2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VTdGF0ZSA9IGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3RzW2ldKS5zdG9yZT8uZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9IHVuZGVmaW5lZCE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLnByZXZpb3VzU3RvcmUpIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSByb290LWxldmVsIHBvaW50ZXIgYW5kIHJheSBhcmUgc2V0dXBcbiAgICAgICAgICAgIHN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIHN0b3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJheWNhc3Qob2JqOiBUSFJFRS5PYmplY3QzRDxUSFJFRS5FdmVudD4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9iakxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iaik7XG4gICAgICAgICAgICBjb25zdCBvYmpTdG9yZSA9IG9iakxvY2FsU3RhdGUuc3RvcmU7XG4gICAgICAgICAgICBjb25zdCBvYmpTdGF0ZSA9IG9ialN0b3JlPy5nZXQoKTtcbiAgICAgICAgICAgIC8vIHNraXAgZXZlbnQgaGFuZGxpbmcgd2hlbiBub0V2ZW50cyBpcyBzZXQsIG9yIHdoZW4gcmF5Y2FzdGVyIGNhbWVyYSBpcyBudWxsXG4gICAgICAgICAgICBpZiAoIW9ialN0YXRlIHx8ICFvYmpTdGF0ZS5ldmVudHMuZW5hYmxlZCB8fCBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSBudWxsKSByZXR1cm4gW107XG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgdW5kZWZpbmVkLCB3ZSBoYXZlIHRvIGNhbGwgdGhlIGV2ZW50cyBsYXllcnMgdG8gdXBkYXRlIGZ1bmN0aW9uXG4gICAgICAgICAgICBpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb2JqU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgb2JqU3RvcmUsIG9ialN0YXRlLnByZXZpb3VzU3RvcmUpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjYW1lcmEgaXMgc3RpbGwgdW5kZWZpbmVkLCB3ZSBoYXZlIHRvIHNraXAgdGhpcyBsYXllciBlbnRpcmVseVxuICAgICAgICAgICAgICAgIGlmIChvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSB1bmRlZmluZWQpIG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSBudWxsITtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW50ZXJzZWN0IG9iamVjdCBieSBvYmplY3RcbiAgICAgICAgICAgIHJldHVybiBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID8gb2JqU3RhdGUucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChvYmosIHRydWUpIDogW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb2xsZWN0IGV2ZW50c1xuICAgICAgICBsZXQgaGl0czogVEhSRUUuSW50ZXJzZWN0aW9uPFRIUkVFLk9iamVjdDNEPFRIUkVFLkV2ZW50Pj5bXSA9IGV2ZW50T2JqZWN0c1xuICAgICAgICAgICAgLy8gaW50ZXJzZWN0IG9iamVjdHNcbiAgICAgICAgICAgIC5mbGF0TWFwKGhhbmRsZVJheWNhc3QpXG4gICAgICAgICAgICAvLyBzb3J0IGJ5IGV2ZW50IHByaW9yaXR5XG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFTdGF0ZSA9IGdldExvY2FsU3RhdGUoYS5vYmplY3QpLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJTdGF0ZSA9IGdldExvY2FsU3RhdGUoYi5vYmplY3QpLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgIGlmICghYVN0YXRlIHx8ICFiU3RhdGUpIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYlN0YXRlLmV2ZW50cy5wcmlvcml0eSAtIGFTdGF0ZS5ldmVudHMucHJpb3JpdHkgfHwgYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBkdXBsaWNhdGVzXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBtYWtlSWQoaXRlbSBhcyBOZ3RJbnRlcnNlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGVzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGVzLmFkZChpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBhbGxvdyBjdXN0b20gdXNlcmxhbmQgaW50ZXJzZWN0IHNvcnQgb3JkZXIsIHRoaXMgbGlrZWx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gdGhlIHJvb3RcbiAgICAgICAgaWYgKHN0YXRlLmV2ZW50cy5maWx0ZXIpIGhpdHMgPSBzdGF0ZS5ldmVudHMuZmlsdGVyKGhpdHMsIHN0b3JlKTtcblxuICAgICAgICAvLyBidWJibGUgdXAgdGhlIGV2ZW50cywgZmluZCB0aGUgZXZlbnQgc291cmNlXG4gICAgICAgIGZvciAoY29uc3QgaGl0IG9mIGhpdHMpIHtcbiAgICAgICAgICAgIGxldCBldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0QgfCBudWxsID0gaGl0Lm9iamVjdDtcbiAgICAgICAgICAgIC8vIGJ1YmJsZSBldmVudCB1cFxuICAgICAgICAgICAgd2hpbGUgKGV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3QpLmV2ZW50Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKHsgLi4uaGl0LCBldmVudE9iamVjdCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnRPYmplY3QgPSBldmVudE9iamVjdC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgaW50ZXJhY3Rpb24gaXMgY2FwdHVyZWQsIG1ha2UgYWxsIGNhcHR1cmluZyB0YXJnZXRzIHBhcnQgb2YgdGhlIGludGVyc2VjdHNcbiAgICAgICAgaWYgKCdwb2ludGVySWQnIGluIGV2ZW50ICYmIHN0YXRlLmludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhldmVudC5wb2ludGVySWQpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcHR1cmVkRGF0YSBvZiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKSEudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZXMuaGFzKG1ha2VJZChjYXB0dXJlZERhdGEuaW50ZXJzZWN0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGNhcHR1cmVkRGF0YS5pbnRlcnNlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbiAgICB9XG5cbiAgICAvKiogaGFuZGxlIGludGVyc2VjdGlvbnMgYnkgZm9yd2FyZGluZyB0aGVtIHRvIGhhbmRsZXJzICovXG4gICAgZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0cyhcbiAgICAgICAgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10sXG4gICAgICAgIGV2ZW50OiBOZ3REb21FdmVudCxcbiAgICAgICAgZGVsdGE6IG51bWJlcixcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4pID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgY29uc3Qgcm9vdFN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIC8vIGlmIGFueXRoaW5nIGhhcyBiZWVuIGZvdW5kLCBmb3J3YXJkIGl0IHRvIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0geyBzdG9wcGVkOiBmYWxzZSB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhpdCBvZiBpbnRlcnNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGhpdC5vYmplY3QpLnN0b3JlPy5nZXQoKSB8fCByb290U3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByYXljYXN0ZXIsIHBvaW50ZXIsIGNhbWVyYSwgaW50ZXJuYWwgfSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVucHJvamVjdGVkUG9pbnQgPSBuZXcgVEhSRUUuVmVjdG9yMyhwb2ludGVyLngsIHBvaW50ZXIueSwgMCkudW5wcm9qZWN0KGNhbWVyYSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKT8uaGFzKGhpdC5ldmVudE9iamVjdCkgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZXRQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVEYXRhID0geyBpbnRlcnNlY3Rpb246IGhpdCwgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRWxlbWVudCB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgYWRkIHRoZSBoaXQgdG8gdGhlIGV2ZW50IGNhcHR1cmVkTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpIS5zZXQoaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcG9pbnRlcklkIHdhcyBub3QgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgY3JlYXRlIGEgTWFwIGNvbnRhaW5pbmcgdGhlIGhpdE9iamVjdCwgYW5kIHRoZSBoaXQuIGhpdE9iamVjdCBpcyB1c2VkIGZvciBmYXN0ZXIgYWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5zZXQoaWQsIG5ldyBNYXAoW1toaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVEYXRhXV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsIHRoZSBvcmlnaW5hbCBldmVudCBub3dcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShpZCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVzID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlcywgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBuYXRpdmUgZXZlbnQgcHJvcHNcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYWN0RXZlbnRQcm9wczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpdGVyYXRlcyBvdmVyIHRoZSBldmVudCdzIHByb3BlcnRpZXMgaW5jbHVkaW5nIHRoZSBpbmhlcml0ZWQgb25lcy4gTmF0aXZlIFBvaW50ZXJFdmVudHMgaGF2ZSBtb3N0IG9mIHRoZWlyIHByb3BzIGFzIGdldHRlcnMgd2hpY2ggYXJlIGluaGVyaXRlZCwgYnV0IHBvbHlmaWxsZWQgUG9pbnRlckV2ZW50cyBoYXZlIHRoZW0gYWxsIGFzIHRoZWlyIG93biBwcm9wZXJ0aWVzIChpLmUuIG5vdCBpbmhlcml0ZWQpLiBXZSBjYW4ndCB1c2UgT2JqZWN0LmtleXMoKSBvciBPYmplY3QuZW50cmllcygpIGFzIHRoZXkgb25seSByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzOyBub3IgT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSBhcyB0aGF0ICpkb2Vzbid0KiByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzLCBvbmx5IGluaGVyaXRlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGV2ZW50W3Byb3AgYXMga2V5b2YgTmd0RG9tRXZlbnRdO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNvcHkgb3ZlciBhdG9taWNzLCBsZWF2ZSBmdW5jdGlvbnMgYWxvbmUgYXMgdGhlc2Ugc2hvdWxkIGJlIGNhbGxlZCBhcyBldmVudC5uYXRpdmVFdmVudC5mbigpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RFdmVudFByb3BzW3Byb3BdID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByYXljYXN0RXZlbnQ6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5oaXQsXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4dHJhY3RFdmVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBzdG9wcGVkOiBsb2NhbFN0YXRlLnN0b3BwZWQsXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhLFxuICAgICAgICAgICAgICAgICAgICB1bnByb2plY3RlZFBvaW50LFxuICAgICAgICAgICAgICAgICAgICByYXk6IHJheWNhc3Rlci5yYXksXG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYTogY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICAvLyBIaWphY2sgc3RvcFByb3BhZ2F0aW9uLCB3aGljaCBqdXN0IHNldHMgYSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvaXNzdWVzLzU5NlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbnRzIGFyZSBub3QgYWxsb3dlZCB0byBzdG9wIHByb3BhZ2F0aW9uIGlmIHRoZSBwb2ludGVyIGhhcyBiZWVuIGNhcHR1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlc0ZvclBvaW50ZXIgPSAncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhdXRob3JpemUgc3RvcFByb3BhZ2F0aW9uLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaWYgdGhpcyBwb2ludGVyIGhhc24ndCBiZWVuIGNhcHR1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNhcHR1cmVzRm9yUG9pbnRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLiBvciBpZiB0aGUgaGl0IG9iamVjdCBpcyBjYXB0dXJpbmcgdGhlIHBvaW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlc0ZvclBvaW50ZXIuaGFzKGhpdC5ldmVudE9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJheWNhc3RFdmVudC5zdG9wcGVkID0gbG9jYWxTdGF0ZS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGlvbiBpcyBzdG9wcGVkLCByZW1vdmUgYWxsIG90aGVyIGhvdmVyIHJlY29yZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBldmVudCBoYW5kbGVyIGlzIG9ubHkgYWxsb3dlZCB0byBmbHVzaCBvdGhlciBoYW5kbGVycyBpZiBpdCBpcyBob3ZlcmVkIGl0c2VsZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zaXplICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkuZmluZCgoaSkgPT4gaS5ldmVudE9iamVjdCA9PT0gaGl0LmV2ZW50T2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RzIGNhbm5vdCBmbHVzaCBvdXQgaGlnaGVyIHVwIG9iamVjdHMgdGhhdCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoZSBldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXIgPSBpbnRlcnNlY3Rpb25zLnNsaWNlKDAsIGludGVyc2VjdGlvbnMuaW5kZXhPZihoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUG9pbnRlcihbLi4uaGlnaGVyLCBoaXRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiB7IGhhc1BvaW50ZXJDYXB0dXJlLCBzZXRQb2ludGVyQ2FwdHVyZSwgcmVsZWFzZVBvaW50ZXJDYXB0dXJlIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJheWNhc3RFdmVudCk7XG4gICAgICAgICAgICAgICAgLy8gZXZlbnQgYnViYmxpbmcgbWF5IGJlIGludGVydXB0ZWQgYnkgc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUuc3RvcHBlZCA9PT0gdHJ1ZSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsUG9pbnRlcihpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSkge1xuICAgICAgICBjb25zdCB7IGludGVybmFsIH0gPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBob3ZlcmVkT2JqIG9mIGludGVybmFsLmhvdmVyZWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gbm8gb2JqZWN0cyB3ZXJlIGhpdCBvciB0aGUgaG92ZXJlZCBvYmplY3Qgd2Fzbid0IGZvdW5kIHVuZGVybmVhdGggdGhlIGN1cnNvclxuICAgICAgICAgICAgLy8gd2UgY2FsbCBvblBvaW50ZXJPdXQgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGhvdmVyZWQtZWxlbWVudHMgbWFwXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWludGVyc2VjdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgIWludGVyc2VjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGhpdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdC5vYmplY3QgPT09IGhvdmVyZWRPYmoub2JqZWN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQuaW5kZXggPT09IGhvdmVyZWRPYmouaW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdC5pbnN0YW5jZUlkID09PSBob3ZlcmVkT2JqLmluc3RhbmNlSWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE9iamVjdCA9IGhvdmVyZWRPYmouZXZlbnRPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IGluc3RhbmNlPy5oYW5kbGVycztcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShtYWtlSWQoaG92ZXJlZE9iaikpO1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZT8uZXZlbnRDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyZWRPYmosIGludGVyc2VjdGlvbnMgfTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM/LnBvaW50ZXJvdXQ/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVybGVhdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnRlck1pc3NlZChldmVudDogTW91c2VFdmVudCwgb2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3RzW2ldKTtcbiAgICAgICAgICAgIGluc3RhbmNlPy5oYW5kbGVycy5wb2ludGVybWlzc2VkPy4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUG9pbnRlcihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gRGVhbCB3aXRoIGNhbmNlbGF0aW9uXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSAncG9pbnRlcmxlYXZlJzpcbiAgICAgICAgICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChldmVudDogTmd0RG9tRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiAhaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXZlbnQgaW50ZXJmYWNlIGhhZCBvbkxvc3RQb2ludGVyQ2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZGVsZXRlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb25Qb2ludGVyTWlzc2VkLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmVSYXkoZXZlbnQpXG4gICAgICAgICAgICBpbnRlcm5hbC5sYXN0RXZlbnQgPSBldmVudDtcblxuICAgICAgICAgICAgLy8gR2V0IGZyZXNoIGludGVyc2VjdHNcbiAgICAgICAgICAgIGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuICAgICAgICAgICAgY29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhpdHMgPSBwYXRjaEludGVyc2VjdHMoaW50ZXJzZWN0KGZpbHRlciksIGV2ZW50KVxuICAgICAgICAgICAgY29uc3QgaGl0cyA9IGludGVyc2VjdChldmVudCwgZmlsdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gaXNDbGlja0V2ZW50ID8gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQpIDogMDtcblxuICAgICAgICAgICAgLy8gU2F2ZSBpbml0aWFsIGNvb3JkaW5hdGVzIG9uIHBvaW50ZXItZG93blxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG4gICAgICAgICAgICAvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG4gICAgICAgICAgICBpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uUG9pbnRlck1pc3NlZCkgb25Qb2ludGVyTWlzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBkYXRhLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlPy5ldmVudENvdW50KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNQb2ludGVyTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIGV2ZW50IC4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm92ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBlbnRlciBvciBvdXQgaXMgcHJlc2VudCB0YWtlIGNhcmUgb2YgaG92ZXItc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSBpbnRlcm5hbC5ob3ZlcmVkLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhvdmVyZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCB3YXNuJ3QgcHJldmlvdXNseSBob3ZlcmVkLCBib29rIGl0IGFuZCBjYWxsIGl0cyBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJvdmVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJlbnRlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0uc3RvcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgbW91c2UgbW92ZVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm1vdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGV2ZW50cyAuLi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+XG4gICAgICAgICAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgYWxsIGV2ZW50cyBiYWNrIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGNsaWNrIGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG11c3QgdXNlIHRoZSBpbml0aWFsIHRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsaWNrRXZlbnQgfHwgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyTWlzc2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGNhbGwgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgb25Qb2ludGVyTWlzc2VkIG9uIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgcG9pbnRlciBvdmVyL291dCBoYW5kbGVycywgYnV0IG5vdCBjbGljayBhbmQgd2VyZW4ndCBoaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsaWNrRXZlbnQgJiYgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlck1pc3NlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGhhbmRsZVBvaW50ZXIgfTtcbn1cbiJdfQ==
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsNkJBQTZCLENBQ2xDLFdBQXNFLEVBQ3RFLEdBQW1CLEVBQ25CLFFBQXNELEVBQ3RELFNBQWlCO0lBRWpCLE1BQU0sV0FBVyxHQUF3QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxFQUFFO1FBQ2IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7S0FDSjtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBMkIsRUFBRSxNQUFzQjtJQUNuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLG1EQUFtRDtJQUNuRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxF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LFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbEYsQ0FBQzs0QkFDRix1QkFBdUI7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFtQyxDQUFDLENBQUM7eUJBQ2hEO3FCQUNKO3lCQUFNO3dCQUNILDZHQUE2Rzt3QkFDN0csSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7NEJBQzVELGFBQWEsQ0FDVCxLQUFLLEVBQ0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbEYsQ0FBQzt5QkFDTDtxQkFDSjtpQkFDSjtZQUNMLENBQUM7WUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFJ4U3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9yeC1zdG9yZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTmd0RG9tRXZlbnQsXG4gICAgTmd0RXZlbnRIYW5kbGVycyxcbiAgICBOZ3RJbnRlcnNlY3Rpb24sXG4gICAgTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQsXG4gICAgTmd0U3RhdGUsXG4gICAgTmd0VGhyZWVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBtYWtlSWQgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuXG5mdW5jdGlvbiByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShcbiAgICBjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+LFxuICAgIG9iajogVEhSRUUuT2JqZWN0M0QsXG4gICAgY2FwdHVyZXM6IE1hcDxUSFJFRS5PYmplY3QzRCwgTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQ+LFxuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlRGF0YTogTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQgfCB1bmRlZmluZWQgPSBjYXB0dXJlcy5nZXQob2JqKTtcbiAgICBpZiAoY2FwdHVyZURhdGEpIHtcbiAgICAgICAgY2FwdHVyZXMuZGVsZXRlKG9iaik7XG4gICAgICAgIC8vIGlmIHRoaXMgd2FzIHRoZSBsYXN0IGNhcHR1cmVkIG9iamVjdCBmb3IgdGhpcyBwb2ludGVyXG4gICAgICAgIGlmIChjYXB0dXJlcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBjYXB0dXJlZE1hcC5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgICAgIGNhcHR1cmVEYXRhLnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUocG9pbnRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmU6IE5ndFJ4U3RvcmU8Tmd0U3RhdGU+LCBvYmplY3Q6IFRIUkVFLk9iamVjdDNEKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG4gICAgLy8gcmVtb3ZlcyBldmVyeSB0cmFjZSBvZiBhbiBvYmplY3QgZnJvbSBkYXRhIHN0b3JlXG4gICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24gPSBpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG4gICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBpbnRlcm5hbC5pbml0aWFsSGl0cy5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG4gICAgaW50ZXJuYWwuaG92ZXJlZC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5ldmVudE9iamVjdCA9PT0gb2JqZWN0IHx8IHZhbHVlLm9iamVjdCA9PT0gb2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBjbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG4gICAgICAgICAgICBpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZm9yRWFjaCgoY2FwdHVyZXMsIHBvaW50ZXJJZCkgPT4ge1xuICAgICAgICByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgb2JqZWN0LCBjYXB0dXJlcywgcG9pbnRlcklkKTtcbiAgICB9KTtcblxuICAgIGlmIChzdG9yZS5nZXQoJ3ByZXZpb3VzU3RvcmUnKSkge1xuICAgICAgICByZW1vdmVJbnRlcmFjdGl2aXR5KHN0b3JlLmdldCgncHJldmlvdXNTdG9yZScpISwgb2JqZWN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudHMoc3RvcmU6IE5ndFJ4U3RvcmU8Tmd0U3RhdGU+KSB7XG4gICAgLyoqIGNhbGN1bGF0ZXMgZGVsdGEgKiovXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuICAgICAgICBjb25zdCBkeCA9IGV2ZW50Lm9mZnNldFggLSBpbnRlcm5hbC5pbml0aWFsQ2xpY2tbMF07XG4gICAgICAgIGNvbnN0IGR5ID0gZXZlbnQub2Zmc2V0WSAtIGludGVybmFsLmluaXRpYWxDbGlja1sxXTtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSk7XG4gICAgfVxuXG4gICAgLyoqIHJldHVybnMgdHJ1ZSBpZiBhbiBpbnN0YW5jZSBoYXMgYSB2YWxpZCBwb2ludGVyLWV2ZW50IHJlZ2lzdGVyZWQsIHRoaXMgZXhjbHVkZXMgc2Nyb2xsLCBjbGlja3MgZXRjLi4uICoqL1xuICAgIGZ1bmN0aW9uIGZpbHRlclBvaW50ZXJFdmVudHMob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0cy5maWx0ZXIoKG9iaikgPT5cbiAgICAgICAgICAgIFsnbW92ZScsICdvdmVyJywgJ2VudGVyJywgJ291dCcsICdsZWF2ZSddLnNvbWUoKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBgcG9pbnRlciR7bmFtZX1gIGFzIGtleW9mIE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldExvY2FsU3RhdGUob2JqKS5oYW5kbGVycz8uW2V2ZW50TmFtZV07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludGVyc2VjdChldmVudDogTmd0RG9tRXZlbnQsIGZpbHRlcj86IChvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSA9PiBUSFJFRS5PYmplY3QzRFtdKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10gPSBbXTtcbiAgICAgICAgLy8gYWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuICAgICAgICBjb25zdCBldmVudE9iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG4gICAgICAgIC8vIHJlc2V0IGFsbCByYXljYXN0ZXIgY2FtZXJhcyB0byB1bmRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0c1tpXSkuc3RvcmU/LmdldCgpO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSB1bmRlZmluZWQhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5wcmV2aW91c1N0b3JlKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgcm9vdC1sZXZlbCBwb2ludGVyIGFuZCByYXkgYXJlIHNldHVwXG4gICAgICAgICAgICBzdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBzdG9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVSYXljYXN0KG9iajogVEhSRUUuT2JqZWN0M0Q8VEhSRUUuRXZlbnQ+KSB7XG4gICAgICAgICAgICBjb25zdCBvYmpMb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmopO1xuICAgICAgICAgICAgY29uc3Qgb2JqU3RvcmUgPSBvYmpMb2NhbFN0YXRlLnN0b3JlO1xuICAgICAgICAgICAgY29uc3Qgb2JqU3RhdGUgPSBvYmpTdG9yZT8uZ2V0KCk7XG4gICAgICAgICAgICAvLyBza2lwIGV2ZW50IGhhbmRsaW5nIHdoZW4gbm9FdmVudHMgaXMgc2V0LCBvciB3aGVuIHJheWNhc3RlciBjYW1lcmEgaXMgbnVsbFxuICAgICAgICAgICAgaWYgKCFvYmpTdGF0ZSB8fCAhb2JqU3RhdGUuZXZlbnRzLmVuYWJsZWQgfHwgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgLy8gd2hlbiB0aGUgY2FtZXJhIGlzIHVuZGVmaW5lZCwgd2UgaGF2ZSB0byBjYWxsIHRoZSBldmVudHMgbGF5ZXJzIHRvIHVwZGF0ZSBmdW5jdGlvblxuICAgICAgICAgICAgaWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9ialN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIG9ialN0b3JlLCBvYmpTdGF0ZS5wcmV2aW91c1N0b3JlKTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2FtZXJhIGlzIHN0aWxsIHVuZGVmaW5lZCwgd2UgaGF2ZSB0byBza2lwIHRoaXMgbGF5ZXIgZW50aXJlbHlcbiAgICAgICAgICAgICAgICBpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID0gbnVsbCE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludGVyc2VjdCBvYmplY3QgYnkgb2JqZWN0XG4gICAgICAgICAgICByZXR1cm4gb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA/IG9ialN0YXRlLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3Qob2JqLCB0cnVlKSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29sbGVjdCBldmVudHNcbiAgICAgICAgbGV0IGhpdHM6IFRIUkVFLkludGVyc2VjdGlvbjxUSFJFRS5PYmplY3QzRDxUSFJFRS5FdmVudD4+W10gPSBldmVudE9iamVjdHNcbiAgICAgICAgICAgIC8vIGludGVyc2VjdCBvYmplY3RzXG4gICAgICAgICAgICAuZmxhdE1hcChoYW5kbGVSYXljYXN0KVxuICAgICAgICAgICAgLy8gc29ydCBieSBldmVudCBwcmlvcml0eVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGEub2JqZWN0KS5zdG9yZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGIub2JqZWN0KS5zdG9yZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFTdGF0ZSB8fCAhYlN0YXRlKSByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJTdGF0ZS5ldmVudHMucHJpb3JpdHkgLSBhU3RhdGUuZXZlbnRzLnByaW9yaXR5IHx8IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgZHVwbGljYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGl0ZW0gYXMgTmd0SW50ZXJzZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlcy5oYXMoaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYWxsb3cgY3VzdG9tIHVzZXJsYW5kIGludGVyc2VjdCBzb3J0IG9yZGVyLCB0aGlzIGxpa2VseSBvbmx5IG1ha2VzIHNlbnNlIG9uIHRoZSByb290XG4gICAgICAgIGlmIChzdGF0ZS5ldmVudHMuZmlsdGVyKSBoaXRzID0gc3RhdGUuZXZlbnRzLmZpbHRlcihoaXRzLCBzdG9yZSk7XG5cbiAgICAgICAgLy8gYnViYmxlIHVwIHRoZSBldmVudHMsIGZpbmQgdGhlIGV2ZW50IHNvdXJjZVxuICAgICAgICBmb3IgKGNvbnN0IGhpdCBvZiBoaXRzKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEIHwgbnVsbCA9IGhpdC5vYmplY3Q7XG4gICAgICAgICAgICAvLyBidWJibGUgZXZlbnQgdXBcbiAgICAgICAgICAgIHdoaWxlIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KS5ldmVudENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaCh7IC4uLmhpdCwgZXZlbnRPYmplY3QgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50T2JqZWN0ID0gZXZlbnRPYmplY3QucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlIGludGVyYWN0aW9uIGlzIGNhcHR1cmVkLCBtYWtlIGFsbCBjYXB0dXJpbmcgdGFyZ2V0cyBwYXJ0IG9mIHRoZSBpbnRlcnNlY3RzXG4gICAgICAgIGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXB0dXJlZERhdGEgb2Ygc3RhdGUuaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCkhLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVzLmhhcyhtYWtlSWQoY2FwdHVyZWREYXRhLmludGVyc2VjdGlvbikpKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaChjYXB0dXJlZERhdGEuaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqIGhhbmRsZSBpbnRlcnNlY3Rpb25zIGJ5IGZvcndhcmRpbmcgdGhlbSB0byBoYW5kbGVycyAqL1xuICAgIGZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdHMoXG4gICAgICAgIGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdLFxuICAgICAgICBldmVudDogTmd0RG9tRXZlbnQsXG4gICAgICAgIGRlbHRhOiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdGF0ZSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiBmb3VuZCwgZm9yd2FyZCBpdCB0byB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IHsgc3RvcHBlZDogZmFsc2UgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBoaXQgb2YgaW50ZXJzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0TG9jYWxTdGF0ZShoaXQub2JqZWN0KS5zdG9yZT8uZ2V0KCkgfHwgcm9vdFN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmF5Y2FzdGVyLCBwb2ludGVyLCBjYW1lcmEsIGludGVybmFsIH0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bnByb2plY3RlZFBvaW50ID0gbmV3IFRIUkVFLlZlY3RvcjMocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BvaW50ZXJDYXB0dXJlID0gKGlkOiBudW1iZXIpID0+IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk/LmhhcyhoaXQuZXZlbnRPYmplY3QpID8/IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0UG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlRGF0YSA9IHsgaW50ZXJzZWN0aW9uOiBoaXQsIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGFkZCB0aGUgaGl0IHRvIHRoZSBldmVudCBjYXB0dXJlZE1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKSEuc2V0KGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgbm90IHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGNyZWF0ZSBhIE1hcCBjb250YWluaW5nIHRoZSBoaXRPYmplY3QsIGFuZCB0aGUgaGl0LiBoaXRPYmplY3QgaXMgdXNlZCBmb3IgZmFzdGVyIGFjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuc2V0KGlkLCBuZXcgTWFwKFtbaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YV1dKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbCB0aGUgb3JpZ2luYWwgZXZlbnQgbm93XG4gICAgICAgICAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuc2V0UG9pbnRlckNhcHR1cmUoaWQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlcyA9IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZXMsIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgbmF0aXZlIGV2ZW50IHByb3BzXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFjdEV2ZW50UHJvcHM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXRlcmF0ZXMgb3ZlciB0aGUgZXZlbnQncyBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0aGUgaW5oZXJpdGVkIG9uZXMuIE5hdGl2ZSBQb2ludGVyRXZlbnRzIGhhdmUgbW9zdCBvZiB0aGVpciBwcm9wcyBhcyBnZXR0ZXJzIHdoaWNoIGFyZSBpbmhlcml0ZWQsIGJ1dCBwb2x5ZmlsbGVkIFBvaW50ZXJFdmVudHMgaGF2ZSB0aGVtIGFsbCBhcyB0aGVpciBvd24gcHJvcGVydGllcyAoaS5lLiBub3QgaW5oZXJpdGVkKS4gV2UgY2FuJ3QgdXNlIE9iamVjdC5rZXlzKCkgb3IgT2JqZWN0LmVudHJpZXMoKSBhcyB0aGV5IG9ubHkgcmV0dXJuIFwib3duXCIgcHJvcGVydGllczsgbm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkgYXMgdGhhdCAqZG9lc24ndCogcmV0dXJuIFwib3duXCIgcHJvcGVydGllcywgb25seSBpbmhlcml0ZWQgb25lcy5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBldmVudFtwcm9wIGFzIGtleW9mIE5ndERvbUV2ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBjb3B5IG92ZXIgYXRvbWljcywgbGVhdmUgZnVuY3Rpb25zIGFsb25lIGFzIHRoZXNlIHNob3VsZCBiZSBjYWxsZWQgYXMgZXZlbnQubmF0aXZlRXZlbnQuZm4oKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0RXZlbnRQcm9wc1twcm9wXSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmF5Y2FzdEV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PiA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaGl0LFxuICAgICAgICAgICAgICAgICAgICAuLi5leHRyYWN0RXZlbnRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlcixcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc3RvcHBlZDogbG9jYWxTdGF0ZS5zdG9wcGVkLFxuICAgICAgICAgICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgICAgICAgICAgdW5wcm9qZWN0ZWRQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgcmF5OiByYXljYXN0ZXIucmF5LFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IGNhbWVyYSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSGlqYWNrIHN0b3BQcm9wYWdhdGlvbiwgd2hpY2gganVzdCBzZXRzIGEgZmxhZ1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXRocmVlLWZpYmVyL2lzc3Vlcy81OTZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW50cyBhcmUgbm90IGFsbG93ZWQgdG8gc3RvcCBwcm9wYWdhdGlvbiBpZiB0aGUgcG9pbnRlciBoYXMgYmVlbiBjYXB0dXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FwdHVyZXNGb3JQb2ludGVyID0gJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYXV0aG9yaXplIHN0b3BQcm9wYWdhdGlvbi4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmlmIHRoaXMgcG9pbnRlciBoYXNuJ3QgYmVlbiBjYXB0dXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjYXB0dXJlc0ZvclBvaW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4gb3IgaWYgdGhlIGhpdCBvYmplY3QgaXMgY2FwdHVyaW5nIHRoZSBwb2ludGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZXNGb3JQb2ludGVyLmhhcyhoaXQuZXZlbnRPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXljYXN0RXZlbnQuc3RvcHBlZCA9IGxvY2FsU3RhdGUuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRpb24gaXMgc3RvcHBlZCwgcmVtb3ZlIGFsbCBvdGhlciBob3ZlciByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBpcyBvbmx5IGFsbG93ZWQgdG8gZmx1c2ggb3RoZXIgaGFuZGxlcnMgaWYgaXQgaXMgaG92ZXJlZCBpdHNlbGZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmhvdmVyZWQuc2l6ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGludGVybmFsLmhvdmVyZWQudmFsdWVzKCkpLmZpbmQoKGkpID0+IGkuZXZlbnRPYmplY3QgPT09IGhpdC5ldmVudE9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0cyBjYW5ub3QgZmx1c2ggb3V0IGhpZ2hlciB1cCBvYmplY3RzIHRoYXQgaGF2ZSBhbHJlYWR5IGNhdWdodCB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVyID0gaW50ZXJzZWN0aW9ucy5zbGljZSgwLCBpbnRlcnNlY3Rpb25zLmluZGV4T2YoaGl0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFBvaW50ZXIoWy4uLmhpZ2hlciwgaGl0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBzaG91bGQgYmUgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRhcmdldCBhbmQgY3VycmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHsgaGFzUG9pbnRlckNhcHR1cmUsIHNldFBvaW50ZXJDYXB0dXJlLCByZWxlYXNlUG9pbnRlckNhcHR1cmUgfSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIGNhbGwgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyYXljYXN0RXZlbnQpO1xuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGJ1YmJsaW5nIG1heSBiZSBpbnRlcnVwdGVkIGJ5IHN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLnN0b3BwZWQgPT09IHRydWUpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb25zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbmNlbFBvaW50ZXIoaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10pIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgaG92ZXJlZE9iaiBvZiBpbnRlcm5hbC5ob3ZlcmVkLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIG5vIG9iamVjdHMgd2VyZSBoaXQgb3IgdGhlIGhvdmVyZWQgb2JqZWN0IHdhc24ndCBmb3VuZCB1bmRlcm5lYXRoIHRoZSBjdXJzb3JcbiAgICAgICAgICAgIC8vIHdlIGNhbGwgb25Qb2ludGVyT3V0IGFuZCBkZWxldGUgdGhlIG9iamVjdCBmcm9tIHRoZSBob3ZlcmVkLWVsZW1lbnRzIG1hcFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpbnRlcnNlY3Rpb25zLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICFpbnRlcnNlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChoaXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQub2JqZWN0ID09PSBob3ZlcmVkT2JqLm9iamVjdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaGl0LmluZGV4ID09PSBob3ZlcmVkT2JqLmluZGV4ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQuaW5zdGFuY2VJZCA9PT0gaG92ZXJlZE9iai5pbnN0YW5jZUlkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBob3ZlcmVkT2JqLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5kZWxldGUobWFrZUlkKGhvdmVyZWRPYmopKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2U/LmV2ZW50Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geyAuLi5ob3ZlcmVkT2JqLCBpbnRlcnNlY3Rpb25zIH07XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0Py4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50ZXJNaXNzZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUob2JqZWN0c1tpXSk7XG4gICAgICAgICAgICBpbnN0YW5jZT8uaGFuZGxlcnMucG9pbnRlcm1pc3NlZD8uKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVBvaW50ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIERlYWwgd2l0aCBjYW5jZWxhdGlvblxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BvaW50ZXJsZWF2ZSc6XG4gICAgICAgICAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsUG9pbnRlcihbXSk7XG4gICAgICAgICAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoZXZlbnQ6IE5ndERvbUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXZlbnQgaW50ZXJmYWNlIGhhZCBvbkxvc3RQb2ludGVyQ2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZGVsZXRlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb25Qb2ludGVyTWlzc2VkLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmVSYXkoZXZlbnQpXG4gICAgICAgICAgICBpbnRlcm5hbC5sYXN0RXZlbnQgPSBldmVudDtcblxuICAgICAgICAgICAgLy8gR2V0IGZyZXNoIGludGVyc2VjdHNcbiAgICAgICAgICAgIGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuICAgICAgICAgICAgY29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhpdHMgPSBwYXRjaEludGVyc2VjdHMoaW50ZXJzZWN0KGZpbHRlciksIGV2ZW50KVxuICAgICAgICAgICAgY29uc3QgaGl0cyA9IGludGVyc2VjdChldmVudCwgZmlsdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gaXNDbGlja0V2ZW50ID8gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQpIDogMDtcblxuICAgICAgICAgICAgLy8gU2F2ZSBpbml0aWFsIGNvb3JkaW5hdGVzIG9uIHBvaW50ZXItZG93blxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG4gICAgICAgICAgICAvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG4gICAgICAgICAgICBpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uUG9pbnRlck1pc3NlZCkgb25Qb2ludGVyTWlzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBkYXRhLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlPy5ldmVudENvdW50KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNQb2ludGVyTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIGV2ZW50IC4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm92ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBlbnRlciBvciBvdXQgaXMgcHJlc2VudCB0YWtlIGNhcmUgb2YgaG92ZXItc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSBpbnRlcm5hbC5ob3ZlcmVkLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhvdmVyZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCB3YXNuJ3QgcHJldmlvdXNseSBob3ZlcmVkLCBib29rIGl0IGFuZCBjYWxsIGl0cyBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJvdmVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJlbnRlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0uc3RvcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgbW91c2UgbW92ZVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm1vdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGV2ZW50cyAuLi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+XG4gICAgICAgICAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgYWxsIGV2ZW50cyBiYWNrIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGNsaWNrIGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG11c3QgdXNlIHRoZSBpbml0aWFsIHRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsaWNrRXZlbnQgfHwgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyTWlzc2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGNhbGwgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgb25Qb2ludGVyTWlzc2VkIG9uIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgcG9pbnRlciBvdmVyL291dCBoYW5kbGVycywgYnV0IG5vdCBjbGljayBhbmQgd2VyZW4ndCBoaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsaWNrRXZlbnQgJiYgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlck1pc3NlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGhhbmRsZVBvaW50ZXIgfTtcbn1cbiJdfQ==
@@ -166,6 +166,10 @@ export class NgtRenderer {
166
166
  // if both are three instances, straightforward case
167
167
  if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
168
168
  newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
169
+ // if child already attached to a parent, skip
170
+ if (getLocalState(newChild).parent)
171
+ return;
172
+ // attach THREE child
169
173
  attachThreeChild(parent, newChild);
170
174
  // here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
171
175
  if (!newChild.__ngt_renderer__[4 /* NgtRendererClassId.compound */])
@@ -341,4 +345,4 @@ export class NgtRenderer {
341
345
  return this.delegate.data;
342
346
  }
343
347
  }
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNqRCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJDLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFDM0MsWUFBTyxHQUFzQixFQUFFLENBQUM7S0FtQzNDO0lBakNHLGNBQWMsQ0FBQyxXQUFnQixFQUFFLElBQTBCO1FBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLGdCQUFnQixDQUFDO1FBRW5DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUU5QixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7OytHQTNDUSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOztBQStDWCxNQUFNLE9BQU8sV0FBVztJQUdwQixZQUNxQixRQUFtQixFQUNuQixLQUF1QixFQUN2QixTQUFzRCxFQUN0RCxPQUFPLEtBQUs7UUFIWixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQ3RELFNBQUksR0FBSixJQUFJLENBQVE7UUFOekIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQXlVdEIsZUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsZ0JBQVcsR0FBaUMsSUFBSSxDQUFDO1FBQ2pELHNCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RSxnQkFBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsb0JBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxnQkFBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUE1VW5ELENBQUM7SUFFSixhQUFhLENBQUMsSUFBWSxFQUFFLFNBQXFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU3RCwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsZ0JBQWdCLDZDQUFvQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUUsQ0FBQyxRQUFRLENBQUM7WUFDbEcsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELGtCQUFrQjtRQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1RCxRQUFRLENBQUMsZ0JBQWdCLDZDQUFvQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUUsQ0FBQyxRQUFRLENBQUM7WUFDdEcsT0FBTyxRQUFRLENBQUM7U0FDbkI7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNuRDtRQUVELG1CQUFtQjtRQUNuQixJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQ3hCLE9BQU8sRUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQzdGLENBQUM7U0FDTDtRQUVELE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTlELG1CQUFtQjtRQUNuQixJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsYUFBYSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNyRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDakMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO2dCQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLGdEQUFnRDtRQUNoRCxJQUFJLFdBQVcsRUFBRTtZQUNiLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN2QixVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEM7aUJBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEM7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsNkNBQW9DLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBRSxDQUFDLFFBQVEsQ0FBQztRQUNyRyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUF1QixFQUFFLFFBQXlCO1FBQzFELHNDQUFzQztRQUN0QyxJQUFJLFFBQVEsWUFBWSxJQUFJO1lBQUUsT0FBTztRQUVyQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssU0FBUyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXRDLDJCQUEyQjtRQUMzQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssUUFBUSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLDZDQUFvQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLDZDQUFvQyxDQUFDLENBQUM7YUFDM0Y7WUFDRCxPQUFPO1NBQ1Y7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLFFBQVEsRUFBRTtZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLElBQUksTUFBTSxDQUFDLGdCQUFnQiw2Q0FBb0MsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLDZDQUFvQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzNGO1lBQ0QsT0FBTztTQUNWO1FBRUQsb0RBQW9EO1FBQ3BELElBQ0ksTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxPQUFPO1lBQzVELFFBQVEsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUNoRTtZQUNFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuQyx1SUFBdUk7WUFDdkksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IscUNBQTZCO2dCQUFFLE9BQU87WUFDcEUsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyw4QkFBOEI7Z0JBQUUsT0FBTztZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNELE9BQU87U0FDVjtRQUVELDJDQUEyQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUFFO1lBQzlELElBQUksUUFBUSxDQUFDLGdCQUFnQixxQ0FBNkIsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9ELEtBQUssTUFBTSxXQUFXLElBQUksUUFBUSxDQUFDLGdCQUFnQixxQ0FBNkIsRUFBRTtvQkFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3pDO2FBQ0o7U0FDSjtRQUVELDBCQUEwQjtRQUMxQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssVUFBVSxFQUFFO1lBQ2pFLG9EQUFvRDtZQUNwRCxJQUNJLENBQUMsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0I7Z0JBQ3ZELFFBQVEsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUNoRTtnQkFDRSxvQ0FBb0M7Z0JBQ3BDLElBQUksUUFBUSxDQUFDLGdCQUFnQixxQ0FBNkIsRUFBRTtvQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1QztxQkFBTTtvQkFDSCxpR0FBaUc7b0JBQ2pHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLDJDQUFtQyxFQUFFO3dCQUMvRCxRQUFRLENBQUMsZ0JBQWdCLDJDQUFtQyxHQUFHLE1BQU0sQ0FBQztxQkFDekU7aUJBQ0o7YUFDSjtZQUVELHFDQUFxQztZQUNyQyxJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsdUNBQStCO2dCQUN0RCxRQUFRLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU87Z0JBQzlELFFBQVEsQ0FBQyxnQkFBZ0IscUNBQTZCO2dCQUN0RCxNQUFNLENBQUMsZ0JBQWdCLHVDQUErQixLQUFLLFFBQVEsRUFDckU7Z0JBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7UUFFRCxNQUFNLDZCQUE2QjtRQUMvQiw4REFBOEQ7UUFDOUQsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbkcsNENBQTRDO1lBQzVDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxLQUFLO2dCQUN2RCxRQUFRLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLEtBQUssQ0FBQyxDQUFDO1FBRXRFLElBQUksNkJBQTZCLEVBQUU7WUFDL0Isb0dBQW9HO1lBQ3BHLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRixJQUFJLDBCQUEwQixFQUFFO2dCQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFEO1NBQ0o7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUNSLE1BQXVCLEVBQ3ZCLFFBQXlCO0lBQ3pCLDZCQUE2QjtJQUM3Qiw0QkFBNEI7SUFDNUIsK0JBQStCOztRQUUvQixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sS0FBSyxRQUFRO1lBQUUsT0FBTztRQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQXVCLEVBQUUsUUFBeUIsRUFBRSxhQUFtQztRQUMvRixJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTztZQUM1RCxRQUFRLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU8sRUFDaEU7WUFDRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyQyxPQUFPO1NBQ1Y7UUFFRCxJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssVUFBVTtZQUMvRCxNQUFNLENBQUMsZ0JBQWdCLG1DQUEyQixFQUNwRDtZQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixtQ0FBMkIsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDOUYsT0FBTztTQUNWO1FBRUQsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU8sRUFBRTtZQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNWO1FBRUQsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25GLElBQUksMEJBQTBCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDekU7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsMEJBQTZDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQXFCO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLG1DQUEyQjtZQUFFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixtQ0FBMkIsQ0FBQztRQUNoSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUFZLENBQUMsRUFBbUIsRUFBRSxJQUFZLEVBQUUsS0FBYSxFQUFFLFNBQXFDO1FBQ2hHLElBQUksRUFBRSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxVQUFVLEVBQUU7WUFDN0QsMENBQTBDO1lBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsdUNBQStCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLHVDQUErQixFQUFFO2dCQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGdCQUFnQix1Q0FBK0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlGLE9BQU87U0FDVjtRQUVELElBQUksRUFBRSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxPQUFPLEVBQUU7WUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBbUIsRUFBRSxJQUFZLEVBQUUsS0FBVTtRQUNyRCxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssVUFBVSxFQUFFO1lBQzdELDBDQUEwQztZQUMxQyxFQUFFLENBQUMsZ0JBQWdCLHVDQUErQixDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNqRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQix1Q0FBK0IsRUFBRTtnQkFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLE9BQU87YUFDVjtZQUVELElBQUksRUFBRSxDQUFDLGdCQUFnQix1Q0FBK0IsQ0FBQyxnQkFBZ0IscUNBQTZCLEVBQUU7Z0JBQ2xHLE1BQU0sQ0FBQyxNQUFNLENBQ1QsRUFBRSxDQUFDLGdCQUFnQix1Q0FBK0IsQ0FBQyxnQkFBZ0IscUNBQTZCLEVBQ2hHO29CQUNJLEtBQUssRUFBRTt3QkFDSCxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsdUNBQStCLENBQUMsZ0JBQWdCLHFDQUVyRTt3QkFDRCxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUs7cUJBQ2hCO2lCQUNKLENBQ0osQ0FBQzthQUNMO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLHVDQUErQixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRixPQUFPO1NBQ1Y7UUFFRCxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUFFO1lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQXVCLEVBQUUsU0FBaUIsRUFBRSxRQUF3QztRQUN2RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsNkNBQW9DLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FDbkYsaUJBQWlCLEVBQ2pCLElBQUksQ0FDUCxDQUFDO1FBQ0YsZ0VBQWdFO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUksU0FBUztnQkFBRSxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDbkU7UUFFRCx5REFBeUQ7UUFDekQsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDZixLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsTUFBTSxXQUFXLEdBQ2IsU0FBUyxLQUFLLFFBQVE7Z0JBQ2xCLENBQUMsQ0FBRSxNQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDMUQsQ0FBQyxDQUFFLE1BQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFDSSxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU87WUFDNUQsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLFVBQVU7Z0JBQzVELE1BQU0sQ0FBQyxnQkFBZ0IsdUNBQStCLENBQUMsRUFDN0Q7WUFDRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLHVDQUErQixJQUFJLE1BQU0sQ0FBQztZQUNsRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2hELE9BQU8saUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFVLENBQUMsQ0FBQztTQUMxRztRQUVELElBQ0ksTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxVQUFVO1lBQy9ELENBQUMsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0IsRUFDekQ7WUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQVlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgUmVuZGVyZXJUeXBlMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1RfQ0FUQUxPR1VFIH0gZnJvbSAnLi4vZGkvY2F0YWxvZ3VlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlck5vZGUsIE5ndFJlbmRlcmVyU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX0RPTV9UQUcgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG5cbiAgICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuICAgICAgICBsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKHJlbmRlcmVyKSByZXR1cm4gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBwcml2YXRlIGZpcnN0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb290ID0gZmFsc2VcbiAgICApIHt9XG5cbiAgICBjcmVhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgLy8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcbiAgICAgICAgaWYgKHRoaXMucm9vdCAmJiAhdGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIHRoaXMuc3RvcmUucm9vdFNjZW5lKTtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShlbGVtZW50KSEuaW5qZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBjb21wb3VuZFxuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0NvbXBvdW5kKG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHBvcnRhbFxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QT1JUQUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3BvcnRhbCcsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHJhdyB2YWx1ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZShcbiAgICAgICAgICAgICAgICAndGhyZWUnLFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LCB7IF9fbmd0X186IHsgaXNSYXc6IHRydWUgfSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBzdG9yZSB9ID0gdGhpcy5zdG9yZS5nZXRDcmVhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgLy8gaGFuZGxlIHByaW1pdGl2ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QUklNSVRJVkUpIHtcbiAgICAgICAgICAgIGlmICghaW5qZWN0ZWRBcmdzWzBdKSB0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIG5ndC1wcmltaXRpdmUgd2l0aG91dCBhcmdzIGlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGluamVjdGVkQXJnc1swXTtcbiAgICAgICAgICAgIGxldCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhsb2NhbFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlKG9iamVjdCwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzLCBwcmltaXRpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWVUYWcgPSBuYW1lLnN0YXJ0c1dpdGgoJ25ndCcpID8gbmFtZS5zbGljZSg0KSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwodGhyZWVUYWcpO1xuICAgICAgICBjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIFRIUkVFIGNvbnN0cnVjdG9yIGhlcmUsIGhhbmRsZSBpdFxuICAgICAgICBpZiAodGhyZWVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXMuZ2VvbWV0cnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ2dlb21ldHJ5J107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzLm1hdGVyaWFsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21Ob2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdkb20nLCBlbGVtZW50KTtcbiAgICAgICAgZG9tTm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBjb21wb3VuZFxuICAgICAgICBpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjaGlsZCBpcyBpbmRlZWQgYW4gbmd0Q29tcG91bmRcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0Q29tcG91bmQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90LCB3ZSB0cmFjayB0aGUgcGFyZW50ICh0aGF0IGlzIHN1cHBvc2VkbHkgdGhlIGNvbXBvdW5kIGNvbXBvbmVudCkgb24gdGhpcyB0aHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiAhZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSB8fFxuICAgICAgICAgICAgLy8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcbiAgICAgICAgICAgIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKTtcblxuICAgICAgICBpZiAoc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRCZWZvcmUoXG4gICAgICAgIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuICAgICAgICBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIFRPRE8gIHdlIG1pZ2h0IG5lZWQgdGhlc2U/XG4gICAgICAgIC8vIHJlZkNoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gaXNNb3ZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgb2xkQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5hcHBseUF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuYXBwbHlQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXRDZHIgPSB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKS5nZXQoXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBjb25zdCBjYWxsYmFja1dpdGhDZHIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q2RyKSB0YXJnZXRDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5yb290Q2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNET00odGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuc3RvcmUucm9vdFNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9tVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPVxuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcbiAgICAgICAgICAgICAgICAgICAgPyAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXVsnZGVmYXVsdFZpZXcnXVxuICAgICAgICAgICAgICAgICAgICA6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2tXaXRoQ2RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyB8fFxuICAgICAgICAgICAgKHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSB8fCB0YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdldExvY2FsU3RhdGUodGFyZ2V0KS5wcmlvcml0eTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHkgfHwgMCwgZXZlbnROYW1lLCBjYWxsYmFjaywgdGhpcy5zdG9yZS5yb290Q2RyLCB0YXJnZXRDZHIhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgIXRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbXG4gICAgICAgICAgICAgICAgJ29wJyxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgWydjbGVhblVwJywgdGhpcy5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKV0pLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIGdldCBkYXRhKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhO1xuICAgIH1cbiAgICBjcmVhdGVUZXh0ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveSA9IHRoaXMuZGVsZWdhdGUuZGVzdHJveS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGRlc3Ryb3lOb2RlOiAoKG5vZGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBzZWxlY3RSb290RWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBuZXh0U2libGluZyA9IHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICByZW1vdmVBdHRyaWJ1dGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGFkZENsYXNzID0gdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUNsYXNzID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZVN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFZhbHVlID0gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xufVxuIl19
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFC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TUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxVQUFVO1lBQy9ELENBQUMsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0IsRUFDekQ7WUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQVlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgUmVuZGVyZXJUeXBlMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1RfQ0FUQUxPR1VFIH0gZnJvbSAnLi4vZGkvY2F0YWxvZ3VlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlck5vZGUsIE5ndFJlbmRlcmVyU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX0RPTV9UQUcgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG5cbiAgICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuICAgICAgICBsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKHJlbmRlcmVyKSByZXR1cm4gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBwcml2YXRlIGZpcnN0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb290ID0gZmFsc2VcbiAgICApIHt9XG5cbiAgICBjcmVhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgLy8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcbiAgICAgICAgaWYgKHRoaXMucm9vdCAmJiAhdGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIHRoaXMuc3RvcmUucm9vdFNjZW5lKTtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShlbGVtZW50KSEuaW5qZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBjb21wb3VuZFxuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0NvbXBvdW5kKG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHBvcnRhbFxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QT1JUQUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3BvcnRhbCcsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHJhdyB2YWx1ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZShcbiAgICAgICAgICAgICAgICAndGhyZWUnLFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LCB7IF9fbmd0X186IHsgaXNSYXc6IHRydWUgfSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBzdG9yZSB9ID0gdGhpcy5zdG9yZS5nZXRDcmVhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgLy8gaGFuZGxlIHByaW1pdGl2ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QUklNSVRJVkUpIHtcbiAgICAgICAgICAgIGlmICghaW5qZWN0ZWRBcmdzWzBdKSB0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIG5ndC1wcmltaXRpdmUgd2l0aG91dCBhcmdzIGlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGluamVjdGVkQXJnc1swXTtcbiAgICAgICAgICAgIGxldCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhsb2NhbFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlKG9iamVjdCwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzLCBwcmltaXRpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWVUYWcgPSBuYW1lLnN0YXJ0c1dpdGgoJ25ndCcpID8gbmFtZS5zbGljZSg0KSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwodGhyZWVUYWcpO1xuICAgICAgICBjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIFRIUkVFIGNvbnN0cnVjdG9yIGhlcmUsIGhhbmRsZSBpdFxuICAgICAgICBpZiAodGhyZWVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXMuZ2VvbWV0cnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ2dlb21ldHJ5J107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzLm1hdGVyaWFsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21Ob2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdkb20nLCBlbGVtZW50KTtcbiAgICAgICAgZG9tTm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgY2hpbGQgYWxyZWFkeSBhdHRhY2hlZCB0byBhIHBhcmVudCwgc2tpcFxuICAgICAgICAgICAgaWYgKGdldExvY2FsU3RhdGUobmV3Q2hpbGQpLnBhcmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgLy8gYXR0YWNoIFRIUkVFIGNoaWxkXG4gICAgICAgICAgICBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgLy8gaGVyZSwgd2UgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgaWYgdGhlIHBhcmVudCBoYXMgYSBjb21wb3VuZFBhcmVudCwgd2hpY2ggbWVhbnMgdGhpcyBjaGlsZCBpcyBwYXJ0IG9mIGEgY29tcG91bmQgcGFyZW50IHRlbXBsYXRlXG4gICAgICAgICAgICBpZiAoIW5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoIWNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2VcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIGNvbXBvdW5kXG4gICAgICAgIGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGNvbXBvdW5kIGRvZXNuJ3QgaGF2ZSBhIFRIUkVFIGluc3RhbmNlIHNldCB5ZXRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkIGlzIGluZGVlZCBhbiBuZ3RDb21wb3VuZFxuICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRDb21wb3VuZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHdlIHRyYWNrIHRoZSBwYXJlbnQgKHRoYXQgaXMgc3VwcG9zZWRseSB0aGUgY29tcG91bmQgY29tcG9uZW50KSBvbiB0aGlzIHRocmVlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0gPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBjb21wb3VuZCBpZiBpdCdzIGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAhPT0gbmV3Q2hpbGRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0Q29tcG91bmQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZSA9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZCBpcyB0aHJlZSBidXQgaGF2ZW4ndCBiZWVuIGF0dGFjaGVkIHRvIGEgcGFyZW50IHlldFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmICFnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQpIHx8XG4gICAgICAgICAgICAvLyBvciBib3RoIHBhcmVudCBhbmQgY2hpbGQgYXJlIERPTSBlbGVtZW50c1xuICAgICAgICAgICAgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScpO1xuXG4gICAgICAgIGlmIChzaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydEJlZm9yZShcbiAgICAgICAgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgICAgIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gVE9ETyAgd2UgbWlnaHQgbmVlZCB0aGVzZT9cbiAgICAgICAgLy8gcmVmQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBpc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghcGFyZW50Ll9fbmd0X3JlbmRlcmVyX18gfHwgcGFyZW50ID09PSBuZXdDaGlsZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBvbGRDaGlsZDogTmd0UmVuZGVyZXJOb2RlLCBpc0hvc3RFbGVtZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG9sZENoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIG9sZENoaWxkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRoZSBjb21wb3VuZCBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgIGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0sIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmFwcGx5QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRQcm9wZXJ0eShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRoZSBjb21wb3VuZCBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgIGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgIGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5hcHBseVByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaXN0ZW4odGFyZ2V0OiBOZ3RSZW5kZXJlck5vZGUsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGJvb2xlYW4gfCB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldENkciA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpLmdldChcbiAgICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICAvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHRoZW4gd2UgcGFzcyB0aGF0IHRvIGRlbGVnYXRlIFJlbmRlcmVyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrV2l0aENkciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRDZHIpIHRhcmdldENkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnJvb3RDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0RPTSh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrV2l0aENkcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gd2Uga25vdyB0aGF0IHRhcmdldCBpcyBub3QgRE9NIG5vZGVcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy5zdG9yZS5yb290U2NlbmUpIHtcbiAgICAgICAgICAgIGxldCBbZG9tVGFyZ2V0LCBldmVudF0gPSBldmVudE5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGlmIChldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBkb21UYXJnZXQ7XG4gICAgICAgICAgICAgICAgZG9tVGFyZ2V0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9XG4gICAgICAgICAgICAgICAgZG9tVGFyZ2V0ID09PSAnd2luZG93J1xuICAgICAgICAgICAgICAgICAgICA/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG4gICAgICAgICAgICAgICAgICAgIDogKHRhcmdldCBhcyBOZ3RBbnlSZWNvcmQpWydvd25lckRvY3VtZW50J107XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4oZXZlbnRUYXJnZXQsIGV2ZW50LCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG4gICAgICAgICAgICAodGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG4gICAgICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdIHx8IHRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TG9jYWxTdGF0ZSh0YXJnZXQpLnByaW9yaXR5O1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSB8fCAwLCBldmVudE5hbWUsIGNhbGxiYWNrLCB0aGlzLnN0b3JlLnJvb3RDZHIsIHRhcmdldENkciEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG4gICAgICAgICAgICAhdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFtcbiAgICAgICAgICAgICAgICAnb3AnLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbJ2NsZWFuVXAnLCB0aGlzLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spXSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gICAgfVxuICAgIGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgYWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG59XG4iXX0=
@@ -1214,7 +1214,7 @@ function createEvents(store) {
1214
1214
  case 'lostpointercapture':
1215
1215
  return (event) => {
1216
1216
  const { internal } = store.get();
1217
- if ('pointerId' in event && !internal.capturedMap.has(event.pointerId)) {
1217
+ if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
1218
1218
  // If the object event interface had onLostPointerCapture, we'd call it here on every
1219
1219
  // object that's getting removed.
1220
1220
  internal.capturedMap.delete(event.pointerId);
@@ -2039,6 +2039,10 @@ class NgtRenderer {
2039
2039
  // if both are three instances, straightforward case
2040
2040
  if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
2041
2041
  newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
2042
+ // if child already attached to a parent, skip
2043
+ if (getLocalState(newChild).parent)
2044
+ return;
2045
+ // attach THREE child
2042
2046
  attachThreeChild(parent, newChild);
2043
2047
  // here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
2044
2048
  if (!newChild.__ngt_renderer__[4 /* NgtRendererClassId.compound */])