@dcl/asset-packs 2.11.4 → 2.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/actions.js CHANGED
@@ -297,6 +297,14 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
297
297
  handleCallScriptMethod(entity, getPayload(action));
298
298
  break;
299
299
  }
300
+ case ActionType.LOG_TO_CONSOLE: {
301
+ handleLogToConsole(getPayload(action));
302
+ break;
303
+ }
304
+ case ActionType.DELETE: {
305
+ handleDelete(entity);
306
+ break;
307
+ }
300
308
  default:
301
309
  break;
302
310
  }
@@ -1184,5 +1192,13 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
1184
1192
  console.error(`[Script Action Error] Failed to call ${methodName} on ${scriptPath}:`, error);
1185
1193
  }
1186
1194
  }
1195
+ function handleLogToConsole(payload) {
1196
+ console.log(payload.message);
1197
+ }
1198
+ function handleDelete(entity) {
1199
+ stopAllTimeouts(entity);
1200
+ stopAllIntervals(entity);
1201
+ engine.removeEntityWithChildren(entity);
1202
+ }
1187
1203
  }
1188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFD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LFNBQVMsc0JBQXNCLENBQzdCLE1BQWMsRUFDZCxPQUFxRDtRQUVyRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFbkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLFVBQVUsT0FBTyxVQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElFbmdpbmUsXG4gIEVudGl0eSxcbiAgVGV4dEFsaWduTW9kZSxcbiAgRm9udCxcbiAgTW92ZSxcbiAgUEJUd2VlbixcbiAgUm90YXRlLFxuICBTY2FsZSxcbiAgUG9pbnRlckV2ZW50c1N5c3RlbSxcbn0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHtcbiAgTWF0ZXJpYWwsXG4gIEF1ZGlvU3RyZWFtLFxuICBZR1VuaXQsXG4gIFlHUG9zaXRpb25UeXBlLFxuICBQb2ludGVyRmlsdGVyTW9kZSxcbiAgSW5wdXRBY3Rpb24sXG4gIE1lc2hDb2xsaWRlcixcbiAgZ2V0Q29tcG9uZW50RW50aXR5VHJlZSxcbiAgVHdlZW4sXG59IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJztcbmltcG9ydCB0eXBlIHsgVGV4dHVyZU1vdmVtZW50VHlwZSBhcyBTZGtUZXh0dXJlTW92ZW1lbnRUeXBlIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9kZWNlbnRyYWxhbmQvc2RrL2NvbXBvbmVudHMvdHdlZW4uZ2VuJztcbmltcG9ydCB7IGdldEVudGl0eVBhcmVudCwgZ2V0UGxheWVyUG9zaXRpb24sIGdldFdvcmxkUG9zaXRpb24sIGdldFdvcmxkUm90YXRpb24gfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXlsb2FkLCBJU0RLSGVscGVycywgSVBsYXllcnNIZWxwZXIsIFNjcmVlbkFsaWduTW9kZSB9IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZSxcbiAgUHJveGltaXR5TGF5ZXIsXG4gIFRyaWdnZXJUeXBlLFxuICBUd2VlblR5cGUsXG4gIFRlbGVwb3J0TW9kZSxcbiAgY2xvbmUsXG4gIGdldENvbXBvbmVudHMsXG4gIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsLFxufSBmcm9tICcuL2RlZmluaXRpb25zJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSwgaXNWYWxpZFN0YXRlIH0gZnJvbSAnLi9zdGF0ZXMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHtcbiAgc3RhcnRJbnRlcnZhbCxcbiAgc3RhcnRUaW1lb3V0LFxuICBzdG9wQWxsSW50ZXJ2YWxzLFxuICBzdG9wQWxsVGltZW91dHMsXG4gIHN0b3BJbnRlcnZhbCxcbiAgc3RvcFRpbWVvdXQsXG59IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0UGF5bG9hZCB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmltcG9ydCB7XG4gIGdldFVJQmFja2dyb3VuZCxcbiAgZ2V0VUlUZXh0LFxuICBnZXRVSVRyYW5zZm9ybSxcbiAgbWFwQWxpZ25Ub1NjcmVlbkFsaWduLFxuICBzaG93Q2FwdGNoYVByb21wdCxcbn0gZnJvbSAnLi91aSc7XG5pbXBvcnQgeyBnZXRFeHBsb3JlckNvbXBvbmVudHMgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgaW5pdFRyaWdnZXJzLCBkYW1hZ2VUYXJnZXRzLCBoZWFsVGFyZ2V0cyB9IGZyb20gJy4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgZm9sbG93TWFwIH0gZnJvbSAnLi90cmFuc2Zvcm0nO1xuaW1wb3J0IHsgZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbiB9IGZyb20gJy4vdHdlZW5zJztcbmltcG9ydCB7IFJFV0FSRFNfU0VSVkVSX1VSTCB9IGZyb20gJy4vYWRtaW4tdG9vbGtpdC11aS9jb25zdGFudHMnO1xuaW1wb3J0IHsgY2FsbFNjcmlwdE1ldGhvZCB9IGZyb20gJ35zZGsvc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7XG4gIG1vdmVQbGF5ZXJUbyxcbiAgdHJpZ2dlckVtb3RlLFxuICB0cmlnZ2VyU2NlbmVFbW90ZSxcbiAgb3BlbkV4dGVybmFsVXJsLFxuICB0ZWxlcG9ydFRvLFxuICBjaGFuZ2VSZWFsbSxcbn0gZnJvbSAnfnN5c3RlbS9SZXN0cmljdGVkQWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEZsYXRGZXRjaEluaXQgfSBmcm9tICd+c3lzdGVtL1NpZ25lZEZldGNoJztcbmltcG9ydCB7IGdldFJlYWxtIH0gZnJvbSAnfnN5c3RlbS9SdW50aW1lJztcbmltcG9ydCB7IHNpZ25lZEZldGNoIH0gZnJvbSAnfnN5c3RlbS9TaWduZWRGZXRjaCc7XG5cbmNvbnN0IGluaXRlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KCk7XG5jb25zdCB1aVN0YWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHk+KCk7XG5jb25zdCBsYXN0VWlFbnRpdHlDbGlja2VkID0gbmV3IE1hcDxFbnRpdHksIEVudGl0eT4oKTtcbmNvbnN0IHRleHRFbnRpdGllcyA9IG5ldyBNYXA8RW50aXR5LCBFbnRpdHk+KCk7IC8vIE1vZGVsIEVudGl0eSwgVGV4dCBFbnRpdHlcblxubGV0IGludGVybmFsSW5pdEFjdGlvbnM6ICgoZW50aXR5OiBFbnRpdHkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICBpZiAoaW50ZXJuYWxJbml0QWN0aW9ucykge1xuICAgIHJldHVybiBpbnRlcm5hbEluaXRBY3Rpb25zKGVudGl0eSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBpbml0QWN0aW9ucyB3aGlsZSBhY3Rpb25zU3lzdGVtIGhhcyBub3QgYmVlbiBjcmVhdGVkJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25zU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSB7XG4gIGNvbnN0IHtcbiAgICBBbmltYXRvcixcbiAgICBUcmFuc2Zvcm0sXG4gICAgQXVkaW9Tb3VyY2UsXG4gICAgQXZhdGFyQXR0YWNoLFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQsXG4gICAgR2x0ZkNvbnRhaW5lcixcbiAgICBVaVRyYW5zZm9ybSxcbiAgICBVaVRleHQsXG4gICAgVWlCYWNrZ3JvdW5kLFxuICAgIFVpSW5wdXQsXG4gICAgVWlJbnB1dFJlc3VsdCxcbiAgICBUd2VlbjogVHdlZW5Db21wb25lbnQsXG4gICAgVHdlZW5TZXF1ZW5jZSxcbiAgICBWaWRlb1BsYXllcixcbiAgICBMaWdodFNvdXJjZSxcbiAgICBNYWluQ2FtZXJhLFxuICAgIFZpcnR1YWxDYW1lcmEsXG4gICAgVGV4dFNoYXBlLFxuICAgIElucHV0TW9kaWZpZXIsXG4gICAgU2t5Ym94VGltZSxcbiAgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpO1xuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciwgVHJpZ2dlcnMsIFJld2FyZHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAvLyBzYXZlIGludGVybmFsIHJlZmVyZW5jZSB0byBpbml0IGZ1bmNpb25cbiAgaW50ZXJuYWxJbml0QWN0aW9ucyA9IGluaXRBY3Rpb25zO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhY3Rpb25zU3lzdGVtKF9kdDogbnVtYmVyKSB7XG4gICAgY29uc3QgZW50aXRpZXNXaXRoQWN0aW9ucyA9IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWN0aW9ucyk7XG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVudGl0aWVzV2l0aEFjdGlvbnMpIHtcbiAgICAgIGluaXRBY3Rpb25zKGVudGl0eSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gICAgaWYgKCFBY3Rpb25zLmhhcyhlbnRpdHkpIHx8IGluaXRlZEVudGl0aWVzLmhhcyhlbnRpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFjdGlvbnMgZGF0YVxuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldChlbnRpdHkpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb25zIGZvciBnaXZlbiBlbnRpdHlcbiAgICBjb25zdCB0eXBlcyA9IGFjdGlvbnMudmFsdWUucmVkdWNlKFxuICAgICAgKHR5cGVzLCBhY3Rpb24pID0+IHR5cGVzLmFkZChhY3Rpb24udHlwZSksXG4gICAgICBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgaW5pdFBsYXlBbmltYXRpb24oZW50aXR5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJpbmQgYWN0aW9uc1xuICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpO1xuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMudmFsdWUpIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5vbihhY3Rpb24ubmFtZSwgKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QW5pbWF0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBbmltYXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfU1RBVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFN0YXRlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX1RXRUVOOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydFR3ZWVuKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9UV0VFTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFR3ZWVuKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU6IHtcbiAgICAgICAgICAgIGhhbmRsZVNsaWRlVGV4dHVyZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TTElERV9URVhUVVJFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldENvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlSW5jcmVtZW50Q291bnRlcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9TT1VORDoge1xuICAgICAgICAgICAgaGFuZGxlUGxheVNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wU291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRWaXNpYmlsaXR5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlQXR0YWNoVG9QbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlRGV0YWNoRnJvbVBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlUGxheVZpZGVvKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BWaWRlbyhlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVUZWxlcG9ydFBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5NT1ZFX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheURlZmF1bHRFbW90ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheUN1c3RvbUVtb3RlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuT1BFTl9MSU5LOiB7XG4gICAgICAgICAgICBoYW5kbGVPcGVuTGluayhlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX1RFWFQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVNob3dUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0RGVsYXkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfREVMQVk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wRGVsYXkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9MT09QOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wTG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0xPT1A+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZUNsb25lRW50aXR5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZVJlbW92ZUVudGl0eShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlU2hvd0ltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ISURFX0lNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVIaWRlSW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9JTUFHRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRBTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlRGFtYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSX0hFUkU6IHtcbiAgICAgICAgICAgIGhhbmRsZU1vdmVQbGF5ZXJIZXJlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSX0hFUkU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZRVJfRkFDRV9JVEVNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5ZXJGYWNlSXRlbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZRVJfRkFDRV9JVEVNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlRm9sbG93UGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BGb2xsb3dpbmdQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGFjZU9uUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJPVEFURV9BU19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVJvdGF0ZUFzUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25DYW1lcmEoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNDYW1lcmEoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9QT1NJVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0UG9zaXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1JPVEFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRSb3RhdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfU0NBTEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFNjYWxlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TQ0FMRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJBTkRPTToge1xuICAgICAgICAgICAgaGFuZGxlUmFuZG9tKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkJBVENIOiB7XG4gICAgICAgICAgICBoYW5kbGVCYXRjaChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5CQVRDSD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhFQUxfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVIZWFsUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhFQUxfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUDoge1xuICAgICAgICAgICAgaGFuZGxlQ2xhaW1BaXJkcm9wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5MSUdIVFNfT046IHtcbiAgICAgICAgICAgIGhhbmRsZUxpZ2h0c09uKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19PRkY6IHtcbiAgICAgICAgICAgIGhhbmRsZUxpZ2h0c09mZihlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZOiB7XG4gICAgICAgICAgICBoYW5kbGVMaWdodHNNb2RpZnkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTElHSFRTX01PRElGWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE6IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZUNhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfQ0FNRVJBPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX1RFWFQ6IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1RFWFQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5GUkVFWkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVGcmVlemVQbGF5ZXIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVU5GUkVFWkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVVbmZyZWV6ZVBsYXllcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfQ09MTElTSU9OUzoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlQ29sbGlzaW9ucyhlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfQ09MTElTSU9OUz4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9TS1lCT1g6IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZVNreWJveChnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJFU0VUX1NLWUJPWDoge1xuICAgICAgICAgICAgaGFuZGxlUmVzZXRTa3lib3goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0FMTF9TQ1JJUFRfTUVUSE9EOiB7XG4gICAgICAgICAgICBoYW5kbGVDYWxsU2NyaXB0TWV0aG9kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNBTExfU0NSSVBUX01FVEhPRD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0ZWRFbnRpdGllcy5hZGQoZW50aXR5KTtcbiAgfVxuXG4gIC8vIExJR0hUU19PTlxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNPbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChsaWdodCkge1xuICAgICAgbGlnaHQuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBMSUdIVFNfT0ZGXG4gIGZ1bmN0aW9uIGhhbmRsZUxpZ2h0c09mZihlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChsaWdodCkge1xuICAgICAgbGlnaHQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gTElHSFRTX01PRElGWVxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNNb2RpZnkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZPikge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghbGlnaHQpIHJldHVybjtcbiAgICBpZiAocGF5bG9hZC5hY3RpdmUgIT09IHVuZGVmaW5lZCkgbGlnaHQuYWN0aXZlID0gcGF5bG9hZC5hY3RpdmU7XG4gICAgaWYgKHBheWxvYWQuY29sb3IpIGxpZ2h0LmNvbG9yID0gcGF5bG9hZC5jb2xvcjtcbiAgICBpZiAocGF5bG9hZC5pbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbGlnaHQuaW50ZW5zaXR5ID0gcGF5bG9hZC5pbnRlbnNpdHk7XG4gIH1cblxuICAvLyBDSEFOR0VfQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZUNhbWVyYShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE+KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcGF5bG9hZC52aXJ0dWFsQ2FtZXJhRW50aXR5O1xuXG4gICAgLy8gSWYgdGFyZ2V0IGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBlbnRpdHkgdGhhdCBvd25zIHRoZSBBY3Rpb25zIGNvbXBvbmVudFxuICAgIC8vIElmIHRoYXQgZW50aXR5IGhhcyBWaXJ0dWFsQ2FtZXJhLCB1c2UgaXQ7IG90aGVyd2lzZSByZXZlcnQgdG8gbm9ybWFsIGJlaGF2aW9yXG4gICAgbGV0IGNhbWVyYUVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkID0gdGFyZ2V0O1xuXG4gICAgaWYgKGNhbWVyYUVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgdGhlIGVudGl0eSB0aGF0IG93bnMgdGhlIEFjdGlvbnMgY29tcG9uZW50IGlmIGl0IGhhcyBWaXJ0dWFsQ2FtZXJhXG4gICAgICBpZiAoVmlydHVhbENhbWVyYS5oYXMoZW50aXR5KSkge1xuICAgICAgICBjYW1lcmFFbnRpdHkgPSBlbnRpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBjYW1lcmEgc3BlY2lmaWVkIGFuZCBlbnRpdHkgZG9lc24ndCBoYXZlIFZpcnR1YWxDYW1lcmEsIHJldmVydCB0byBub3JtYWxcbiAgICAgICAgaWYgKE1haW5DYW1lcmEuaGFzKGVuZ2luZS5DYW1lcmFFbnRpdHkpKSB7XG4gICAgICAgICAgTWFpbkNhbWVyYS5kZWxldGVGcm9tKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IGlmIHRhcmdldCBpcyAwIChSb290RW50aXR5KSwgdHJlYXQgaXQgYXMgXCJyZW1vdmUgY2FtZXJhXCJcbiAgICAvLyBUaGlzIGFsbG93cyB1c2luZyAwIGFzIGEgc2VudGluZWwgdmFsdWUgaW4gY29tcG9zaXRlLmpzb25cbiAgICBpZiAoY2FtZXJhRW50aXR5ID09PSBlbmdpbmUuUm9vdEVudGl0eSkge1xuICAgICAgaWYgKE1haW5DYW1lcmEuaGFzKGVuZ2luZS5DYW1lcmFFbnRpdHkpKSB7XG4gICAgICAgIE1haW5DYW1lcmEuZGVsZXRlRnJvbShlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhlIHNlbGVjdGVkIGVudGl0eSBoYXMgVmlydHVhbENhbWVyYSBiZWZvcmUgYXBwbHlpbmdcbiAgICBpZiAoIVZpcnR1YWxDYW1lcmEuaGFzKGNhbWVyYUVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBNYWluQ2FtZXJhLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuQ2FtZXJhRW50aXR5LCB7XG4gICAgICB2aXJ0dWFsQ2FtZXJhRW50aXR5OiBjYW1lcmFFbnRpdHksXG4gICAgfSk7XG4gIH1cblxuICAvLyBDSEFOR0VfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VUZXh0KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1RFWFQ+KSB7XG4gICAgY29uc3QgdGV4dCA9IFRleHRTaGFwZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG5cbiAgICB0ZXh0LnRleHQgPSBwYXlsb2FkLnRleHQ7XG4gICAgaWYgKHBheWxvYWQuZm9udFNpemUgIT09IHVuZGVmaW5lZCkgdGV4dC5mb250U2l6ZSA9IHBheWxvYWQuZm9udFNpemU7XG4gICAgaWYgKHBheWxvYWQuY29sb3IpIHRleHQudGV4dENvbG9yID0gcGF5bG9hZC5jb2xvcjtcbiAgfVxuXG4gIC8vIEZSRUVaRV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRnJlZXplUGxheWVyKCkge1xuICAgIElucHV0TW9kaWZpZXIuY3JlYXRlT3JSZXBsYWNlKGVuZ2luZS5QbGF5ZXJFbnRpdHksIHtcbiAgICAgIG1vZGU6IElucHV0TW9kaWZpZXIuTW9kZS5TdGFuZGFyZCh7XG4gICAgICAgIGRpc2FibGVBbGw6IHRydWUsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVORlJFRVpFX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVVbmZyZWV6ZVBsYXllcigpIHtcbiAgICBJbnB1dE1vZGlmaWVyLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuUGxheWVyRW50aXR5LCB7XG4gICAgICBtb2RlOiBJbnB1dE1vZGlmaWVyLk1vZGUuU3RhbmRhcmQoe1xuICAgICAgICBkaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ0hBTkdFX0NPTExJU0lPTlNcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlQ29sbGlzaW9ucyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX0NPTExJU0lPTlM+LFxuICApIHtcbiAgICBjb25zdCB7IHZpc2libGVDb2xsaXNpb25zLCBpbnZpc2libGVDb2xsaXNpb25zIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGdsdGYgPSBHbHRmQ29udGFpbmVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBtZXNoQ29sbGlkZXIgPSBNZXNoQ29sbGlkZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKGdsdGYpIHtcbiAgICAgIGlmICh2aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsdGYudmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSB2aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICAgIGlmIChpbnZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gaW52aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWVzaENvbGxpZGVyKSB7XG4gICAgICAvLyBGb3IgTWVzaENvbGxpZGVyLCB1c2UgdmlzaWJsZUNvbGxpc2lvbnMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBpbnZpc2libGVDb2xsaXNpb25zXG4gICAgICBpZiAodmlzaWJsZUNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IHZpc2libGVDb2xsaXNpb25zO1xuICAgICAgfSBlbHNlIGlmIChpbnZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSBpbnZpc2libGVDb2xsaXNpb25zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENIQU5HRV9TS1lCT1hcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlU2t5Ym94KHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YPikge1xuICAgIGNvbnN0IHsgdGltZSwgZGlyZWN0aW9uIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gRW5zdXJlIHRpbWUgaXMgYSB2YWxpZCBudW1iZXIgKHNlY29uZHMgc2luY2UgbWlkbmlnaHQpXG4gICAgaWYgKHR5cGVvZiB0aW1lICE9PSAnbnVtYmVyJyB8fCBpc05hTih0aW1lKSB8fCB0aW1lIDwgMCB8fCB0aW1lID4gODY0MDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgc2t5Ym94IHRpbWUgdmFsdWU6JywgdGltZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU2t5Ym94VGltZS5jcmVhdGVPclJlcGxhY2UoZW5naW5lLlJvb3RFbnRpdHksIHtcbiAgICAgIGZpeGVkVGltZTogdGltZSxcbiAgICAgIHRyYW5zaXRpb25Nb2RlOiBkaXJlY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBSRVNFVF9TS1lCT1hcbiAgZnVuY3Rpb24gaGFuZGxlUmVzZXRTa3lib3goKSB7XG4gICAgaWYgKFNreWJveFRpbWUuaGFzKGVuZ2luZS5Sb290RW50aXR5KSkge1xuICAgICAgU2t5Ym94VGltZS5kZWxldGVGcm9tKGVuZ2luZS5Sb290RW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FOSU1BVElPTlxuICBmdW5jdGlvbiBpbml0UGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIH0pO1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVBbmltYXRpb25XZWlnaHQocmF3V2VpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyYXdXZWlnaHQgPCAwIHx8IHJhd1dlaWdodCA+IDEpIHJldHVybiAxO1xuICAgIHJldHVybiByYXdXZWlnaHQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QW5pbWF0aW9uKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KSB7XG4gICAgY29uc3QgeyBhbmltYXRpb24sIGxvb3AsIHNob3VsZFJlc2V0IH0gPSBwYXlsb2FkO1xuXG4gICAgY29uc3QgYW5pbWF0b3IgPSBBbmltYXRvci5nZXRNdXRhYmxlKGVudGl0eSk7XG4gICAgaWYgKCFhbmltYXRvci5zdGF0ZXMuc29tZSgkID0+ICQuY2xpcCA9PT0gYW5pbWF0aW9uKSkge1xuICAgICAgYW5pbWF0b3Iuc3RhdGVzID0gW1xuICAgICAgICAuLi5hbmltYXRvci5zdGF0ZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGlwOiBhbmltYXRpb24sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpcCA9IEFuaW1hdG9yLmdldENsaXAoZW50aXR5LCBhbmltYXRpb24pO1xuICAgICAgY2xpcC5wbGF5aW5nID0gdHJ1ZTtcbiAgICAgIGNsaXAubG9vcCA9IGxvb3AgPz8gZmFsc2U7XG4gICAgICBjbGlwLndlaWdodCA9IG5vcm1hbGl6ZUFuaW1hdGlvbldlaWdodChjbGlwLndlaWdodCA/PyAxKTtcbiAgICAgIGlmIChzaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsaXAuc2hvdWxkUmVzZXQgPSBzaG91bGRSZXNldDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwbGF5aW5nIGFuaW1hdGlvbicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBbmltYXRpb24oZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KSB7XG4gICAgaWYgKEFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9TVEFURVxuICBmdW5jdGlvbiBoYW5kbGVTZXRTdGF0ZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4pIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKHN0YXRlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHN0YXRlcyk7XG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlO1xuICAgICAgbmV4dFN0YXRlID0gaXNWYWxpZFN0YXRlKHN0YXRlcywgbmV4dFN0YXRlKSA/IG5leHRTdGF0ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBzdGF0ZXMuY3VycmVudFZhbHVlID8/IGRlZmF1bHRWYWx1ZSA/PyB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZXMucHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XG4gICAgICBzdGF0ZXMuY3VycmVudFZhbHVlID0gbmV4dFN0YXRlO1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU1RBUlRfVFdFRU5cbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUd2VlbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICAvLyBHZXQgdGhlIGluaXRpYWwgdHdlZW4gaWYgZXhpc3RzIHRvIHJldmVydCB0aGUgb2JqZWN0IG1vdmVtZW50IHRvIHRoYXQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYSB0d2VlbiBmcm9tIGFjdGlvbnNcbiAgICAgIGNvbnN0IGluaXRpYWxUd2VlbiA9IFR3ZWVuQ29tcG9uZW50LmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICAgIGxldCB0d2VlbjtcblxuICAgICAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUd2VlblR5cGUuTU9WRV9JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVNb3ZlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlJPVEFURV9JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuU0NBTEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuS0VFUF9ST1RBVElOR19JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVLZWVwUm90YXRpbmdJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiB0eXBlOiAke3BheWxvYWQudHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRUd2VlbihlbnRpdHksIGluaXRpYWxUd2VlbiwgdHdlZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RhcnQgdG8gdGhlIGluaXRpYWwgbW92ZW1lbnQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYW4gYWRpdGlvbmFsIHR3ZWVuXG4gIGZ1bmN0aW9uIHJldmVydFR3ZWVuKGVudGl0eTogRW50aXR5LCBpbml0aWFsVHdlZW46IFBCVHdlZW4gfCBudWxsLCB0d2VlbjogUEJUd2Vlbikge1xuICAgIGNvbnN0IHR3ZWVuU2VxdWVuY2UgPSBUd2VlblNlcXVlbmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBsZXQgX3JldmVydFR3ZWVuID0ge1xuICAgICAgLi4udHdlZW4sXG4gICAgfTtcblxuICAgIGlmICghaW5pdGlhbFR3ZWVuIHx8ICF0d2VlblNlcXVlbmNlIHx8ICF0d2VlblNlcXVlbmNlLmxvb3ApIHJldHVybjtcblxuICAgIHN3aXRjaCAoaW5pdGlhbFR3ZWVuLm1vZGU/LiRjYXNlKSB7XG4gICAgICBjYXNlICdtb3ZlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuTW92ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ21vdmUnOyBtb3ZlOiBNb3ZlIH0pLm1vdmUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5tb3ZlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3JvdGF0ZSc7IHJvdGF0ZTogUm90YXRlIH0pLnJvdGF0ZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLnJvdGF0ZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzY2FsZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlNjYWxlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAnc2NhbGUnOyBzY2FsZTogU2NhbGUgfSkuc2NhbGUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5zY2FsZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiBtb2RlOiAke2luaXRpYWxUd2Vlbi5tb2RlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbml0aWFsIHR3ZWVuIGlzIG5vdCBwbGF5aW5nIGJ1dCB0aGUgbG9vcCBwcm9wZXJ0eSBpcyBhY3RpdmUsIHN0YXJ0IGl0XG4gICAgaW5pdGlhbFR3ZWVuLnBsYXlpbmcgPSB0cnVlO1xuICAgIHR3ZWVuU2VxdWVuY2Uuc2VxdWVuY2UgPSBbX3JldmVydFR3ZWVuLCBpbml0aWFsVHdlZW5dO1xuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopO1xuICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0ucG9zaXRpb24sIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgZW5kOiBlbmRQb3NpdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBST1RBVEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRSb3RhdGlvbiA9IHJlbGF0aXZlID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICBlbmQ6IGVuZFJvdGF0aW9uLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNDQUxFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlU2NhbGVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopO1xuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5TY2FsZSh7XG4gICAgICAgIHN0YXJ0OiB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgIGVuZDogZW5kU2NhbGUsXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsIC8vIGZyb20gc2VjcyB0byBtc1xuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gS0VFUF9ST1RBVElOR19JVEVNIChjb250aW51b3VzIHJvdGF0aW9uKVxuICBmdW5jdGlvbiBoYW5kbGVLZWVwUm90YXRpbmdJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBkaXIgPSB0d2Vlbi5kaXJlY3Rpb24gPz8geyB4OiAwLCB5OiAxLCB6OiAwIH07XG4gICAgY29uc3Qgc3BlZWQgPSB0d2Vlbi5zcGVlZCA/PyAxO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuUm90YXRlQ29udGludW91cyh7XG4gICAgICAgIGRpcmVjdGlvbjogUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKGRpci54LCBkaXIueSwgZGlyLnopLFxuICAgICAgICBzcGVlZCxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IChkdXJhdGlvbiA/PyAwKSAqIDEwMDAsXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX1RXRUVOXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BUd2VlbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmIChUd2VlbkNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgVHdlZW5Db21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNMSURFX1RFWFRVUkVcbiAgZnVuY3Rpb24gaGFuZGxlU2xpZGVUZXh0dXJlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRT4pIHtcbiAgICBjb25zdCBkaXIgPSBwYXlsb2FkLmRpcmVjdGlvbjtcbiAgICBjb25zdCBzcGVlZCA9IHBheWxvYWQuc3BlZWQ7XG4gICAgY29uc3QgbW92ZW1lbnRUeXBlID0gcGF5bG9hZC5tb3ZlbWVudFR5cGUgYXMgdW5rbm93biBhcyBTZGtUZXh0dXJlTW92ZW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGF5bG9hZC5kdXJhdGlvbiA/PyAwO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuVGV4dHVyZU1vdmVDb250aW51b3VzKHtcbiAgICAgICAgZGlyZWN0aW9uOiB7IHg6IGRpci54LCB5OiBkaXIueSB9LFxuICAgICAgICBzcGVlZCxcbiAgICAgICAgbW92ZW1lbnRUeXBlLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgZWFzaW5nRnVuY3Rpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvLyBTRVRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVTZXRDb3VudGVyKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgPSBwYXlsb2FkLmNvdW50ZXI7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElOQ1JFTUVOVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBheWxvYWQuYW1vdW50ID8/IDE7XG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSBhbW91bnQ7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgLT0gYW1vdW50O1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlTb3VuZChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+KSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AsIHZvbHVtZSwgZ2xvYmFsIH0gPSBwYXlsb2FkO1xuICAgIGlmIChBdWRpb1NvdXJjZS5oYXMoZW50aXR5KSkge1xuICAgICAgQXVkaW9Tb3VyY2UucGxheVNvdW5kKGVudGl0eSwgc3JjKTtcbiAgICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgICAgYXVkaW9Tb3VyY2UubG9vcCA9IGxvb3A7XG4gICAgICBhdWRpb1NvdXJjZS52b2x1bWUgPSB2b2x1bWUgPz8gMTtcbiAgICAgIGF1ZGlvU291cmNlLmdsb2JhbCA9IGdsb2JhbCA/PyBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlKGVudGl0eSwge1xuICAgICAgICBhdWRpb0NsaXBVcmw6IHNyYyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wU291bmQoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4pIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfVklTSUJJTElUWVxuICBmdW5jdGlvbiBoYW5kbGVTZXRWaXNpYmlsaXR5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KSB7XG4gICAgY29uc3QgeyB2aXNpYmxlLCBjb2xsaWRlciB9ID0gcGF5bG9hZDtcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgdmlzaWJsZSB9KTtcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChjb2xsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZ2x0Zikge1xuICAgICAgICBnbHRmLmludmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSBjb2xsaWRlcjtcbiAgICAgICAgaWYgKGNvbGxpZGVyID09PSAwKSB7XG4gICAgICAgICAgZ2x0Zi52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVzaENvbGxpZGVyKSB7XG4gICAgICAgIG1lc2hDb2xsaWRlci5jb2xsaXNpb25NYXNrID0gY29sbGlkZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQVRUQUNIX1RPX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5jaG9yUG9pbnRJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCB1c2VyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk/LnVzZXJJZDtcbiAgICBpZiAodXNlcikge1xuICAgICAgQXZhdGFyQXR0YWNoLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgYW5jaG9yUG9pbnRJZDogYW5jaG9yUG9pbnRJZCwgYXZhdGFySWQ6IHVzZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gREVUQUNIX0ZST01fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+LFxuICApIHtcbiAgICBpZiAoQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdmF0YXJBdHRhY2guZGVsZXRlRnJvbShlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRFTEVQT1JUIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgbW9kZSwgeCwgeSwgcmVhbG0gfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAobW9kZSA9PT0gVGVsZXBvcnRNb2RlLlRPX1dPUkxEKSB7XG4gICAgICBpZiAocmVhbG0pIHtcbiAgICAgICAgdm9pZCBjaGFuZ2VSZWFsbSh7IHJlYWxtIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT19DT09SRElOQVRFUyBtb2RlXG4gICAgICBpZiAoeCAhPT0gdW5kZWZpbmVkICYmIHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2b2lkIHRlbGVwb3J0VG8oe1xuICAgICAgICAgIHdvcmxkQ29vcmRpbmF0ZXM6IHsgeCwgeSB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNT1ZFIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVyKF9lbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBwYXlsb2FkLnBvc2l0aW9uLFxuICAgICAgY2FtZXJhVGFyZ2V0OiBwYXlsb2FkLmNhbWVyYVRhcmdldCxcbiAgICB9O1xuICAgIHZvaWQgbW92ZVBsYXllclRvKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUExBWSBERUZBVUxUIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IGVtb3RlIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgdHJpZ2dlckVtb3RlKHsgcHJlZGVmaW5lZEVtb3RlOiBlbW90ZSB9KTtcbiAgfVxuXG4gIC8vIFBMQVkgQ1VTVE9NIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AgfSA9IHBheWxvYWQ7XG4gICAgdm9pZCB0cmlnZ2VyU2NlbmVFbW90ZSh7IHNyYywgbG9vcCB9KTtcbiAgfVxuXG4gIC8vIE9QRU4gTElOS1xuICBmdW5jdGlvbiBoYW5kbGVPcGVuTGluayhfZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+KSB7XG4gICAgY29uc3QgeyB1cmwgfSA9IHBheWxvYWQ7XG4gICAgdm9pZCBvcGVuRXh0ZXJuYWxVcmwoeyB1cmwgfSk7XG4gIH1cblxuICAvLyBQTEFZX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlWaWRlbyhlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPikge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdmlkZW9Tb3VyY2UgJiYgcGF5bG9hZC5zcmMpIHtcbiAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgc3JjOiBwYXlsb2FkLnNyYyxcbiAgICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyAxLFxuICAgICAgICBsb29wOiBwYXlsb2FkLmxvb3AgPz8gZmFsc2UsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gSW5pdCB2aWRlbyBwbGF5ZXIgbWF0ZXJpYWwgd2hlbiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSBhIFZpZGVvUGxheWVyIGNvbXBvbmVudCBkZWZpbmVkXG4gICAgICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbChlbnRpdHksIHsgTWF0ZXJpYWwgfSwgTWF0ZXJpYWwuZ2V0T3JOdWxsKGVudGl0eSkpO1xuICAgIH1cbiAgICBpZiAodmlkZW9Tb3VyY2UpIHtcbiAgICAgIGlmICh2aWRlb1NvdXJjZT8uc3JjICE9PSBwYXlsb2FkLnNyYykge1xuICAgICAgICB2aWRlb1NvdXJjZS5zcmMgPSBwYXlsb2FkLnNyYyA/PyAnJztcbiAgICAgIH1cbiAgICAgIHZpZGVvU291cmNlLnZvbHVtZSA9IHBheWxvYWQudm9sdW1lID8/IHZpZGVvU291cmNlLnZvbHVtZTtcbiAgICAgIHZpZGVvU291cmNlLmxvb3AgPSBwYXlsb2FkLmxvb3AgPz8gdmlkZW9Tb3VyY2UubG9vcDtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlO1xuICAgIH1cbiAgfVxuICAvLyBTVE9QX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BWaWRlbyhlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodmlkZW9Tb3VyY2UpIHtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgeyB1cmwsIHZvbHVtZSB9ID0gcGF5bG9hZDtcbiAgICBBdWRpb1N0cmVhbS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICB1cmwsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNUT1BfQVVESU9fU1RSRUFNXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1N0cmVhbS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPikge1xuICAgIGNvbnN0IHsgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udCwgZm9udFNpemUsIHRleHRBbGlnbiB9ID0gcGF5bG9hZDtcbiAgICAvLyBDcmVhdGUgYSBuZXcgZW50aXR5IGZvciB0aGUgdGV4dFxuICAgIGNvbnN0IHRleHRFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KCk7XG4gICAgLy8gU2V0IHRoZSB0ZXh0IGVudGl0eSBhcyBhIGNoaWxkIG9mIHRoZSBlbnRpdHkgdGhhdCBjYWxsZWQgdGhlIGFjdGlvblxuICAgIHRleHRFbnRpdGllcy5zZXQoZW50aXR5LCB0ZXh0RW50aXR5KTtcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB0ZXh0RW50aXR5KTtcbiAgICBpZiAodWlUcmFuc2Zvcm1Db21wb25lbnQpIHtcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IGVudGl0eTtcbiAgICAgIC8vIFNldCB0aGUgcG9pbnRlciBmaWx0ZXIgdG8gbm9uZSwgYWxsb3dpbmcgcGxheWVycyB0byBjb250aW51ZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzY2VuZVxuICAgICAgdWlUcmFuc2Zvcm1Db21wb25lbnQucG9pbnRlckZpbHRlciA9IFBvaW50ZXJGaWx0ZXJNb2RlLlBGTV9OT05FO1xuICAgICAgVWlUZXh0LmNyZWF0ZU9yUmVwbGFjZSh0ZXh0RW50aXR5LCB7XG4gICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICBmb250OiBmb250IGFzIHVua25vd24gYXMgRm9udCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduIGFzIHVua25vd24gYXMgVGV4dEFsaWduTW9kZSxcbiAgICAgIH0pO1xuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBISURFX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZVRleHQoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPikge1xuICAgIGNvbnN0IHRleHRFbnRpdHkgPSB0ZXh0RW50aXRpZXMuZ2V0KGVudGl0eSk7XG4gICAgaWYgKHRleHRFbnRpdHkpIHtcbiAgICAgIC8vIERlbGV0ZSB0ZXh0IGNvbXBvbmVudFxuICAgICAgVWlUZXh0LmRlbGV0ZUZyb20odGV4dEVudGl0eSk7XG4gICAgICAvLyBEZWxldGUgdHJhbnNmb3JtIGNvbXBvbmVudFxuICAgICAgVWlUcmFuc2Zvcm0uZGVsZXRlRnJvbSh0ZXh0RW50aXR5KTtcbiAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG4gICAgICBzdG9wVGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9URVhUKTtcbiAgICAgIC8vIERlbGV0ZSB0ZXh0IGVudGl0eSBmcm9tIHRoZSBtYXBcbiAgICAgIHRleHRFbnRpdGllcy5kZWxldGUoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KTtcbiAgICByZXR1cm4gYWN0aW9ucz8udmFsdWUuZmluZCgkID0+ICQubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfREVMQVk+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCB0aW1lb3V0IH0gPSBwYXlsb2FkO1xuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIGFjdGlvbk5hbWUsIHRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRGVsYXkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPikge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkO1xuICAgIHN0b3BUaW1lb3V0KGVudGl0eSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vIFNUQVJUX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRMb29wKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMsIGludGVydmFsIH0gPSBwYXlsb2FkO1xuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpO1xuICAgICAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0xPT1A+KSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWQ7XG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vIENMT05FX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVDbG9uZUVudGl0eShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4pIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gY2xvbmUgZW50aXR5XG4gICAgY29uc3QgeyBjbG9uZWQsIGVudGl0aWVzIH0gPSBjbG9uZShlbnRpdHksIGVuZ2luZSwgVHJhbnNmb3JtLCBUcmlnZ2Vycywgc2RrSGVscGVycyk7XG4gICAgZm9yIChjb25zdCBjbG9uZWQgb2YgZW50aXRpZXMudmFsdWVzKCkpIHtcbiAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgIGluaXRBY3Rpb25zKGNsb25lZCk7XG4gICAgICBpbml0VHJpZ2dlcnMoY2xvbmVkKTtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoY2xvbmVkKTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTE9ORSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE9yQ3JlYXRlTXV0YWJsZShjbG9uZWQpO1xuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLy8gUkVNT1ZFX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVSZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWT4pIHtcbiAgICAvLyBSZW1vdmUgYWxsIHRpbWVycyBiZWZvcmUgcmVtb3ZlIHRoZSBlbnRpdHlcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KTtcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSk7XG5cbiAgICBjb25zdCB0cmVlID0gZ2V0Q29tcG9uZW50RW50aXR5VHJlZShlbmdpbmUsIGVudGl0eSwgVHJhbnNmb3JtKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eVRvUmVtb3ZlIG9mIHRyZWUpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoZW50aXR5VG9SZW1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVpU3RhY2soYWxpZ246IFNjcmVlbkFsaWduTW9kZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2FsaWduLmFsaWduSXRlbXN9LCR7YWxpZ24uanVzdGlmeUNvbnRlbnR9YDtcblxuICAgIGlmICghdWlTdGFja3MuaGFzKGtleSkpIHtcbiAgICAgIHVpU3RhY2tzLnNldChrZXksIGVuZ2luZS5hZGRFbnRpdHkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVpU3RhY2tzLmdldChrZXkpITtcbiAgfVxuXG4gIC8vIFNIT1dfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd0ltYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4pIHtcbiAgICBjb25zdCB7IHNyYywgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udFNpemUsIGFsaWduLCBoZWlnaHQsIHdpZHRoIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3QgZW50aXR5XG4gICAgZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIGVuZ2luZS5Sb290RW50aXR5KTtcblxuICAgIC8vIEdldCBhIFVJIFN0YWNrIGVudGl0eVxuICAgIGNvbnN0IHNjcmVlbkFsaWduID0gbWFwQWxpZ25Ub1NjcmVlbkFsaWduKGFsaWduKTtcbiAgICBjb25zdCB1aVN0YWNrID0gZ2V0VWlTdGFjayhzY3JlZW5BbGlnbik7XG5cbiAgICAvLyBUT0RPOiBGaXggaXRlbXMgd3JhcHBpbmdcbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgVHJhbnNmb3JtIGZvciB0aGUgVUkgc3RhY2tcbiAgICBjb25zdCB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIHVpU3RhY2spO1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuYWxpZ25JdGVtcyA9IHNjcmVlbkFsaWduLmFsaWduSXRlbXM7XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5qdXN0aWZ5Q29udGVudCA9IHNjcmVlbkFsaWduLmp1c3RpZnlDb250ZW50O1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQucG9zaXRpb25UeXBlID0gWUdQb3NpdGlvblR5cGUuWUdQVF9BQlNPTFVURTtcblxuICAgIC8vIENyZWF0ZSBhIFVJIGVudGl0eSBhbmQgYSBUcmFuc2Zvcm0gY29tcG9uZW50IGZvciB0aGUgaW1hZ2VcbiAgICBjb25zdCBpbWFnZUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKTtcbiAgICBjb25zdCBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFxuICAgICAgVWlUcmFuc2Zvcm0sXG4gICAgICBpbWFnZUVudGl0eSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgWUdVbml0LllHVV9QT0lOVCxcbiAgICApO1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IHVpU3RhY2s7XG4gICAgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQucG9pbnRlckZpbHRlciA9IFBvaW50ZXJGaWx0ZXJNb2RlLlBGTV9CTE9DSztcblxuICAgIC8vIENyZWF0ZSBCYWNrZ3JvdW5kIENvbXBvbmVudFxuICAgIGdldFVJQmFja2dyb3VuZChVaUJhY2tncm91bmQsIGltYWdlRW50aXR5LCBzcmMpO1xuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIC8vIENyZWF0ZSBUZXh0IENvbXBvbmVudFxuICAgICAgLy8gVE9ETzogRml4IHRleHQgd3JhcHBpbmcgYW5kIHNjcm9sbGluZ1xuICAgICAgZ2V0VUlUZXh0KFVpVGV4dCwgaW1hZ2VFbnRpdHksIHRleHQsIGZvbnRTaXplLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgICAge1xuICAgICAgICBlbnRpdHk6IGltYWdlRW50aXR5LFxuICAgICAgICBvcHRzOiB7XG4gICAgICAgICAgYnV0dG9uOiBJbnB1dEFjdGlvbi5JQV9QT0lOVEVSLFxuICAgICAgICAgIGhvdmVyVGV4dDogJ0NsaWNrJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuc2V0KGVudGl0eSwgaW1hZ2VFbnRpdHkpO1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xJQ0tfSU1BR0UpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKGhpZGVBZnRlclNlY29uZHMpIHtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9JTUFHRSwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgeyBpbWFnZUVudGl0eTogaW1hZ2VFbnRpdHkgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZUltYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9JTUFHRT4pIHtcbiAgICBjb25zdCB7IGltYWdlRW50aXR5IH0gPSBwYXlsb2FkO1xuXG4gICAgaWYgKGltYWdlRW50aXR5KSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGltYWdlRW50aXR5IGFzIEVudGl0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbWFnZSA9IGxhc3RVaUVudGl0eUNsaWNrZWQuZ2V0KGVudGl0eSk7XG4gICAgICBpZiAoY2xpY2tlZEltYWdlKSB7XG4gICAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoY2xpY2tlZEltYWdlKTtcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5kZWxldGUoZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEQU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlRGFtYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPikge1xuICAgIGNvbnN0IHsgcmFkaXVzLCBsYXllciwgaGl0cyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBlbnRpdHlQb3NpdGlvbiA9IEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KVxuICAgICAgPyBnZXRQbGF5ZXJQb3NpdGlvbigpXG4gICAgICA6IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSk7XG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgZGFtYWdlVGFyZ2V0cykge1xuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBnZXRXb3JsZFBvc2l0aW9uKHRhcmdldCk7XG4gICAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2UoZW50aXR5UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKTtcblxuICAgICAgLy8gYXZvaWQgY2F1c2luZyBkYW1hZ2UgdG8gdGhlIGVudGl0eSBpdHNlbGYgb3IgaXRzIGNoaWxkcmVuXG4gICAgICBjb25zdCBlbnRpdHlUcmVlID0gQXJyYXkuZnJvbShnZXRDb21wb25lbnRFbnRpdHlUcmVlKGVuZ2luZSwgZW50aXR5LCBUcmFuc2Zvcm0pKTtcbiAgICAgIGNvbnN0IGlzUGFydE9mRW50aXR5VHJlZSA9IGVudGl0eVRyZWUuc29tZSgkID0+ICQgPT09IHRhcmdldCk7XG4gICAgICBpZiAoaXNQYXJ0T2ZFbnRpdHlUcmVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgaWYgKGxheWVyID09PSBQcm94aW1pdHlMYXllci5QTEFZRVIpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgICAgIGlmIChyb290ICE9PSBlbmdpbmUuUGxheWVyRW50aXR5ICYmIHJvb3QgIT09IGVuZ2luZS5DYW1lcmFFbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuTk9OX1BMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICAgICAgaWYgKHJvb3QgPT09IGVuZ2luZS5QbGF5ZXJFbnRpdHkgfHwgcm9vdCA9PT0gZW5naW5lLkNhbWVyYUVudGl0eSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2UgPD0gcmFkaXVzKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gaGl0cyA9PT0gdW5kZWZpbmVkID8gMSA6IE1hdGgubWF4KGhpdHMsIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpO1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9EQU1BR0UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRV9QTEFZRVJfSEVSRVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVySGVyZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSX0hFUkU+LFxuICApIHtcbiAgICBjb25zdCBoZXJlID0gZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gZ2V0V29ybGRSb3RhdGlvbihlbnRpdHkpO1xuXG4gICAgLy8gV2UgV2FudCB0aGUgcGxheWVyIHRvIGxvb2sgMW0gaW4gZnJvbnQgb2YgdGhlIGVudGl0eVxuICAgIGNvbnN0IGZvcndhcmQgPSBWZWN0b3IzLkZvcndhcmQoKTtcbiAgICBjb25zdCByb3RhdGVkRGlyZWN0aW9uID0gVmVjdG9yMy5yb3RhdGUoZm9yd2FyZCwgcm90YXRpb24pO1xuICAgIGNvbnN0IG1vdmVEZWx0YSA9IFZlY3RvcjMuc2NhbGUocm90YXRlZERpcmVjdGlvbiwgMSk7XG5cbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyh7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBoZXJlLFxuICAgICAgYXZhdGFyVGFyZ2V0OiBWZWN0b3IzLmFkZChoZXJlLCBtb3ZlRGVsdGEpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fUExBWUVSX1NQQVdOKTtcbiAgfVxuXG4gIC8vIFBMQVlFUl9GQUNFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheWVyRmFjZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZRVJfRkFDRV9JVEVNPixcbiAgKSB7XG4gICAgY29uc3QgaXRlbVBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpO1xuICAgIGNvbnN0IGN1cnJlbnRQbGF5ZXJQb3NpdGlvbiA9IGdldFBsYXllclBvc2l0aW9uKCk7XG4gICAgdm9pZCBtb3ZlUGxheWVyVG8oe1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogY3VycmVudFBsYXllclBvc2l0aW9uLFxuICAgICAgYXZhdGFyVGFyZ2V0OiBpdGVtUG9zaXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBQTEFDRV9PTl9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlUGxhY2VPblBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIHBsYXllcikge1xuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gcGxheWVyLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJPVEFURV9BU19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlQXNQbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBwbGF5ZXIgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgcGxheWVyKSB7XG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBwbGF5ZXIucm90YXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUExBQ0VfT05fQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25DYW1lcmEoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBjYW1lcmEpIHtcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IGNhbWVyYS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQT4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgY2FtZXJhID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIGNhbWVyYSkge1xuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gY2FtZXJhLnJvdGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9QT1NJVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTZXRQb3NpdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9QT1NJVElPTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlbGF0aXZlKSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuYWRkKFxuICAgICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgICBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9ST1RBVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTZXRSb3RhdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlbGF0aXZlKSB7XG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24ubXVsdGlwbHkoXG4gICAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICAgIFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU0NBTEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U2NhbGUoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU0NBTEU+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGT0xMT1dfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUZvbGxvd1BsYXllcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+KSB7XG4gICAgY29uc3QgeyBzcGVlZCwgeCwgeSwgeiwgbWluRGlzdGFuY2UgfSA9IHBheWxvYWQ7XG4gICAgZm9sbG93TWFwLnNldChlbnRpdHksIHtcbiAgICAgIHRhcmdldDogZW5naW5lLlBsYXllckVudGl0eSxcbiAgICAgIHNwZWVkLFxuICAgICAgbWluRGlzdGFuY2UsXG4gICAgICBheGVzOiB7IHgsIHksIHogfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNUT1BfRk9MTE9XSU5HX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSPixcbiAgKSB7XG4gICAgZm9sbG93TWFwLmRlbGV0ZShlbnRpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmFuZG9tKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUkFORE9NPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhY3Rpb25zLmxlbmd0aCldO1xuICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVCYXRjaChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVIZWFsUGxheWVyKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KSB7XG4gICAgY29uc3QgeyBtdWx0aXBsaWVyIH0gPSBwYXlsb2FkO1xuXG4gICAgY29uc3QgZ2V0Um9vdCA9IChlbnRpdHk6IEVudGl0eSk6IEVudGl0eSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBnZXRFbnRpdHlQYXJlbnQoZW50aXR5KTtcbiAgICAgIHJldHVybiAhcGFyZW50ID8gZW50aXR5IDogZ2V0Um9vdChwYXJlbnQpO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBoZWFsVGFyZ2V0cykge1xuICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5KSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgobXVsdGlwbGllciA/PyAxLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0hFQUxfUExBWUVSKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcsIGluaXQ/OiBGbGF0RmV0Y2hJbml0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgLi4uKGluaXQgPyB7IGluaXQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YSdcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkpO1xuXG4gICAgICBpZiAoIWpzb24ub2spIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ganNvbi5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhbXBhaWduc0J5RGlzcGVuc2VyS2V5KGRpc3BlbnNlcktleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvY2FtcGFpZ25zL2tleXM/Y2FtcGFpZ25fa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc3BlbnNlcktleSl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodXJsKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhcHRjaGEoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhcHRjaGFgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFRva2VuKFxuICAgIGRpc3BlbnNlcktleTogc3RyaW5nLFxuICAgIGNhcHRjaGE/OiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9LFxuICApIHtcbiAgICBjb25zdCB1cmwgPSBgJHtSRVdBUkRTX1NFUlZFUl9VUkx9L2FwaS9yZXdhcmRzYDtcbiAgICBjb25zdCByZWFsbSA9IGF3YWl0IGdldFJlYWxtKHt9KTtcbiAgICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2FtcGFpZ25fa2V5OiBkaXNwZW5zZXJLZXksXG4gICAgICAgIGJlbmVmaWNpYXJ5OiAhcGxheWVyPy5pc0d1ZXN0ID8gcGxheWVyPy51c2VySWQgOiAnJyxcbiAgICAgICAgY2F0YWx5c3Q6IHJlYWxtLnJlYWxtSW5mbyA/IHJlYWxtLnJlYWxtSW5mby5iYXNlVXJsIDogJycsXG4gICAgICAgIC4uLihjYXB0Y2hhID8geyBjYXB0Y2hhX2lkOiBjYXB0Y2hhLmlkLCBjYXB0Y2hhX3ZhbHVlOiBjYXB0Y2hhLnZhbHVlIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbGFpbUFpcmRyb3AoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4pIHtcbiAgICBjb25zdCByZXdhcmRzID0gUmV3YXJkcy5nZXRPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIXJld2FyZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRlc3RNb2RlLCBjYW1wYWlnbklkLCBkaXNwZW5zZXJLZXkgfSA9IHJld2FyZHM7XG5cbiAgICBpZiAodGVzdE1vZGUpIHtcbiAgICAgIC8vIFRPRE86IFNob3cgYW4gVUkgaW5kaWNhdGluZyB0ZXN0aW5nIG1vZGVcbiAgICAgIC8vICdIYW5kbGUgQ2xhaW0gQWlyZHJvcCBpbiBUZXN0IE1vZGUgOiknXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmV0Y2hDYW1wYWlnbnNCeURpc3BlbnNlcktleShkaXNwZW5zZXJLZXkpXG4gICAgICAudGhlbihjYW1wYWlnbnMgPT4ge1xuICAgICAgICBjb25zdCBjYW1wYWlnbiA9IGNhbXBhaWducy5maW5kKChjOiBhbnkpID0+IGMuY2FtcGFpZ25faWQgPT09IGNhbXBhaWduSWQpO1xuICAgICAgICBpZiAoY2FtcGFpZ24gJiYgY2FtcGFpZ24uZW5hYmxlZCkge1xuICAgICAgICAgIGlmIChjYW1wYWlnbi5yZXF1aXJlc19jYXB0Y2hhKSB7XG4gICAgICAgICAgICBmZXRjaENhcHRjaGEoKVxuICAgICAgICAgICAgICAudGhlbihjYXB0Y2hhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FwdGNoYSkge1xuICAgICAgICAgICAgICAgICAgX3Nob3dDYXB0Y2hhUHJvbXB0KGVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbklkLFxuICAgICAgICAgICAgICAgICAgICBkaXNwZW5zZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGNhcHRjaGEsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChfZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgICAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhcHRjaGEnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0VG9rZW4oZGlzcGVuc2VyS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnLCBlcnJvclxuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc2hvd0NhcHRjaGFQcm9tcHQoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIGRhdGE6IHsgY2FtcGFpZ25JZDogc3RyaW5nOyBkaXNwZW5zZXJLZXk6IHN0cmluZzsgY2FwdGNoYTogYW55IH0sXG4gICkge1xuICAgIHNob3dDYXB0Y2hhUHJvbXB0KFxuICAgICAgZW5naW5lLFxuICAgICAgVWlUcmFuc2Zvcm0sXG4gICAgICBVaUJhY2tncm91bmQsXG4gICAgICBVaVRleHQsXG4gICAgICBVaUlucHV0LFxuICAgICAgVWlJbnB1dFJlc3VsdCxcbiAgICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gICAgICBkYXRhLFxuICAgICAgaW5wdXRUZXh0ID0+IHtcbiAgICAgICAgLy8gUmVxdWVzdCB0b2tlbiB3aXRoIGNhcHRjaGEgdmFsaWRhdGlvblxuICAgICAgICByZXF1ZXN0VG9rZW4oZGF0YS5kaXNwZW5zZXJLZXksIHtcbiAgICAgICAgICBpZDogZGF0YS5jYXB0Y2hhLmlkLFxuICAgICAgICAgIHZhbHVlOiBpbnB1dFRleHQsXG4gICAgICAgIH0pLnRoZW4oKHRva2VuOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIC8vICdUb2tlbiByZXF1ZXN0ZWQgc3VjY2Vzc2Z1bGx5JywgeyB0b2tlbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNhbGxTY3JpcHRNZXRob2QoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNBTExfU0NSSVBUX01FVEhPRD4sXG4gICkge1xuICAgIGNvbnN0IHsgc2NyaXB0UGF0aCwgbWV0aG9kTmFtZSwgcGFyYW1zIH0gPSBwYXlsb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhwYXJhbXMgfHwge30pO1xuICAgICAgY2FsbFNjcmlwdE1ldGhvZChlbnRpdHksIHNjcmlwdFBhdGgsIG1ldGhvZE5hbWUsIC4uLnBhcmFtVmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NjcmlwdCBBY3Rpb24gRXJyb3JdIEZhaWxlZCB0byBjYWxsICR7bWV0aG9kTmFtZX0gb24gJHtzY3JpcHRQYXRofTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
1204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFD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QVksRUFBRTtnQkFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkIsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNyQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUVaLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsc0JBQXNCLENBQzdCLE1BQWMsRUFDZCxPQUFxRDtRQUVyRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFbkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLFVBQVUsT0FBTyxVQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsa0JBQWtCLENBQUMsT0FBaUQ7UUFDM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUdELFNBQVMsWUFBWSxDQUFDLE1BQWM7UUFDbEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBUZXh0QWxpZ25Nb2RlLFxuICBGb250LFxuICBNb3ZlLFxuICBQQlR3ZWVuLFxuICBSb3RhdGUsXG4gIFNjYWxlLFxuICBQb2ludGVyRXZlbnRzU3lzdGVtLFxufSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQge1xuICBNYXRlcmlhbCxcbiAgQXVkaW9TdHJlYW0sXG4gIFlHVW5pdCxcbiAgWUdQb3NpdGlvblR5cGUsXG4gIFBvaW50ZXJGaWx0ZXJNb2RlLFxuICBJbnB1dEFjdGlvbixcbiAgTWVzaENvbGxpZGVyLFxuICBnZXRDb21wb25lbnRFbnRpdHlUcmVlLFxuICBUd2Vlbixcbn0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHR5cGUgeyBUZXh0dXJlTW92ZW1lbnRUeXBlIGFzIFNka1RleHR1cmVNb3ZlbWVudFR5cGUgfSBmcm9tICdAZGNsL2Vjcy9kaXN0L2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2RlY2VudHJhbGFuZC9zZGsvY29tcG9uZW50cy90d2Vlbi5nZW4nO1xuaW1wb3J0IHsgZ2V0RW50aXR5UGFyZW50LCBnZXRQbGF5ZXJQb3NpdGlvbiwgZ2V0V29ybGRQb3NpdGlvbiwgZ2V0V29ybGRSb3RhdGlvbiB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBheWxvYWQsIElTREtIZWxwZXJzLCBJUGxheWVyc0hlbHBlciwgU2NyZWVuQWxpZ25Nb2RlIH0gZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQge1xuICBBY3Rpb25UeXBlLFxuICBQcm94aW1pdHlMYXllcixcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgVGVsZXBvcnRNb2RlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0VUlCYWNrZ3JvdW5kLFxuICBnZXRVSVRleHQsXG4gIGdldFVJVHJhbnNmb3JtLFxuICBtYXBBbGlnblRvU2NyZWVuQWxpZ24sXG4gIHNob3dDYXB0Y2hhUHJvbXB0LFxufSBmcm9tICcuL3VpJztcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpbml0VHJpZ2dlcnMsIGRhbWFnZVRhcmdldHMsIGhlYWxUYXJnZXRzIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBmb2xsb3dNYXAgfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQgeyBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi90d2VlbnMnO1xuaW1wb3J0IHsgUkVXQVJEU19TRVJWRVJfVVJMIH0gZnJvbSAnLi9hZG1pbi10b29sa2l0LXVpL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjYWxsU2NyaXB0TWV0aG9kIH0gZnJvbSAnfnNkay9zY3JpcHQtdXRpbHMnO1xuaW1wb3J0IHtcbiAgbW92ZVBsYXllclRvLFxuICB0cmlnZ2VyRW1vdGUsXG4gIHRyaWdnZXJTY2VuZUVtb3RlLFxuICBvcGVuRXh0ZXJuYWxVcmwsXG4gIHRlbGVwb3J0VG8sXG4gIGNoYW5nZVJlYWxtLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgRmxhdEZldGNoSW5pdCB9IGZyb20gJ35zeXN0ZW0vU2lnbmVkRmV0Y2gnO1xuaW1wb3J0IHsgZ2V0UmVhbG0gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnO1xuaW1wb3J0IHsgc2lnbmVkRmV0Y2ggfSBmcm9tICd+c3lzdGVtL1NpZ25lZEZldGNoJztcblxuY29uc3QgaW5pdGVkRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKTtcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKTtcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpO1xuY29uc3QgdGV4dEVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIEVudGl0eT4oKTsgLy8gTW9kZWwgRW50aXR5LCBUZXh0IEVudGl0eVxuXG5sZXQgaW50ZXJuYWxJbml0QWN0aW9uczogKChlbnRpdHk6IEVudGl0eSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gICAgVWlJbnB1dCxcbiAgICBVaUlucHV0UmVzdWx0LFxuICAgIFR3ZWVuOiBUd2VlbkNvbXBvbmVudCxcbiAgICBUd2VlblNlcXVlbmNlLFxuICAgIFZpZGVvUGxheWVyLFxuICAgIExpZ2h0U291cmNlLFxuICAgIE1haW5DYW1lcmEsXG4gICAgVmlydHVhbENhbWVyYSxcbiAgICBUZXh0U2hhcGUsXG4gICAgSW5wdXRNb2RpZmllcixcbiAgICBTa3lib3hUaW1lLFxuICB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGNvbnN0IHsgQWN0aW9ucywgU3RhdGVzLCBDb3VudGVyLCBUcmlnZ2VycywgUmV3YXJkcyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKTtcblxuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW50aXRpZXNXaXRoQWN0aW9ucykge1xuICAgICAgaW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFjdGlvbnMuaGFzKGVudGl0eSkgfHwgaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYWN0aW9ucyBkYXRhXG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0KGVudGl0eSk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICBpbml0UGxheUFuaW1hdGlvbihlbnRpdHkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYmluZCBhY3Rpb25zXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucy52YWx1ZSkge1xuICAgICAgYWN0aW9uRXZlbnRzLm9uKGFjdGlvbi5uYW1lLCAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBbmltYXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TVEFURToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U3RhdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1RXRUVOOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wVHdlZW4oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRToge1xuICAgICAgICAgICAgaGFuZGxlU2xpZGVUZXh0dXJlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0Q291bnRlcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlRGVjcmVhc2VDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfU09VTkQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFZpc2liaWxpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVBdHRhY2hUb1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5VmlkZW8oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFZpZGVvKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVRlbGVwb3J0UGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5PUEVOX0xJTks6IHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5MaW5rKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9URVhUOiB7XG4gICAgICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX1RFWFQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9ERUxBWToge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnREZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnRMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX0lNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVTaG93SW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREFNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVEYW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRToge1xuICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllckhlcmUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXllckZhY2VJdGVtKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25QbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlUGxhY2VPbkNhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc0NhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRQb3NpdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfUk9UQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFJvdGF0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TQ0FMRToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U2NhbGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkFORE9NOiB7XG4gICAgICAgICAgICBoYW5kbGVSYW5kb20oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUkFORE9NPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQkFUQ0g6IHtcbiAgICAgICAgICAgIGhhbmRsZUJhdGNoKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSEVBTF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUhlYWxQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QOiB7XG4gICAgICAgICAgICBoYW5kbGVDbGFpbUFpcmRyb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19PTjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT24oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTElHSFRTX09GRjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT2ZmKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19NT0RJRlk6IHtcbiAgICAgICAgICAgIGhhbmRsZUxpZ2h0c01vZGlmeShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlQ2FtZXJhKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfVEVYVD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUZyZWV6ZVBsYXllcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5VTkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVVuZnJlZXplUGxheWVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VDb2xsaXNpb25zKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlU2t5Ym94KGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVTRVRfU0tZQk9YOiB7XG4gICAgICAgICAgICBoYW5kbGVSZXNldFNreWJveCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q6IHtcbiAgICAgICAgICAgIGhhbmRsZUNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0FMTF9TQ1JJUFRfTUVUSE9EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU6IHtcbiAgICAgICAgICAgIGhhbmRsZUxvZ1RvQ29uc29sZShnZXRQYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUxFVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZShlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSk7XG4gIH1cblxuICAvLyBMSUdIVFNfT05cbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzT24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gTElHSFRTX09GRlxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNPZmYoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIExJR0hUU19NT0RJRllcbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzTW9kaWZ5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTElHSFRTX01PRElGWT4pIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIWxpZ2h0KSByZXR1cm47XG4gICAgaWYgKHBheWxvYWQuYWN0aXZlICE9PSB1bmRlZmluZWQpIGxpZ2h0LmFjdGl2ZSA9IHBheWxvYWQuYWN0aXZlO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSBsaWdodC5jb2xvciA9IHBheWxvYWQuY29sb3I7XG4gICAgaWYgKHBheWxvYWQuaW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIGxpZ2h0LmludGVuc2l0eSA9IHBheWxvYWQuaW50ZW5zaXR5O1xuICB9XG5cbiAgLy8gQ0hBTkdFX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VDYW1lcmEoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfQ0FNRVJBPikge1xuICAgIGNvbnN0IHRhcmdldCA9IHBheWxvYWQudmlydHVhbENhbWVyYUVudGl0eTtcblxuICAgIC8vIElmIHRhcmdldCBpcyB1bmRlZmluZWQsIHVzZSB0aGUgZW50aXR5IHRoYXQgb3ducyB0aGUgQWN0aW9ucyBjb21wb25lbnRcbiAgICAvLyBJZiB0aGF0IGVudGl0eSBoYXMgVmlydHVhbENhbWVyYSwgdXNlIGl0OyBvdGhlcndpc2UgcmV2ZXJ0IHRvIG5vcm1hbCBiZWhhdmlvclxuICAgIGxldCBjYW1lcmFFbnRpdHk6IEVudGl0eSB8IHVuZGVmaW5lZCA9IHRhcmdldDtcblxuICAgIGlmIChjYW1lcmFFbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIHRoZSBlbnRpdHkgdGhhdCBvd25zIHRoZSBBY3Rpb25zIGNvbXBvbmVudCBpZiBpdCBoYXMgVmlydHVhbENhbWVyYVxuICAgICAgaWYgKFZpcnR1YWxDYW1lcmEuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY2FtZXJhRW50aXR5ID0gZW50aXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gY2FtZXJhIHNwZWNpZmllZCBhbmQgZW50aXR5IGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsQ2FtZXJhLCByZXZlcnQgdG8gbm9ybWFsXG4gICAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICAgIE1haW5DYW1lcmEuZGVsZXRlRnJvbShlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0YXJnZXQgaXMgMCAoUm9vdEVudGl0eSksIHRyZWF0IGl0IGFzIFwicmVtb3ZlIGNhbWVyYVwiXG4gICAgLy8gVGhpcyBhbGxvd3MgdXNpbmcgMCBhcyBhIHNlbnRpbmVsIHZhbHVlIGluIGNvbXBvc2l0ZS5qc29uXG4gICAgaWYgKGNhbWVyYUVudGl0eSA9PT0gZW5naW5lLlJvb3RFbnRpdHkpIHtcbiAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICBNYWluQ2FtZXJhLmRlbGV0ZUZyb20oZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoZSBzZWxlY3RlZCBlbnRpdHkgaGFzIFZpcnR1YWxDYW1lcmEgYmVmb3JlIGFwcGx5aW5nXG4gICAgaWYgKCFWaXJ0dWFsQ2FtZXJhLmhhcyhjYW1lcmFFbnRpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTWFpbkNhbWVyYS5jcmVhdGVPclJlcGxhY2UoZW5naW5lLkNhbWVyYUVudGl0eSwge1xuICAgICAgdmlydHVhbENhbWVyYUVudGl0eTogY2FtZXJhRW50aXR5LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ0hBTkdFX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9URVhUPikge1xuICAgIGNvbnN0IHRleHQgPSBUZXh0U2hhcGUuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuXG4gICAgdGV4dC50ZXh0ID0gcGF5bG9hZC50ZXh0O1xuICAgIGlmIChwYXlsb2FkLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHRleHQuZm9udFNpemUgPSBwYXlsb2FkLmZvbnRTaXplO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSB0ZXh0LnRleHRDb2xvciA9IHBheWxvYWQuY29sb3I7XG4gIH1cblxuICAvLyBGUkVFWkVfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUZyZWV6ZVBsYXllcigpIHtcbiAgICBJbnB1dE1vZGlmaWVyLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuUGxheWVyRW50aXR5LCB7XG4gICAgICBtb2RlOiBJbnB1dE1vZGlmaWVyLk1vZGUuU3RhbmRhcmQoe1xuICAgICAgICBkaXNhYmxlQWxsOiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBVTkZSRUVaRV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVW5mcmVlemVQbGF5ZXIoKSB7XG4gICAgSW5wdXRNb2RpZmllci5jcmVhdGVPclJlcGxhY2UoZW5naW5lLlBsYXllckVudGl0eSwge1xuICAgICAgbW9kZTogSW5wdXRNb2RpZmllci5Nb2RlLlN0YW5kYXJkKHtcbiAgICAgICAgZGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENIQU5HRV9DT0xMSVNJT05TXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZUNvbGxpc2lvbnMoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPixcbiAgKSB7XG4gICAgY29uc3QgeyB2aXNpYmxlQ29sbGlzaW9ucywgaW52aXNpYmxlQ29sbGlzaW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChnbHRmKSB7XG4gICAgICBpZiAodmlzaWJsZUNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbHRmLnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gdmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgICBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGludmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgLy8gRm9yIE1lc2hDb2xsaWRlciwgdXNlIHZpc2libGVDb2xsaXNpb25zIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgaW52aXNpYmxlQ29sbGlzaW9uc1xuICAgICAgaWYgKHZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSB2aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH0gZWxzZSBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lc2hDb2xsaWRlci5jb2xsaXNpb25NYXNrID0gaW52aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDSEFOR0VfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVNreWJveChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWD4pIHtcbiAgICBjb25zdCB7IHRpbWUsIGRpcmVjdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEVuc3VyZSB0aW1lIGlzIGEgdmFsaWQgbnVtYmVyIChzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0KVxuICAgIGlmICh0eXBlb2YgdGltZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGltZSkgfHwgdGltZSA8IDAgfHwgdGltZSA+IDg2NDAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHNreWJveCB0aW1lIHZhbHVlOicsIHRpbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFNreWJveFRpbWUuY3JlYXRlT3JSZXBsYWNlKGVuZ2luZS5Sb290RW50aXR5LCB7XG4gICAgICBmaXhlZFRpbWU6IHRpbWUsXG4gICAgICB0cmFuc2l0aW9uTW9kZTogZGlyZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkVTRVRfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZVJlc2V0U2t5Ym94KCkge1xuICAgIGlmIChTa3lib3hUaW1lLmhhcyhlbmdpbmUuUm9vdEVudGl0eSkpIHtcbiAgICAgIFNreWJveFRpbWUuZGVsZXRlRnJvbShlbmdpbmUuUm9vdEVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIHN0YXRlczogW10sXG4gICAgICB9KTtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQW5pbWF0aW9uV2VpZ2h0KHJhd1dlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmF3V2VpZ2h0IDwgMCB8fCByYXdXZWlnaHQgPiAxKSByZXR1cm4gMTtcbiAgICByZXR1cm4gcmF3V2VpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPikge1xuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBsb29wLCBzaG91bGRSZXNldCB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgIGlmICghYW5pbWF0b3Iuc3RhdGVzLnNvbWUoJCA9PiAkLmNsaXAgPT09IGFuaW1hdGlvbikpIHtcbiAgICAgIGFuaW1hdG9yLnN0YXRlcyA9IFtcbiAgICAgICAgLi4uYW5pbWF0b3Iuc3RhdGVzLFxuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogYW5pbWF0aW9uLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaXAgPSBBbmltYXRvci5nZXRDbGlwKGVudGl0eSwgYW5pbWF0aW9uKTtcbiAgICAgIGNsaXAucGxheWluZyA9IHRydWU7XG4gICAgICBjbGlwLmxvb3AgPSBsb29wID8/IGZhbHNlO1xuICAgICAgY2xpcC53ZWlnaHQgPSBub3JtYWxpemVBbmltYXRpb25XZWlnaHQoY2xpcC53ZWlnaHQgPz8gMSk7XG4gICAgICBpZiAoc2hvdWxkUmVzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGlwLnNob3VsZFJlc2V0ID0gc2hvdWxkUmVzZXQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGxheWluZyBhbmltYXRpb24nLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0FOSU1BVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQW5pbWF0aW9uKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPikge1xuICAgIGlmIChBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU1RBVEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U3RhdGUoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KSB7XG4gICAgY29uc3Qgc3RhdGVzID0gU3RhdGVzLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChzdGF0ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpO1xuICAgICAgbGV0IG5leHRTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGF5bG9hZC5zdGF0ZTtcbiAgICAgIG5leHRTdGF0ZSA9IGlzVmFsaWRTdGF0ZShzdGF0ZXMsIG5leHRTdGF0ZSkgPyBuZXh0U3RhdGUgOiBkZWZhdWx0VmFsdWU7XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gc3RhdGVzLmN1cnJlbnRWYWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gdW5kZWZpbmVkO1xuICAgICAgc3RhdGVzLnByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1ZhbHVlO1xuICAgICAgc3RhdGVzLmN1cnJlbnRWYWx1ZSA9IG5leHRTdGF0ZTtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TVEFURV9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUQVJUX1RXRUVOXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgLy8gR2V0IHRoZSBpbml0aWFsIHR3ZWVuIGlmIGV4aXN0cyB0byByZXZlcnQgdGhlIG9iamVjdCBtb3ZlbWVudCB0byB0aGF0IHNlcXVlbmNlIHdoZW4gZXhlY3V0aW5nIGEgdHdlZW4gZnJvbSBhY3Rpb25zXG4gICAgICBjb25zdCBpbml0aWFsVHdlZW4gPSBUd2VlbkNvbXBvbmVudC5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgICBsZXQgdHdlZW47XG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5ST1RBVEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlUm90YXRlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlNDQUxFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZVNjYWxlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLktFRVBfUk9UQVRJTkdfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlS2VlcFJvdGF0aW5nSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV2ZXJ0VHdlZW4oZW50aXR5LCBpbml0aWFsVHdlZW4sIHR3ZWVuKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0YXJ0IHRvIHRoZSBpbml0aWFsIG1vdmVtZW50IHNlcXVlbmNlIHdoZW4gZXhlY3V0aW5nIGFuIGFkaXRpb25hbCB0d2VlblxuICBmdW5jdGlvbiByZXZlcnRUd2VlbihlbnRpdHk6IEVudGl0eSwgaW5pdGlhbFR3ZWVuOiBQQlR3ZWVuIHwgbnVsbCwgdHdlZW46IFBCVHdlZW4pIHtcbiAgICBjb25zdCB0d2VlblNlcXVlbmNlID0gVHdlZW5TZXF1ZW5jZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgbGV0IF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgIC4uLnR3ZWVuLFxuICAgIH07XG5cbiAgICBpZiAoIWluaXRpYWxUd2VlbiB8fCAhdHdlZW5TZXF1ZW5jZSB8fCAhdHdlZW5TZXF1ZW5jZS5sb29wKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGluaXRpYWxUd2Vlbi5tb2RlPy4kY2FzZSkge1xuICAgICAgY2FzZSAnbW92ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLk1vdmUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdtb3ZlJzsgbW92ZTogTW92ZSB9KS5tb3ZlLmVuZCxcbiAgICAgICAgICAgIGVuZDogaW5pdGlhbFR3ZWVuLm1vZGUubW92ZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyb3RhdGUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdyb3RhdGUnOyByb3RhdGU6IFJvdGF0ZSB9KS5yb3RhdGUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5yb3RhdGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2NhbGUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5TY2FsZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3NjYWxlJzsgc2NhbGU6IFNjYWxlIH0pLnNjYWxlLmVuZCxcbiAgICAgICAgICAgIGVuZDogaW5pdGlhbFR3ZWVuLm1vZGUuc2NhbGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gbW9kZTogJHtpbml0aWFsVHdlZW4ubW9kZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaW5pdGlhbCB0d2VlbiBpcyBub3QgcGxheWluZyBidXQgdGhlIGxvb3AgcHJvcGVydHkgaXMgYWN0aXZlLCBzdGFydCBpdFxuICAgIGluaXRpYWxUd2Vlbi5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0d2VlblNlcXVlbmNlLnNlcXVlbmNlID0gW19yZXZlcnRUd2VlbiwgaW5pdGlhbFR3ZWVuXTtcbiAgfVxuXG4gIC8vIE1PVkVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuTW92ZSh7XG4gICAgICAgIHN0YXJ0OiB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgIGVuZDogZW5kUG9zaXRpb24sXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsIC8vIGZyb20gc2VjcyB0byBtc1xuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUk9UQVRFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXModHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueik7XG4gICAgY29uc3QgZW5kUm90YXRpb24gPSByZWxhdGl2ZSA/IFF1YXRlcm5pb24ubXVsdGlwbHkodHJhbnNmb3JtLnJvdGF0aW9uLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuUm90YXRlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgICAgZW5kOiBlbmRSb3RhdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBTQ0FMRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVNjYWxlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRTY2FsZSA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnNjYWxlLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuU2NhbGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICBlbmQ6IGVuZFNjYWxlLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEtFRVBfUk9UQVRJTkdfSVRFTSAoY29udGludW91cyByb3RhdGlvbilcbiAgZnVuY3Rpb24gaGFuZGxlS2VlcFJvdGF0aW5nSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSB9ID0gdHdlZW47XG4gICAgY29uc3QgZGlyID0gdHdlZW4uZGlyZWN0aW9uID8/IHsgeDogMCwgeTogMSwgejogMCB9O1xuICAgIGNvbnN0IHNwZWVkID0gdHdlZW4uc3BlZWQgPz8gMTtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZUNvbnRpbnVvdXMoe1xuICAgICAgICBkaXJlY3Rpb246IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhkaXIueCwgZGlyLnksIGRpci56KSxcbiAgICAgICAgc3BlZWQsXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiAoZHVyYXRpb24gPz8gMCkgKiAxMDAwLFxuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RPUF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wVHdlZW4oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoVHdlZW5Db21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgIFR3ZWVuQ29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBTTElERV9URVhUVVJFXG4gIGZ1bmN0aW9uIGhhbmRsZVNsaWRlVGV4dHVyZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU+KSB7XG4gICAgY29uc3QgZGlyID0gcGF5bG9hZC5kaXJlY3Rpb247XG4gICAgY29uc3Qgc3BlZWQgPSBwYXlsb2FkLnNwZWVkO1xuICAgIGNvbnN0IG1vdmVtZW50VHlwZSA9IHBheWxvYWQubW92ZW1lbnRUeXBlIGFzIHVua25vd24gYXMgU2RrVGV4dHVyZU1vdmVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBheWxvYWQuZHVyYXRpb24gPz8gMDtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlRleHR1cmVNb3ZlQ29udGludW91cyh7XG4gICAgICAgIGRpcmVjdGlvbjogeyB4OiBkaXIueCwgeTogZGlyLnkgfSxcbiAgICAgICAgc3BlZWQsXG4gICAgICAgIG1vdmVtZW50VHlwZSxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCxcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU0VUX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlU2V0Q291bnRlcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPikge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlID0gcGF5bG9hZC5jb3VudGVyO1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBJTkNSRU1FTlRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgKz0gYW1vdW50O1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBERUNSRUFTRV9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgYW1vdW50ID0gcGF5bG9hZC5hbW91bnQgPz8gMTtcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IGFtb3VudDtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVQbGF5U291bmQoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPikge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wLCB2b2x1bWUsIGdsb2JhbCB9ID0gcGF5bG9hZDtcbiAgICBpZiAoQXVkaW9Tb3VyY2UuaGFzKGVudGl0eSkpIHtcbiAgICAgIEF1ZGlvU291cmNlLnBsYXlTb3VuZChlbnRpdHksIHNyYyk7XG4gICAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoZW50aXR5KTtcbiAgICAgIGF1ZGlvU291cmNlLmxvb3AgPSBsb29wO1xuICAgICAgYXVkaW9Tb3VyY2Uudm9sdW1lID0gdm9sdW1lID8/IDE7XG4gICAgICBhdWRpb1NvdXJjZS5nbG9iYWwgPSBnbG9iYWwgPz8gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgYXVkaW9DbGlwVXJsOiBzcmMsXG4gICAgICAgIGxvb3AsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFNvdW5kKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1ZJU0lCSUxJVFlcbiAgZnVuY3Rpb24gaGFuZGxlU2V0VmlzaWJpbGl0eShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPikge1xuICAgIGNvbnN0IHsgdmlzaWJsZSwgY29sbGlkZXIgfSA9IHBheWxvYWQ7XG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IHZpc2libGUgfSk7XG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IG1lc2hDb2xsaWRlciA9IE1lc2hDb2xsaWRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG5cbiAgICBpZiAoY29sbGlkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGdsdGYpIHtcbiAgICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gY29sbGlkZXI7XG4gICAgICAgIGlmIChjb2xsaWRlciA9PT0gMCkge1xuICAgICAgICAgIGdsdGYudmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IGNvbGxpZGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFUVEFDSF9UT19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IGFuY2hvclBvaW50SWQgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgdXNlciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpPy51c2VySWQ7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IGFuY2hvclBvaW50SWQ6IGFuY2hvclBvaW50SWQsIGF2YXRhcklkOiB1c2VyIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIERFVEFDSF9GUk9NX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPixcbiAgKSB7XG4gICAgaWYgKEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KSkge1xuICAgICAgQXZhdGFyQXR0YWNoLmRlbGV0ZUZyb20oZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBURUxFUE9SVCBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IG1vZGUsIHgsIHksIHJlYWxtIH0gPSBwYXlsb2FkO1xuXG4gICAgaWYgKG1vZGUgPT09IFRlbGVwb3J0TW9kZS5UT19XT1JMRCkge1xuICAgICAgaWYgKHJlYWxtKSB7XG4gICAgICAgIHZvaWQgY2hhbmdlUmVhbG0oeyByZWFsbSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9fQ09PUkRJTkFURVMgbW9kZVxuICAgICAgaWYgKHggIT09IHVuZGVmaW5lZCAmJiB5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdm9pZCB0ZWxlcG9ydFRvKHtcbiAgICAgICAgICB3b3JsZENvb3JkaW5hdGVzOiB7IHgsIHkgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRSBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllcihfZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4pIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogcGF5bG9hZC5wb3NpdGlvbixcbiAgICAgIGNhbWVyYVRhcmdldDogcGF5bG9hZC5jYW1lcmFUYXJnZXQsXG4gICAgfTtcbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFBMQVkgREVGQVVMVCBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBlbW90ZSB9ID0gcGF5bG9hZDtcbiAgICB2b2lkIHRyaWdnZXJFbW90ZSh7IHByZWRlZmluZWRFbW90ZTogZW1vdGUgfSk7XG4gIH1cblxuICAvLyBQTEFZIENVU1RPTSBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgdHJpZ2dlclNjZW5lRW1vdGUoeyBzcmMsIGxvb3AgfSk7XG4gIH1cblxuICAvLyBPUEVOIExJTktcbiAgZnVuY3Rpb24gaGFuZGxlT3BlbkxpbmsoX2VudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPikge1xuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgb3BlbkV4dGVybmFsVXJsKHsgdXJsIH0pO1xuICB9XG5cbiAgLy8gUExBWV9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVQbGF5VmlkZW8oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIXZpZGVvU291cmNlICYmIHBheWxvYWQuc3JjKSB7XG4gICAgICBWaWRlb1BsYXllci5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICAgIHNyYzogcGF5bG9hZC5zcmMsXG4gICAgICAgIHZvbHVtZTogcGF5bG9hZC52b2x1bWUgPz8gMSxcbiAgICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGZhbHNlLFxuICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwoZW50aXR5LCB7IE1hdGVyaWFsIH0sIE1hdGVyaWFsLmdldE9yTnVsbChlbnRpdHkpKTtcbiAgICB9XG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICBpZiAodmlkZW9Tb3VyY2U/LnNyYyAhPT0gcGF5bG9hZC5zcmMpIHtcbiAgICAgICAgdmlkZW9Tb3VyY2Uuc3JjID0gcGF5bG9hZC5zcmMgPz8gJyc7XG4gICAgICB9XG4gICAgICB2aWRlb1NvdXJjZS52b2x1bWUgPSBwYXlsb2FkLnZvbHVtZSA/PyB2aWRlb1NvdXJjZS52b2x1bWU7XG4gICAgICB2aWRlb1NvdXJjZS5sb29wID0gcGF5bG9hZC5sb29wID8/IHZpZGVvU291cmNlLmxvb3A7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgLy8gU1RPUF9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVTdG9wVmlkZW8oZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWQ7XG4gICAgQXVkaW9TdHJlYW0uY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgdXJsLFxuICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9TdHJlYW0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNIT1dfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVTaG93VGV4dChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4pIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWQ7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IGVudGl0eSBmb3IgdGhlIHRleHRcbiAgICBjb25zdCB0ZXh0RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpO1xuICAgIC8vIFNldCB0aGUgdGV4dCBlbnRpdHkgYXMgYSBjaGlsZCBvZiB0aGUgZW50aXR5IHRoYXQgY2FsbGVkIHRoZSBhY3Rpb25cbiAgICB0ZXh0RW50aXRpZXMuc2V0KGVudGl0eSwgdGV4dEVudGl0eSk7XG4gICAgY29uc3QgdWlUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShVaVRyYW5zZm9ybSwgdGV4dEVudGl0eSk7XG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICB1aVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSBlbnRpdHk7XG4gICAgICAvLyBTZXQgdGhlIHBvaW50ZXIgZmlsdGVyIHRvIG5vbmUsIGFsbG93aW5nIHBsYXllcnMgdG8gY29udGludWUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2NlbmVcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fTk9ORTtcbiAgICAgIFVpVGV4dC5jcmVhdGVPclJlcGxhY2UodGV4dEVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KTtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9URVhULCBoaWRlQWZ0ZXJTZWNvbmRzLCAoKSA9PlxuICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIHt9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVUZXh0KGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4pIHtcbiAgICBjb25zdCB0ZXh0RW50aXR5ID0gdGV4dEVudGl0aWVzLmdldChlbnRpdHkpO1xuICAgIGlmICh0ZXh0RW50aXR5KSB7XG4gICAgICAvLyBEZWxldGUgdGV4dCBjb21wb25lbnRcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKHRleHRFbnRpdHkpO1xuICAgICAgLy8gRGVsZXRlIHRyYW5zZm9ybSBjb21wb25lbnRcbiAgICAgIFVpVHJhbnNmb3JtLmRlbGV0ZUZyb20odGV4dEVudGl0eSk7XG4gICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuICAgICAgc3RvcFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfVEVYVCk7XG4gICAgICAvLyBEZWxldGUgdGV4dCBlbnRpdHkgZnJvbSB0aGUgbWFwXG4gICAgICB0ZXh0RW50aXRpZXMuZGVsZXRlKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHk6IEVudGl0eSwgbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgcmV0dXJuIGFjdGlvbnM/LnZhbHVlLmZpbmQoJCA9PiAkLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLy8gU1RBUlRfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnREZWxheShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBhY3Rpb25OYW1lLCB0aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcERlbGF5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbiB9ID0gcGF5bG9hZDtcbiAgICBzdG9wVGltZW91dChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBpbnRlcnZhbCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydEludGVydmFsKGVudGl0eSwgYWN0aW9uTmFtZSwgaW50ZXJ2YWwsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BMb29wKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPikge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkO1xuICAgIHN0b3BJbnRlcnZhbChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBDTE9ORV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+KSB7XG4gICAgY29uc3QgeyBwb3NpdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIGNsb25lIGVudGl0eVxuICAgIGNvbnN0IHsgY2xvbmVkLCBlbnRpdGllcyB9ID0gY2xvbmUoZW50aXR5LCBlbmdpbmUsIFRyYW5zZm9ybSwgVHJpZ2dlcnMsIHNka0hlbHBlcnMpO1xuICAgIGZvciAoY29uc3QgY2xvbmVkIG9mIGVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICAvLyBpbml0aWFsaXplXG4gICAgICBpbml0QWN0aW9ucyhjbG9uZWQpO1xuICAgICAgaW5pdFRyaWdnZXJzKGNsb25lZCk7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGNsb25lZCk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xPTkUpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKTtcbiAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8vIFJFTU9WRV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KSB7XG4gICAgLy8gUmVtb3ZlIGFsbCB0aW1lcnMgYmVmb3JlIHJlbW92ZSB0aGUgZW50aXR5XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSk7XG4gICAgc3RvcEFsbEludGVydmFscyhlbnRpdHkpO1xuXG4gICAgY29uc3QgdHJlZSA9IGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSk7XG4gICAgZm9yIChjb25zdCBlbnRpdHlUb1JlbW92ZSBvZiB0cmVlKSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eVRvUmVtb3ZlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVaVN0YWNrKGFsaWduOiBTY3JlZW5BbGlnbk1vZGUpIHtcbiAgICBjb25zdCBrZXkgPSBgJHthbGlnbi5hbGlnbkl0ZW1zfSwke2FsaWduLmp1c3RpZnlDb250ZW50fWA7XG5cbiAgICBpZiAoIXVpU3RhY2tzLmhhcyhrZXkpKSB7XG4gICAgICB1aVN0YWNrcy5zZXQoa2V5LCBlbmdpbmUuYWRkRW50aXR5KCkpO1xuICAgIH1cblxuICAgIHJldHVybiB1aVN0YWNrcy5nZXQoa2V5KSE7XG4gIH1cblxuICAvLyBTSE9XX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbmdpbmUuUm9vdEVudGl0eSk7XG5cbiAgICAvLyBHZXQgYSBVSSBTdGFjayBlbnRpdHlcbiAgICBjb25zdCBzY3JlZW5BbGlnbiA9IG1hcEFsaWduVG9TY3JlZW5BbGlnbihhbGlnbik7XG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pO1xuXG4gICAgLy8gVE9ETzogRml4IGl0ZW1zIHdyYXBwaW5nXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIFRyYW5zZm9ybSBmb3IgdGhlIFVJIHN0YWNrXG4gICAgY29uc3QgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB1aVN0YWNrKTtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LmFsaWduSXRlbXMgPSBzY3JlZW5BbGlnbi5hbGlnbkl0ZW1zO1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuanVzdGlmeUNvbnRlbnQgPSBzY3JlZW5BbGlnbi5qdXN0aWZ5Q29udGVudDtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LnBvc2l0aW9uVHlwZSA9IFlHUG9zaXRpb25UeXBlLllHUFRfQUJTT0xVVEU7XG5cbiAgICAvLyBDcmVhdGUgYSBVSSBlbnRpdHkgYW5kIGEgVHJhbnNmb3JtIGNvbXBvbmVudCBmb3IgdGhlIGltYWdlXG4gICAgY29uc3QgaW1hZ2VFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KCk7XG4gICAgY29uc3QgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKTtcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSB1aVN0YWNrO1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fQkxPQ0s7XG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoVWlCYWNrZ3JvdW5kLCBpbWFnZUVudGl0eSwgc3JjKTtcblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBDcmVhdGUgVGV4dCBDb21wb25lbnRcbiAgICAgIC8vIFRPRE86IEZpeCB0ZXh0IHdyYXBwaW5nIGFuZCBzY3JvbGxpbmdcbiAgICAgIGdldFVJVGV4dChVaVRleHQsIGltYWdlRW50aXR5LCB0ZXh0LCBmb250U2l6ZSwgd2lkdGgpO1xuICAgIH1cblxuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiBpbWFnZUVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLnNldChlbnRpdHksIGltYWdlRW50aXR5KTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMSUNLX0lNQUdFKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChoaWRlQWZ0ZXJTZWNvbmRzKSB7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfSU1BR0UsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIHsgaW1hZ2VFbnRpdHk6IGltYWdlRW50aXR5IH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBISURFX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBpbWFnZUVudGl0eSB9ID0gcGF5bG9hZDtcblxuICAgIGlmIChpbWFnZUVudGl0eSkge1xuICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShpbWFnZUVudGl0eSBhcyBFbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGlja2VkSW1hZ2UgPSBsYXN0VWlFbnRpdHlDbGlja2VkLmdldChlbnRpdHkpO1xuICAgICAgaWYgKGNsaWNrZWRJbWFnZSkge1xuICAgICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGNsaWNrZWRJbWFnZSk7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuZGVsZXRlKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gREFNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZURhbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4pIHtcbiAgICBjb25zdCB7IHJhZGl1cywgbGF5ZXIsIGhpdHMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgZW50aXR5UG9zaXRpb24gPSBBdmF0YXJBdHRhY2guaGFzKGVudGl0eSlcbiAgICAgID8gZ2V0UGxheWVyUG9zaXRpb24oKVxuICAgICAgOiBnZXRXb3JsZFBvc2l0aW9uKGVudGl0eSk7XG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpO1xuICAgICAgcmV0dXJuICFwYXJlbnQgPyBlbnRpdHkgOiBnZXRSb290KHBhcmVudCk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGRhbWFnZVRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbih0YXJnZXQpO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKGVudGl0eVBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbik7XG5cbiAgICAgIC8vIGF2b2lkIGNhdXNpbmcgZGFtYWdlIHRvIHRoZSBlbnRpdHkgaXRzZWxmIG9yIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3QgZW50aXR5VHJlZSA9IEFycmF5LmZyb20oZ2V0Q29tcG9uZW50RW50aXR5VHJlZShlbmdpbmUsIGVudGl0eSwgVHJhbnNmb3JtKSk7XG4gICAgICBjb25zdCBpc1BhcnRPZkVudGl0eVRyZWUgPSBlbnRpdHlUcmVlLnNvbWUoJCA9PiAkID09PSB0YXJnZXQpO1xuICAgICAgaWYgKGlzUGFydE9mRW50aXR5VHJlZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuUExBWUVSKSB7XG4gICAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgICAgICBpZiAocm9vdCAhPT0gZW5naW5lLlBsYXllckVudGl0eSAmJiByb290ICE9PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLk5PTl9QTEFZRVIpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5IHx8IHJvb3QgPT09IGVuZ2luZS5DYW1lcmFFbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlIDw9IHJhZGl1cykge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGhpdHMgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLm1heChoaXRzLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHModGFyZ2V0KTtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fREFNQUdFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfUExBWUVSX0hFUkVcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllckhlcmUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPixcbiAgKSB7XG4gICAgY29uc3QgaGVyZSA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCByb3RhdGlvbiA9IGdldFdvcmxkUm90YXRpb24oZW50aXR5KTtcblxuICAgIC8vIFdlIFdhbnQgdGhlIHBsYXllciB0byBsb29rIDFtIGluIGZyb250IG9mIHRoZSBlbnRpdHlcbiAgICBjb25zdCBmb3J3YXJkID0gVmVjdG9yMy5Gb3J3YXJkKCk7XG4gICAgY29uc3Qgcm90YXRlZERpcmVjdGlvbiA9IFZlY3RvcjMucm90YXRlKGZvcndhcmQsIHJvdGF0aW9uKTtcbiAgICBjb25zdCBtb3ZlRGVsdGEgPSBWZWN0b3IzLnNjYWxlKHJvdGF0ZWREaXJlY3Rpb24sIDEpO1xuXG4gICAgdm9pZCBtb3ZlUGxheWVyVG8oe1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogaGVyZSxcbiAgICAgIGF2YXRhclRhcmdldDogVmVjdG9yMy5hZGQoaGVyZSwgbW92ZURlbHRhKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1BMQVlFUl9TUEFXTik7XG4gIH1cblxuICAvLyBQTEFZRVJfRkFDRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXllckZhY2VJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWUVSX0ZBQ0VfSVRFTT4sXG4gICkge1xuICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCBjdXJyZW50UGxheWVyUG9zaXRpb24gPSBnZXRQbGF5ZXJQb3NpdGlvbigpO1xuICAgIHZvaWQgbW92ZVBsYXllclRvKHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IGN1cnJlbnRQbGF5ZXJQb3NpdGlvbixcbiAgICAgIGF2YXRhclRhcmdldDogaXRlbVBvc2l0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUExBQ0VfT05fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IHBsYXllciA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLlBsYXllckVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBsYXllci5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIHBsYXllcikge1xuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gcGxheWVyLnJvdGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBMQUNFX09OX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBjYW1lcmEgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBjYW1lcmEucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBjYW1lcmEpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IGNhbWVyYS5yb3RhdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUE9TSVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0UG9zaXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUk9UQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0Um90YXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLm11bHRpcGx5KFxuICAgICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgICAgICBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NDQUxFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFNjYWxlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5hZGQoXG4gICAgICAgICAgdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICAgIFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRk9MTE9XX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSPikge1xuICAgIGNvbnN0IHsgc3BlZWQsIHgsIHksIHosIG1pbkRpc3RhbmNlIH0gPSBwYXlsb2FkO1xuICAgIGZvbGxvd01hcC5zZXQoZW50aXR5LCB7XG4gICAgICB0YXJnZXQ6IGVuZ2luZS5QbGF5ZXJFbnRpdHksXG4gICAgICBzcGVlZCxcbiAgICAgIG1pbkRpc3RhbmNlLFxuICAgICAgYXhlczogeyB4LCB5LCB6IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX0ZPTExPV0lOR19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUj4sXG4gICkge1xuICAgIGZvbGxvd01hcC5kZWxldGUoZW50aXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJhbmRvbShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWN0aW9ucy5sZW5ndGgpXTtcbiAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQmF0Y2goZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5CQVRDSD4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKTtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGVhbFBsYXllcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhFQUxfUExBWUVSPikge1xuICAgIGNvbnN0IHsgbXVsdGlwbGllciB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSk7XG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgaGVhbFRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpO1xuICAgICAgICBjb25zdCB0b3RhbCA9IE1hdGgubWF4KG11bHRpcGxpZXIgPz8gMSwgMSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9IRUFMX1BMQVlFUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nLCBpbml0PzogRmxhdEZldGNoSW5pdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNpZ25lZEZldGNoKHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIC4uLihpbml0ID8geyBpbml0IH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KTtcblxuICAgICAgaWYgKCFqc29uLm9rKSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGpzb24uZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYW1wYWlnbnNCeURpc3BlbnNlcktleShkaXNwZW5zZXJLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhbXBhaWducy9rZXlzP2NhbXBhaWduX2tleT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNwZW5zZXJLZXkpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXB0Y2hhKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdChgJHtSRVdBUkRTX1NFUlZFUl9VUkx9L2FwaS9jYXB0Y2hhYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlbihcbiAgICBkaXNwZW5zZXJLZXk6IHN0cmluZyxcbiAgICBjYXB0Y2hhPzoge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvcmV3YXJkc2A7XG4gICAgY29uc3QgcmVhbG0gPSBhd2FpdCBnZXRSZWFsbSh7fSk7XG4gICAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNhbXBhaWduX2tleTogZGlzcGVuc2VyS2V5LFxuICAgICAgICBiZW5lZmljaWFyeTogIXBsYXllcj8uaXNHdWVzdCA/IHBsYXllcj8udXNlcklkIDogJycsXG4gICAgICAgIGNhdGFseXN0OiByZWFsbS5yZWFsbUluZm8gPyByZWFsbS5yZWFsbUluZm8uYmFzZVVybCA6ICcnLFxuICAgICAgICAuLi4oY2FwdGNoYSA/IHsgY2FwdGNoYV9pZDogY2FwdGNoYS5pZCwgY2FwdGNoYV92YWx1ZTogY2FwdGNoYS52YWx1ZSB9IDoge30pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xhaW1BaXJkcm9wKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A+KSB7XG4gICAgY29uc3QgcmV3YXJkcyA9IFJld2FyZHMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCFyZXdhcmRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB0ZXN0TW9kZSwgY2FtcGFpZ25JZCwgZGlzcGVuc2VyS2V5IH0gPSByZXdhcmRzO1xuXG4gICAgaWYgKHRlc3RNb2RlKSB7XG4gICAgICAvLyBUT0RPOiBTaG93IGFuIFVJIGluZGljYXRpbmcgdGVzdGluZyBtb2RlXG4gICAgICAvLyAnSGFuZGxlIENsYWltIEFpcmRyb3AgaW4gVGVzdCBNb2RlIDopJ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5KVxuICAgICAgLnRoZW4oY2FtcGFpZ25zID0+IHtcbiAgICAgICAgY29uc3QgY2FtcGFpZ24gPSBjYW1wYWlnbnMuZmluZCgoYzogYW55KSA9PiBjLmNhbXBhaWduX2lkID09PSBjYW1wYWlnbklkKTtcbiAgICAgICAgaWYgKGNhbXBhaWduICYmIGNhbXBhaWduLmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoY2FtcGFpZ24ucmVxdWlyZXNfY2FwdGNoYSkge1xuICAgICAgICAgICAgZmV0Y2hDYXB0Y2hhKClcbiAgICAgICAgICAgICAgLnRoZW4oY2FwdGNoYSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhcHRjaGEpIHtcbiAgICAgICAgICAgICAgICAgIF9zaG93Q2FwdGNoYVByb21wdChlbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25JZCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGVuc2VyS2V5LFxuICAgICAgICAgICAgICAgICAgICBjYXB0Y2hhLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAgICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYXB0Y2hhJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFRva2VuKGRpc3BlbnNlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKF9lcnJvciA9PiB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJywgZXJyb3JcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Nob3dDYXB0Y2hhUHJvbXB0KFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBkYXRhOiB7IGNhbXBhaWduSWQ6IHN0cmluZzsgZGlzcGVuc2VyS2V5OiBzdHJpbmc7IGNhcHRjaGE6IGFueSB9LFxuICApIHtcbiAgICBzaG93Q2FwdGNoYVByb21wdChcbiAgICAgIGVuZ2luZSxcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgVWlCYWNrZ3JvdW5kLFxuICAgICAgVWlUZXh0LFxuICAgICAgVWlJbnB1dCxcbiAgICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICAgICAgZGF0YSxcbiAgICAgIGlucHV0VGV4dCA9PiB7XG4gICAgICAgIC8vIFJlcXVlc3QgdG9rZW4gd2l0aCBjYXB0Y2hhIHZhbGlkYXRpb25cbiAgICAgICAgcmVxdWVzdFRva2VuKGRhdGEuZGlzcGVuc2VyS2V5LCB7XG4gICAgICAgICAgaWQ6IGRhdGEuY2FwdGNoYS5pZCxcbiAgICAgICAgICB2YWx1ZTogaW5wdXRUZXh0LFxuICAgICAgICB9KS50aGVuKCh0b2tlbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAvLyAnVG9rZW4gcmVxdWVzdGVkIHN1Y2Nlc3NmdWxseScsIHsgdG9rZW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDYWxsU2NyaXB0TWV0aG9kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q+LFxuICApIHtcbiAgICBjb25zdCB7IHNjcmlwdFBhdGgsIG1ldGhvZE5hbWUsIHBhcmFtcyB9ID0gcGF5bG9hZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbVZhbHVlcyA9IE9iamVjdC52YWx1ZXMocGFyYW1zIHx8IHt9KTtcbiAgICAgIGNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBzY3JpcHRQYXRoLCBtZXRob2ROYW1lLCAuLi5wYXJhbVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTY3JpcHQgQWN0aW9uIEVycm9yXSBGYWlsZWQgdG8gY2FsbCAke21ldGhvZE5hbWV9IG9uICR7c2NyaXB0UGF0aH06YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIExPR19UT19DT05TT0xFXG4gIGZ1bmN0aW9uIGhhbmRsZUxvZ1RvQ29uc29sZShwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KSB7XG4gICAgY29uc29sZS5sb2cocGF5bG9hZC5tZXNzYWdlKTtcbiAgfVxuXG4gIC8vIERFTEVURVxuICBmdW5jdGlvbiBoYW5kbGVEZWxldGUoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KTtcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSk7XG4gICAgZW5naW5lLnJlbW92ZUVudGl0eVdpdGhDaGlsZHJlbihlbnRpdHkpO1xuICB9XG59XG4iXX0=