oxygen-cli 1.43.1 → 1.43.2-beta.2
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/build/core/OxygenCore.js
CHANGED
|
@@ -450,10 +450,12 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
450
450
|
wrapper[methodName] = this._wrapModule(`${name}.${methodName}`, method);
|
|
451
451
|
} else if (DO_NOT_WRAP_METHODS.includes(methodName)) {
|
|
452
452
|
wrapper[methodName] = module[methodName].bind(module);
|
|
453
|
-
} else if (methodName.
|
|
453
|
+
} else if (methodName.startsWith('_') || methodName.startsWith('on')) {
|
|
454
454
|
wrapper[methodName] = function () {
|
|
455
455
|
var args = Array.prototype.slice.call(arguments);
|
|
456
|
-
|
|
456
|
+
if (methodName.startsWith('_') && module.isInitialized) {
|
|
457
|
+
_this.logger.debug('Executing: ' + _util.default.getMethodSignature(name, methodName, args));
|
|
458
|
+
}
|
|
457
459
|
try {
|
|
458
460
|
return module[methodName].apply(module, args);
|
|
459
461
|
} catch (e) {
|
|
@@ -885,4 +887,4 @@ function takeSnapshot(options, module, step, methodName) {
|
|
|
885
887
|
}
|
|
886
888
|
return false;
|
|
887
889
|
}
|
|
888
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2xvYiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfZnMiLCJfZGVhc3luYyIsIl9mdXR1cmUiLCJfZmliZXJzIiwiX29zIiwiX3N0ZXBSZXN1bHQiLCJfT3h5Z2VuRXZlbnRzIiwiX3V0aWwiLCJjb3JlVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9PeHlnZW5FcnJvciIsIl9oZWxwZXIiLCJfc3RhdHVzIiwiTW9kdWxlcyIsIl9sb2dnZXIyIiwiX094eWdlblN1Yk1vZHVsZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInYxIiwiZ2xvYmFsIiwib3JpZyIsIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJfIiwic3RhY2siLCJlcnIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsIkRFRkFVTFRfVElNRU9VVCIsIkRFRkFVTFRfT1BUUyIsImJhY2t0cmFjZSIsImNvbXBpbGVyIiwiZmFpbEFtYmlndW91c0RlZmluaXRpb25zIiwiZmFpbEZhc3QiLCJpZ25vcmVVbmRlZmluZWREZWZpbml0aW9ucyIsIm5hbWUiLCJwcm9maWxlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwic2VydmljZUZpbGVOYW1lIiwic2VydmljZUZpbGVQYXRoIiwibWF0Y2giLCJzZXJ2aWNlTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInNlcnZpY2UiLCJfbG9hZFNlcnZpY2UiLCJFT0wiLCJzdGFja3RyYWNlIiwic2VydmljZVBhdGgiLCJTZXJ2aWNlQ2xhc3MiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInNsaWNlIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZ2V0T3h5Z2VuRXJyb3IiLCJfY29tbWFuZFdyYXBwZXIiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwic3RhcnRzV2l0aCIsImRlbGF5IiwiZGVhc3luYyIsInNsZWVwIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImRlY3J5cHRlZEFyZ3MiLCJfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5IiwiX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlIiwiY21kTG9jYXRpb24iLCJzdGVwUmVzdWx0SWQiLCJfZ2V0Q29tbWFuZExvY2F0aW9uIiwiZW1pdEJlZm9yZUNvbW1hbmQiLCJfd3JhcEFzeW5jIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UiLCJyZXR2YWxQcm9taXNlIiwidGhlbiIsInByb21pc2VEb25lIiwibG9vcFdoaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQiLCJzdGVwUmVzdWx0IiwiZG9uZSIsIndhaXRJZCIsIl9nZXRTdGVwUmVzdWx0IiwiaWQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJkaXNhYmxlU2NyZWVuc2hvdCIsInRha2VTY3JlZW5zaG90IiwidGFrZVNuYXBzaG90IiwiYmFzZWxpbmUiLCJzY3JlZW5zaG90Iiwia2V5IiwiZGlzcG9zZVJlc3VsdCIsIm9uTW9kdWxlTG9hZGVkIiwib25Nb2R1bGVJbml0aWFsaXplZCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJfbmV3QXJncyIsImFyZyIsIl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudCIsImdldERlY3J5cHRSZXN1bHQiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCIsImV4cG9ydHMiLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJfdGFrZVNuYXBzaG90U2lsZW50Iiwic25hcHNob3QiLCJzbmFwc2hvdFR5cGUiLCJhdHRhY2htZW50IiwibmV3U25hcHNob3RBdHRhY2htZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvT3h5Z2VuQ29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cclxuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZGVhc3luYyBmcm9tICdkZWFzeW5jJztcclxuaW1wb3J0IEZ1dHVyZSBmcm9tICdmaWJlcnMvZnV0dXJlJztcclxuaW1wb3J0IEZpYmVyIGZyb20gJ2ZpYmVycyc7XHJcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fSxcclxuICAgIGF0dHJpYnV0ZXM6IHt9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgaGFyOiBudWxsLFxyXG4gICAgYXR0cmlidXRlczoge31cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbiBleHRlbmRzIE94eWdlbkV2ZW50cyB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xyXG4gICAgICAgIHRoaXMuY3R4ID0geyAuLi5ERUZBVUxUX0NUWCB9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcG8gPSB7fTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm94QmFzZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8nKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKCdPeHlnZW4nKSk7XHJcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX09QVFMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcclxuICAgICAgICB0aGlzLmN0eC5jYXBzID0geyAuLi5jdHguY2FwcyB8fCB7fSwgLi4uY2FwcywgfTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1JFU1VMVF9TVE9SRSwgcmVzdWx0cyB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcclxuXHJcbiAgICAgICAgaWYgKGN0eC5hdHRyaWJ1dGVzICYmICghcmVzdWx0cy5hdHRyaWJ1dGVzIHx8ICFPYmplY3Qua2V5cyhyZXN1bHRzLmF0dHJpYnV0ZXMpLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxyXG4gICAgICAgIC8vIHdlIHdpbGwgdXNlIHRoaXMgb2JqZWN0IHRvIGFjY2VzcyBPeHlnZW4gbW9kdWxlcyBhbmQgdGVzdCBjb250ZXh0IGZyb20gbW9kdWxlcyB1c2VkIGluIHRoZSB0ZXN0IChpZiBhbnkpICAgICAgICBcclxuICAgICAgICB0aGlzLm1ha2VPeEdsb2JhbCgpO1xyXG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmljZXMoKTtcclxuICAgICAgICAvLyBsb2FkIG1vZHVsZXNcclxuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIGlmIG9wdGlvbnMubWFrZU1vZHVsZXNHbG9iYWwgaXMgdHJ1ZSBvciB1bmRlZmluZWQgdGhhbiBkZWZpbmUgJ2N0eCcgY29udGVudCBhbmQgZWFjaCBtb2R1bGUgaW4gZ2xvYmFsIHNjb3BlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCBvcHRpb25zLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZXM6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZTogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGp1c3RTY3JpcHRMaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IGlzSW5EZWJ1Z01vZGUgPSBveHV0aWwuaXNJbkRlYnVnTW9kZSgpO1xyXG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSW5EZWJ1Z01vZGUgPyAtMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XHJcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBpbiBcIm94XCIgZ2xvYmFsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBjdHguZW52IHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBjdHguYXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnN0YXR1cyA9PT0gU1RBVFVTLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXBzID0gbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3JlIG9ubHkgbm9uLWVtcHR5IGNhcHMgcGVyIG1vZHVsZSB0aGF0IGhhcyB0aGlzLmNhcHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kQ2Fwc1ttb2R1bGUubmFtZV0gPSBjYXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2RDYXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGU6IHRoaXMuYWRkQXR0cmlidXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBnbG9iYWwub3guY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCInbmFtZScgYW5kICd2YWx1ZScgYXJndW1lbnRzIGFyZSByZXF1aXJlZCBmb3Igb3guYWRkQXR0cmlidXRlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRhY2htZW50KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnIoYEZpbGUgJHtmaWxlUGF0aH0gZG9lc24ndCBleGlzdGApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzLnB1c2goXHJcbiAgICAgICAgICAgIGNvcmVVdGlscy5uZXdGaWxlQXR0YWNobWVudChmaWxlUGF0aClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlT2JqZWN0RmlsZShwb1BhdGgpIHtcclxuICAgICAgICBpZiAoIXBvUGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvID0gcmVxdWlyZShwb1BhdGgpO1xyXG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBvYmplY3QgcmVwb3NpdG9yeSBhcyB0aGUgbWFpbiBvbmVcclxuICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gcG87XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHBvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZSBNZXRob2RzXHJcbiAgICAgKi9cclxuICAgIF93cmFwTG9nZ2VyKF9sb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXJXcmFwID0ge1xyXG4gICAgICAgICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncyksXHJcbiAgICAgICAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzKSxcclxuICAgICAgICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB1c2VySW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJEZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlcldhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcldyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvZyhfbG9nZ2VyLCBsZXZlbCwgYXJncywgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgaWYgKCFfbG9nZ2VyW2xldmVsXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sb2dnZXJbbGV2ZWxdLmFwcGx5KF9sb2dnZXIsIGFyZ3MpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3h1dGlsLnN0cmluZ2lmeShhcmdzLCAyKTtcclxuICAgICAgICBjb25zdCB0aW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIC8vIGFkZCB0aGUgbG9nIGVudHJ5IHRvIHRoZSByZXN1bHQgc3RvcmVcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTdG9yZSAmJiB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbC50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlbW92ZSBmaXJzdCBhcmd1bWVudCwgaWYgaXQncyBhIG1lc3NhZ2VcclxuICAgICAgICBhcmdzID0gbWVzc2FnZSA/IGFyZ3Muc2hpZnQoKSA6IGFyZ3M7XHJcbiAgICAgICAgdGhpcy5lbWl0TG9nKHRpbWUsIGxldmVsLCBtZXNzYWdlLCBhcmdzLCBzcmMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU2VydmljZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgb3hTZXJ2aWNlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X3NlcnZpY2VzJyk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUZpbGVzID0gZ2xvYi5zeW5jKCdzZXJ2aWNlLSouanMnLCB7IGN3ZDogb3hTZXJ2aWNlc0RpclBhdGggfSk7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgc2VydmljZXNcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlcy4uLicpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcnZpY2VGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZU5hbWUgPSBzZXJ2aWNlRmlsZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlUGF0aCA9IHBhdGguam9pbihveFNlcnZpY2VzRGlyUGF0aCwgc2VydmljZUZpbGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VydmljZUZpbGVOYW1lLm1hdGNoKFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcy5vcHRzLnNlcnZpY2VzID0gdW5kZWZpbmVkIGluIHNpbmdsZSBmaWxlIG1vZGVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLnNlcnZpY2VzKSAmJiAhdGhpcy5vcHRzLnNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2VOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlOiAnICsgc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5pbml0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgc2VydmljZSBcIicgKyBzZXJ2aWNlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aCkge1xyXG4gICAgICAgIGxldCBTZXJ2aWNlQ2xhc3MgPSByZXF1aXJlKHNlcnZpY2VQYXRoKTtcclxuICAgICAgICAvLyBFUzYgY2xhc3Mgd2lsbCBiZSB1bmRlciAnZGVmYXVsdCcgcHJvcGVydHlcclxuICAgICAgICBpZiAoU2VydmljZUNsYXNzLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgU2VydmljZToke3NlcnZpY2VOYW1lfWApKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGFzcyh0aGlzLm9wdHMsIHRoaXMuY3R4LCB0aGlzLnJlc3VsdFN0b3JlLCBzZXJ2aWNlTG9nZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgaW50ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRJbnRlcm5hbE1vZHVsZXMoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBleHRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEV4dGVybmFsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkRXh0ZXJuYWxNb2R1bGVzKCkge1xyXG4gICAgICAgIGxldCBtb2R1bGVzRm9sZGVyUGF0aCA9ICcuL21vZHVsZXMnO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdHMubW9kdWxlc19leHQgJiYgdHlwZW9mIHRoaXMub3B0cy5tb2R1bGVzX2V4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbW9kdWxlc0ZvbGRlclBhdGggPSB0aGlzLm9wdHMubW9kdWxlc19leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfbW9kdWxlcycpO1xyXG4gICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jd2QsIG1vZHVsZXNGb2xkZXJQYXRoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3hNb2R1bGVzRGlyUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbW9kdWxlRmlsZXMgPSBbXTtcclxuICAgICAgICAvLyBpZiBwYXJ0aWN1bGFyIG1vZHVsZSBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCB0aGVuIGxvYWQgb25seSB0aGVzZSBtb2R1bGVzXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLm1vZHVsZXMpICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGVOYW1lID0+IG1vZHVsZUZpbGVzLnB1c2goYG1vZHVsZS0ke21vZHVsZU5hbWV9LmpzYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgYWxsIGF2YWlsYWJsZSBtb2R1bGVzIChtaWdodCBiZSBtb3JlIHRpbWUgY29uc3VtaW5nKVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb2R1bGVGaWxlcyA9IGdsb2Iuc3luYygnbW9kdWxlLSouanMnLCB7IGN3ZDogb3hNb2R1bGVzRGlyUGF0aCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgbW9kdWxlcyAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlRmlsZU5hbWUgb2YgbW9kdWxlRmlsZXMpIHtcclxuICAgICAgICAgICAgLy8gZXh0cmFjdCBuYW1lIGZyb20gdGhlIG1vZHVsZSBmaWxlIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUgcGF0dGVyblxyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlRmlsZU5hbWUubWF0Y2goTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgpWzFdO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21GaWxlKG1vZHVsZU5hbWUsIG1vZHVsZUZpbGVOYW1lLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEludGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICAvLyBpZiBgbW9kdWxlc2AgaXMgZW1wdHkgb3IgdW5kZWZpbmVkIGluIG94eWdlbi5jb25mIHRoZW4gbG9hZCBhbGwgbW9kdWxlc1xyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBvbmx5IHRob3NlIGltcGxpY2l0bHkgZGVmaW5lZFxyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVVbmRlZmluZWRNb2RzID0gdGhpcy5vcHRzLm1vZHVsZXMgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhNb2R1bGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoZXhjbHVkZVVuZGVmaW5lZE1vZHMgJiYgIXRoaXMub3B0cy5tb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBNb2R1bGVDbGFzcyA9IE1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBveHV0aWwuZ2V0T3hNb2R1bGVzRGlyKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgTW9kdWxlOiR7bW9kdWxlTmFtZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUNsYXNzKG1vZHVsZU5hbWUsIE1vZHVsZUNsYXNzLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd3JhcE1vZHVsZShuYW1lLCBtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbGV0IG1vZHVsZU1ldGhvZHMgPSBPYmplY3Qua2V5cyhtb2R1bGUpO1xyXG4gICAgICAgIGlmICghbW9kdWxlTWV0aG9kcy5zb21lKHggPT4geD09PSAnZXhwb3J0cycpKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZU1ldGhvZHMgPSB0aGlzLl9nZXRBbGxQcm9wZXJ0eU5hbWVzKG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG1ldGhvZE5hbWUgb2YgbW9kdWxlTWV0aG9kcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBtb2R1bGVbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgYSBPeHlnZW5TdWJNb2R1bGVcclxuICAgICAgICAgICAgaWYgKCghKG1ldGhvZCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSAmJiAhKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkgJiYgdHlwZW9mIG1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykgfHwgbWV0aG9kTmFtZSA9PT0gJ2V4cG9ydHMnIHx8IG1ldGhvZE5hbWUgPT09ICdfY29tcGlsZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG1hcCBhbmQgd3JhcCBzdWItbW9kdWxlIG1ldGhvZHMgKHJlY3Vyc2l2ZSBjYWxsIHRvIF93cmFwTW9kdWxlKVxyXG4gICAgICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShgJHtuYW1lfS4ke21ldGhvZE5hbWV9YCwgbWV0aG9kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JhcCBtZXRob2RzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKERPX05PVF9XUkFQX01FVEhPRFMuaW5jbHVkZXMobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vID09PSAnZHJpdmVyJyB8fCBtZXRob2ROYW1lID09PSAnZ2V0RHJpdmVyJ1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IG1vZHVsZVttZXRob2ROYW1lXS5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzIGFuZCBldmVudCBoYW5kbGVyc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmluZGV4T2YoJ18nKSA9PT0gMCB8fCBtZXRob2ROYW1lLmluZGV4T2YoJ29uJykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShuYW1lLCBtZXRob2ROYW1lLCBhcmdzKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVbbWV0aG9kTmFtZV0uYXBwbHkobW9kdWxlLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gaW50ZXJuYWwgX2dldENhcGFiaWxpdGllcyBtZXRob2QgZm9yIGludGVybmFsIE94eWdlbiBDb3JlIHVzZVxyXG4gICAgICAgICAgICAgICAgLy8gY2FsbGluZyBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCB3b24ndCBiZSB2aXNpYmxlIGluIHRoZSB0ZXN0IHJlc3VsdHNcclxuICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lID09PSAnZ2V0Q2FwYWJpbGl0aWVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXJbJ19nZXRDYXBhYmlsaXRpZXMnXSA9IG1ldGhvZC5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2NvbW1hbmRXcmFwcGVyKG1ldGhvZE5hbWUsIGFyZ3MsIG1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnVGhyb3dpbmcgYWdhaW46JywgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICBfY29tbWFuZFdyYXBwZXIoY21kTmFtZSwgY21kQXJncywgbW9kdWxlLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZVtjbWROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBjbWRGbiA9IG1vZHVsZVtjbWROYW1lXTtcclxuICAgICAgICBjb25zdCBwdWJsaWNNZXRob2QgPSAhY21kTmFtZS5zdGFydHNXaXRoKCdfJykgJiYgY21kTmFtZSAhPT0gJ2Rpc3Bvc2UnO1xyXG5cclxuICAgICAgICAvLyBkZWxheSB0aGUgY29tbWFuZCBleGVjdXRpb24gaWYgcmVxdWlyZWRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5kZWxheSAmJlxyXG4gICAgICAgICAgICBwdWJsaWNNZXRob2QgJiZcclxuICAgICAgICAgICAgY21kTmFtZSAhPT0gJ2luaXQnICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbidcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZGVhc3luYy5zbGVlcCh0aGlzLm9wdHMuZGVsYXkgKiAxMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRocm93IGlmIGEgY29tbWFuZCBleGVjdXRlZCBvbiB1bml0aWFsaXplZCBtb2R1bGUgKGV4Y2VwdCBpbnRlcm5hbCBtZXRob2RzIGFuZCBhIGZldyBvdGhlcilcclxuICAgICAgICBpZiAoIW1vZHVsZS5pc0luaXRpYWxpemVkICYmIHB1YmxpY01ldGhvZCAmJiBjbWROYW1lICE9PSAnaW5pdCcgJiYgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ01pc3NpbmcgJyArIG1vZHVsZU5hbWUgKyAnLmluaXQoKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVjdHlwdCBhcmd1bWVudHNcclxuICAgICAgICBsZXQgZGVjcnlwdGVkQXJncyA9IHRoaXMuX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShjbWRBcmdzLCBtb2R1bGVOYW1lKTtcclxuICAgICAgICBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgIC8vIHJlcGxhY2UgcGFyYW1ldGVycyBpbiBtZXRob2QgYXJndW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXNcclxuICAgICAgICBjbWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoY21kQXJncyk7XHJcbiAgICAgICAgLy8gc3RhcnQgbWVhc3VyaW5nIG1ldGhvZCBleGVjdXRpb24gdGltZVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGNvbW1hbmQgbG9jYXRpb24gaW5mb3JtYXRpb24gKGUuZy4gZmlsZSBuYW1lIGFuZCBjb21tYW5kIGxpbmUpXHJcbiAgICAgICAgbGV0IGNtZExvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICAvLyBnZW5lcmF0ZSBzdGVwIHJlc3VsdCBpZFxyXG4gICAgICAgIGNvbnN0IHN0ZXBSZXN1bHRJZCA9IHYxKCk7XHJcbiAgICAgICAgLy8gZG8gbm90IHJlcG9ydCByZXN1bHRzIG9yIGxpbmUgdXBkYXRlcyBvbiBpbnRlcm5hbCBtZXRob2RzIChzdGFydGVkIHdpdGggJ18nKVxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY21kTG9jYXRpb24gPSB0aGlzLl9nZXRDb21tYW5kTG9jYXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QmVmb3JlQ29tbWFuZChzdGVwUmVzdWx0SWQsIGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGVtaXQgYmVmb3JlIGV2ZW50c1xyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2Rpc3Bvc2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXR2YWxQcm9taXNlID0gdGhpcy5fd3JhcEFzeW5jKG1vZHVsZVtjbWROYW1lXSkuYXBwbHkobW9kdWxlLCBkZWNyeXB0ZWRBcmdzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXR2YWxQcm9taXNlICYmIHJldHZhbFByb21pc2UudGhlbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VEb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dmFsUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhcHJvbWlzZURvbmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsUHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2ludmFsaWQgc2Vzc2lvbiBpZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgZXJyb3Igb2N1cnJlZCBhZnRlciB0aGUgbW9kdWxlIHdhcyBkaXNwb3NlZCAob3IgaW4gYSBwcm9jZXNzIG9mIGJlaW5nIGRpc3Bvc2VkKVxyXG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0IGZvciBpbml0IG1ldGhvZHMgb2YgY291cnNlXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBtb2R1bGUuaXNJbml0aWFsaXplZCA9PT0gJ2Jvb2xlYW4nICYmICFtb2R1bGUuaXNJbml0aWFsaXplZClcclxuICAgICAgICAgICAgICAgICAgICAmJiBjbWROYW1lICE9PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCc9PT09IGVycm9yID09PT0nLCBlKVxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBSZXN1bHQ7XHJcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBjb25zdCB3YWl0SWQgPSArbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnB1c2god2FpdElkKTtcclxuXHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQgPSB0aGlzLl9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncywgY21kTG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQuaWQgPSBzdGVwUmVzdWx0SWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5pbmRleE9mKHdhaXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy9zdGVwUmVzdWx0LmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzLnB1c2goc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEFmdGVyQ29tbWFuZChjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBlbmRUaW1lLCBzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuaXNGYXRhbCAmJiAhdGhpcy5vcHRzLmNvbnRpbnVlT25FcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoIWVycm9yLmxvY2F0aW9uICYmIGNtZExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RlcFJlc3VsdCAmJiBzdGVwUmVzdWx0LmZhaWx1cmUgJiYgc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBBc3luYyAoZm4sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSBjb250ZXh0IHx8IHRoaXM7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvZGUgaXMgbm90IHJ1bm5pbmcgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHJ1biBhc3luYyBjb2RlIGFzIHN5bmMgdXNpbmcgZGVhc3luYyBtb2R1bGVcclxuICAgICAgICAgICAgaWYgKCFGaWJlci5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR2YWwgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBmaW5hbFZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJldHZhbCAmJiByZXR2YWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXR2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygncmVhZHlTdGF0ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhpcyBlcnJvciBhcyBpdCB1c3VhbGx5IGhhcHBlbnMgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBPeHlnZW4gaXMgZGlzcG9zZWQgYW5kIHByb2Nlc3MgaXMgYmVpbmcga2lsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlYXN5bmMubG9vcFdoaWxlKCkgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHVzZSBGaWJlcidzIEZ1dHVyZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlID0gbmV3IEZ1dHVyZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsKSA9PiBmdXR1cmUucmV0dXJuKHZhbCksIChlcnIpID0+IGZ1dHVyZS50aHJvdyhlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnV0dXJlLndhaXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0cmlldmUgY3VycmVudCBsaW5lIGFuZCBmdW5jdGlvbiBuYW1lIGZyb20gdGhlIGNhbGwgc3RhY2tcclxuICAgIF9nZXRDb21tYW5kTG9jYXRpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBfX3N0YWNrO1xyXG4gICAgICAgIGxldCBjYWxsZXIgPSBudWxsO1xyXG4gICAgICAgIGZvciAobGV0IGNhbGwgb2Ygc3RhY2spIHtcclxuICAgICAgICAgICAgaWYgKF9fZmlsZW5hbWUgPT09IGNhbGwuZ2V0RmlsZU5hbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBjYWxsZXIsIHdoaWNoIGlzIG5vdCB0aGUgY3VycmVudCBmaWxlXHJcbiAgICAgICAgICAgIGNhbGxlciA9IGNhbGw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FsbGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtjYWxsZXIuZ2V0RmlsZU5hbWUoKX06JHtjYWxsZXIuZ2V0TGluZU51bWJlcigpICsgdGhpcy5hZGp1c3RTY3JpcHRMaW5lfToke2NhbGxlci5nZXRDb2x1bW5OdW1iZXIoKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MsIGxvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyKSB7XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBuZXcgU3RlcFJlc3VsdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9XHJcbiAgICAgICAgICAgIChtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lICYmIG1vZHVsZS5nZXRTdGVwRGlzcGxheU5hbWUobWV0aG9kTmFtZSwgYXJncywgcmV0dmFsLCBlcnIpKSB8fFxyXG4gICAgICAgICAgICBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG5cclxuICAgICAgICBzdGVwLm5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgICAgICBzdGVwLnRyYW5zYWN0aW9uID0gZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lIHx8IG51bGw7ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBoZXJlIGlmIGl0J3MgYWxyZWFkeSBwb3B1bGF0ZWQgaW4gcnM/XHJcbiAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGxvY2F0aW9uO1xyXG4gICAgICAgIC8vIG1vZHVsZS5leHRyYSBpcyByZXNldGVkIGZvciBlYWNoIHN0ZXAsIHNvIHdlIG11c3QgY2xvbmUgaXRcclxuICAgICAgICBzdGVwLmV4dHJhID0geyAuLi5tb2R1bGUuZXh0cmEgfTtcclxuICAgICAgICBpZiAobW9kdWxlLmV4dHJhICYmIG1vZHVsZS5leHRyYS5odHRwKSB7XHJcbiAgICAgICAgICAgIHN0ZXAudHlwZSA9ICdodHRwJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIgJiYgZXJyLnR5cGUgJiYgZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfUEFTU0VEKSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLlBBU1NFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSBzdGVwIHN0YXR1c1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmlzRmF0YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZHVsZU5hbWUgPT09ICdsb2cnICYmIG1ldGhvZE5hbWUgPT09ICd3YXJuJykge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLlBBU1NFRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RlcC5hY3Rpb24gPSAodHlwZW9mIG1vZHVsZS5faXNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBtb2R1bGUuX2lzQWN0aW9uKG1ldGhvZE5hbWUpIDogZmFsc2UpO1xyXG4gICAgICAgIHN0ZXAuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZW5kVGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgc3RlcC5kdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl9nZXRTdGF0cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXRzID0gbW9kdWxlLl9nZXRTdGF0cyhtZXRob2ROYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXRzID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlZFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlLmxvY2F0aW9uID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRha2VTbmFwc2hvdCh0aGlzLm9wdHMsIG1vZHVsZSwgc3RlcCwgbWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIGluIFwiYmFzZWxpbmVcIiBtb2RlLCB0YWtlIHNuYXBzaG90IGFuZCBzY3JlZW5zaG90IGZvciBlYWNoIFwiYWN0aW9uXCIgc3RlcFxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0cy5iYXNlbGluZSkge1xyXG4gICAgICAgICAgICBpZiAoIXN0ZXAuc2NyZWVuc2hvdCAmJiBzdGVwLmFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGFrZVNjcmVlbnNob3QobW9kdWxlLCBzdGVwLCBtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWtlU25hcHNob3QodGhpcy5vcHRzLCBtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0eXBlb2YgdGhpcy5zZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2UuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgc2VydmljZSBkaXNwb3NhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMgfHwgdHlwZW9mIHRoaXMubW9kdWxlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZC5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VSZXN1bHQgPSBtb2QuZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlUmVzdWx0ICYmIHR5cGVvZiBkaXNwb3NlUmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpc3Bvc2VSZXN1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtb2R1bGUgZGlzcG9zYWwgZXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogU2VydmljZXMgRXZlbnQgRW1pdHRlcnNcclxuICAgICAqL1xyXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlTG9hZGVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlTG9hZGVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlV2lsbERpc3Bvc2VcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShhcmdzKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgdXNlciBwYXJhbWV0ZXJzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxyXG4gICAgICAgIGZvciAobGV0IHBhcmFtTmFtZSBpbiB0aGlzLmN0eC5wYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5jdHgucGFyYW1zW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgcGFyYW1OYW1lICsgJ30nLCAnZycpLCBwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5lbnYuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIGVudk5hbWUgKyAnfScsICdnJyksIGVudlZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCBvYmogKS5mb3JFYWNoKGZ1bmN0aW9uICggcHJvcCApIHtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvcHMuaW5kZXhPZiggcHJvcCApID09PSAtMSApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cclxuICAgICAgICB9IHdoaWxlICggb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKCBvYmogKSApO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93YWl0U3RlcFJlc3VsdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGFyZ3MsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuXHJcbiAgICBfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0YWtlU2NyZWVuc2hvdChtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHNjcmVlbnNob3RcclxuICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxyXG4gICAgICAgIGRlYXN5bmMuc2xlZXAoMTAwMCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0YWtlU25hcHNob3Qob3B0aW9ucywgbW9kdWxlLCBzdGVwLCBtZXRob2ROYW1lKSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZS5fdGFrZVNuYXBzaG90U2lsZW50ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHNuYXBzaG90O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBzbmFwc2hvdCA9IG1vZHVsZS5fdGFrZVNuYXBzaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc25hcHNob3QsIHdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxyXG4gICAgICAgIGRlYXN5bmMuc2xlZXAoMTAwMCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc25hcHNob3QgPSBtb2R1bGUuX3Rha2VTbmFwc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcHNob3QpIHtcclxuICAgICAgICBpZiAoIXN0ZXAuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgICAgc3RlcC5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkZXRlcm1pbmUgc25hcHNob3QgZmlsZSBleHRlbnNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWVcclxuICAgICAgICBjb25zdCBzbmFwc2hvdFR5cGUgPSBtb2R1bGUubmFtZSAmJiBtb2R1bGUubmFtZSA9PT0gJ21vYicgPyAneG1sJyA6ICdodG1sJztcclxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gY29yZVV0aWxzLm5ld1NuYXBzaG90QXR0YWNobWVudChvcHRpb25zLCBzbmFwc2hvdCwgc25hcHNob3RUeXBlKTtcclxuICAgICAgICBpZiAoYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICBzdGVwLmF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElB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Q2hCO0VBQ0EsSUFBSTtJQUNBak4sSUFBSSxDQUFDdUwsVUFBVSxHQUFHaEwsTUFBTSxDQUFDME0scUJBQXFCLENBQUMvRyxVQUFVLENBQUM7RUFDOUQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7SUFHTmtPLGdCQUFPLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDbkIsSUFBSTtNQUNBckgsSUFBSSxDQUFDdUwsVUFBVSxHQUFHaEwsTUFBTSxDQUFDME0scUJBQXFCLENBQUMvRyxVQUFVLENBQUM7SUFDOUQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7TUFFTixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUNBLE9BQU8sSUFBSTtBQUNmO0FBRUEsU0FBU21TLFlBQVlBLENBQUNwTixPQUFPLEVBQUVzQyxNQUFNLEVBQUVQLElBQUksRUFBRWtHLFVBQVUsRUFBRTtFQUNyRCxJQUFJLE9BQU8zRixNQUFNLENBQUMyTSxtQkFBbUIsS0FBSyxVQUFVLEVBQUU7SUFDbEQsT0FBTyxLQUFLO0VBQ2hCO0VBQ0EsSUFBSUMsUUFBUTtFQUNaLElBQUk7SUFDQUEsUUFBUSxHQUFHNU0sTUFBTSxDQUFDMk0sbUJBQW1CLENBQUNoSCxVQUFVLENBQUM7RUFDckQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7SUFFTmtPLGdCQUFPLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDbkIsSUFBSTtNQUNBOEYsUUFBUSxHQUFHNU0sTUFBTSxDQUFDMk0sbUJBQW1CLENBQUNoSCxVQUFVLENBQUM7SUFDckQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7TUFDTixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUVBLElBQUlpVSxRQUFRLEVBQUU7SUFDVixJQUFJLENBQUNuTixJQUFJLENBQUNwRCxXQUFXLEVBQUU7TUFDbkJvRCxJQUFJLENBQUNwRCxXQUFXLEdBQUcsRUFBRTtJQUN6QjtJQUVBLE1BQU13USxZQUFZLEdBQUc3TSxNQUFNLENBQUNsRixJQUFJLElBQUlrRixNQUFNLENBQUNsRixJQUFJLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNO0lBQzFFLE1BQU1nUyxVQUFVLEdBQUczVSxTQUFTLENBQUM0VSxxQkFBcUIsQ0FBQ3JQLE9BQU8sRUFBRWtQLFFBQVEsRUFBRUMsWUFBWSxDQUFDO0lBQ25GLElBQUlDLFVBQVUsRUFBRTtNQUNack4sSUFBSSxDQUFDcEQsV0FBVyxDQUFDNkUsSUFBSSxDQUFDNEwsVUFBVSxDQUFDO01BQ2pDLE9BQU8sSUFBSTtJQUNmO0VBQ0o7RUFDQSxPQUFPLEtBQUs7QUFDaEIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
890
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2xvYiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfZnMiLCJfZGVhc3luYyIsIl9mdXR1cmUiLCJfZmliZXJzIiwiX29zIiwiX3N0ZXBSZXN1bHQiLCJfT3h5Z2VuRXZlbnRzIiwiX3V0aWwiLCJjb3JlVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9PeHlnZW5FcnJvciIsIl9oZWxwZXIiLCJfc3RhdHVzIiwiTW9kdWxlcyIsIl9sb2dnZXIyIiwiX094eWdlblN1Yk1vZHVsZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInYxIiwiZ2xvYmFsIiwib3JpZyIsIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJfIiwic3RhY2siLCJlcnIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsIkRFRkFVTFRfVElNRU9VVCIsIkRFRkFVTFRfT1BUUyIsImJhY2t0cmFjZSIsImNvbXBpbGVyIiwiZmFpbEFtYmlndW91c0RlZmluaXRpb25zIiwiZmFpbEZhc3QiLCJpZ25vcmVVbmRlZmluZWREZWZpbml0aW9ucyIsIm5hbWUiLCJwcm9maWxlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwic2VydmljZUZpbGVOYW1lIiwic2VydmljZUZpbGVQYXRoIiwibWF0Y2giLCJzZXJ2aWNlTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInNlcnZpY2UiLCJfbG9hZFNlcnZpY2UiLCJFT0wiLCJzdGFja3RyYWNlIiwic2VydmljZVBhdGgiLCJTZXJ2aWNlQ2xhc3MiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwic3RhcnRzV2l0aCIsInByb3RvdHlwZSIsInNsaWNlIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZ2V0T3h5Z2VuRXJyb3IiLCJfY29tbWFuZFdyYXBwZXIiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwiZGVsYXkiLCJkZWFzeW5jIiwic2xlZXAiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiZGVjcnlwdGVkQXJncyIsIl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkiLCJfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUiLCJjbWRMb2NhdGlvbiIsInN0ZXBSZXN1bHRJZCIsIl9nZXRDb21tYW5kTG9jYXRpb24iLCJlbWl0QmVmb3JlQ29tbWFuZCIsIl93cmFwQXN5bmMiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSIsInJldHZhbFByb21pc2UiLCJ0aGVuIiwicHJvbWlzZURvbmUiLCJsb29wV2hpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCIsInN0ZXBSZXN1bHQiLCJkb25lIiwid2FpdElkIiwiX2dldFN0ZXBSZXN1bHQiLCJpZCIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJkaXNhYmxlU2NyZWVuc2hvdCIsInRha2VTY3JlZW5zaG90IiwidGFrZVNuYXBzaG90IiwiYmFzZWxpbmUiLCJzY3JlZW5zaG90Iiwia2V5IiwiZGlzcG9zZVJlc3VsdCIsIm9uTW9kdWxlTG9hZGVkIiwib25Nb2R1bGVJbml0aWFsaXplZCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJfbmV3QXJncyIsImFyZyIsIl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudCIsImdldERlY3J5cHRSZXN1bHQiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCIsImV4cG9ydHMiLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJfdGFrZVNuYXBzaG90U2lsZW50Iiwic25hcHNob3QiLCJzbmFwc2hvdFR5cGUiLCJhdHRhY2htZW50IiwibmV3U25hcHNob3RBdHRhY2htZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvT3h5Z2VuQ29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cclxuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZGVhc3luYyBmcm9tICdkZWFzeW5jJztcclxuaW1wb3J0IEZ1dHVyZSBmcm9tICdmaWJlcnMvZnV0dXJlJztcclxuaW1wb3J0IEZpYmVyIGZyb20gJ2ZpYmVycyc7XHJcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fSxcclxuICAgIGF0dHJpYnV0ZXM6IHt9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgaGFyOiBudWxsLFxyXG4gICAgYXR0cmlidXRlczoge31cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbiBleHRlbmRzIE94eWdlbkV2ZW50cyB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xyXG4gICAgICAgIHRoaXMuY3R4ID0geyAuLi5ERUZBVUxUX0NUWCB9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcG8gPSB7fTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm94QmFzZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8nKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKCdPeHlnZW4nKSk7XHJcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX09QVFMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcclxuICAgICAgICB0aGlzLmN0eC5jYXBzID0geyAuLi5jdHguY2FwcyB8fCB7fSwgLi4uY2FwcywgfTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1JFU1VMVF9TVE9SRSwgcmVzdWx0cyB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcclxuXHJcbiAgICAgICAgaWYgKGN0eC5hdHRyaWJ1dGVzICYmICghcmVzdWx0cy5hdHRyaWJ1dGVzIHx8ICFPYmplY3Qua2V5cyhyZXN1bHRzLmF0dHJpYnV0ZXMpLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxyXG4gICAgICAgIC8vIHdlIHdpbGwgdXNlIHRoaXMgb2JqZWN0IHRvIGFjY2VzcyBPeHlnZW4gbW9kdWxlcyBhbmQgdGVzdCBjb250ZXh0IGZyb20gbW9kdWxlcyB1c2VkIGluIHRoZSB0ZXN0IChpZiBhbnkpICAgICAgICBcclxuICAgICAgICB0aGlzLm1ha2VPeEdsb2JhbCgpO1xyXG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmljZXMoKTtcclxuICAgICAgICAvLyBsb2FkIG1vZHVsZXNcclxuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIGlmIG9wdGlvbnMubWFrZU1vZHVsZXNHbG9iYWwgaXMgdHJ1ZSBvciB1bmRlZmluZWQgdGhhbiBkZWZpbmUgJ2N0eCcgY29udGVudCBhbmQgZWFjaCBtb2R1bGUgaW4gZ2xvYmFsIHNjb3BlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCBvcHRpb25zLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZXM6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZTogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGp1c3RTY3JpcHRMaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IGlzSW5EZWJ1Z01vZGUgPSBveHV0aWwuaXNJbkRlYnVnTW9kZSgpO1xyXG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSW5EZWJ1Z01vZGUgPyAtMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XHJcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBpbiBcIm94XCIgZ2xvYmFsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBjdHguZW52IHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBjdHguYXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnN0YXR1cyA9PT0gU1RBVFVTLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXBzID0gbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3JlIG9ubHkgbm9uLWVtcHR5IGNhcHMgcGVyIG1vZHVsZSB0aGF0IGhhcyB0aGlzLmNhcHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kQ2Fwc1ttb2R1bGUubmFtZV0gPSBjYXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2RDYXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGU6IHRoaXMuYWRkQXR0cmlidXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBnbG9iYWwub3guY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCInbmFtZScgYW5kICd2YWx1ZScgYXJndW1lbnRzIGFyZSByZXF1aXJlZCBmb3Igb3guYWRkQXR0cmlidXRlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRhY2htZW50KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnIoYEZpbGUgJHtmaWxlUGF0aH0gZG9lc24ndCBleGlzdGApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzLnB1c2goXHJcbiAgICAgICAgICAgIGNvcmVVdGlscy5uZXdGaWxlQXR0YWNobWVudChmaWxlUGF0aClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlT2JqZWN0RmlsZShwb1BhdGgpIHtcclxuICAgICAgICBpZiAoIXBvUGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvID0gcmVxdWlyZShwb1BhdGgpO1xyXG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBvYmplY3QgcmVwb3NpdG9yeSBhcyB0aGUgbWFpbiBvbmVcclxuICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gcG87XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHBvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZSBNZXRob2RzXHJcbiAgICAgKi9cclxuICAgIF93cmFwTG9nZ2VyKF9sb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXJXcmFwID0ge1xyXG4gICAgICAgICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncyksXHJcbiAgICAgICAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzKSxcclxuICAgICAgICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB1c2VySW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJEZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlcldhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcldyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvZyhfbG9nZ2VyLCBsZXZlbCwgYXJncywgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgaWYgKCFfbG9nZ2VyW2xldmVsXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sb2dnZXJbbGV2ZWxdLmFwcGx5KF9sb2dnZXIsIGFyZ3MpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3h1dGlsLnN0cmluZ2lmeShhcmdzLCAyKTtcclxuICAgICAgICBjb25zdCB0aW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIC8vIGFkZCB0aGUgbG9nIGVudHJ5IHRvIHRoZSByZXN1bHQgc3RvcmVcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTdG9yZSAmJiB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbC50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlbW92ZSBmaXJzdCBhcmd1bWVudCwgaWYgaXQncyBhIG1lc3NhZ2VcclxuICAgICAgICBhcmdzID0gbWVzc2FnZSA/IGFyZ3Muc2hpZnQoKSA6IGFyZ3M7XHJcbiAgICAgICAgdGhpcy5lbWl0TG9nKHRpbWUsIGxldmVsLCBtZXNzYWdlLCBhcmdzLCBzcmMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU2VydmljZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgb3hTZXJ2aWNlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X3NlcnZpY2VzJyk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUZpbGVzID0gZ2xvYi5zeW5jKCdzZXJ2aWNlLSouanMnLCB7IGN3ZDogb3hTZXJ2aWNlc0RpclBhdGggfSk7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgc2VydmljZXNcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlcy4uLicpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcnZpY2VGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZU5hbWUgPSBzZXJ2aWNlRmlsZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlUGF0aCA9IHBhdGguam9pbihveFNlcnZpY2VzRGlyUGF0aCwgc2VydmljZUZpbGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VydmljZUZpbGVOYW1lLm1hdGNoKFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcy5vcHRzLnNlcnZpY2VzID0gdW5kZWZpbmVkIGluIHNpbmdsZSBmaWxlIG1vZGVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLnNlcnZpY2VzKSAmJiAhdGhpcy5vcHRzLnNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2VOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlOiAnICsgc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5pbml0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgc2VydmljZSBcIicgKyBzZXJ2aWNlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aCkge1xyXG4gICAgICAgIGxldCBTZXJ2aWNlQ2xhc3MgPSByZXF1aXJlKHNlcnZpY2VQYXRoKTtcclxuICAgICAgICAvLyBFUzYgY2xhc3Mgd2lsbCBiZSB1bmRlciAnZGVmYXVsdCcgcHJvcGVydHlcclxuICAgICAgICBpZiAoU2VydmljZUNsYXNzLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgU2VydmljZToke3NlcnZpY2VOYW1lfWApKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGFzcyh0aGlzLm9wdHMsIHRoaXMuY3R4LCB0aGlzLnJlc3VsdFN0b3JlLCBzZXJ2aWNlTG9nZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgaW50ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRJbnRlcm5hbE1vZHVsZXMoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBleHRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEV4dGVybmFsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkRXh0ZXJuYWxNb2R1bGVzKCkge1xyXG4gICAgICAgIGxldCBtb2R1bGVzRm9sZGVyUGF0aCA9ICcuL21vZHVsZXMnO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdHMubW9kdWxlc19leHQgJiYgdHlwZW9mIHRoaXMub3B0cy5tb2R1bGVzX2V4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbW9kdWxlc0ZvbGRlclBhdGggPSB0aGlzLm9wdHMubW9kdWxlc19leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfbW9kdWxlcycpO1xyXG4gICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jd2QsIG1vZHVsZXNGb2xkZXJQYXRoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3hNb2R1bGVzRGlyUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbW9kdWxlRmlsZXMgPSBbXTtcclxuICAgICAgICAvLyBpZiBwYXJ0aWN1bGFyIG1vZHVsZSBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCB0aGVuIGxvYWQgb25seSB0aGVzZSBtb2R1bGVzXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLm1vZHVsZXMpICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGVOYW1lID0+IG1vZHVsZUZpbGVzLnB1c2goYG1vZHVsZS0ke21vZHVsZU5hbWV9LmpzYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgYWxsIGF2YWlsYWJsZSBtb2R1bGVzIChtaWdodCBiZSBtb3JlIHRpbWUgY29uc3VtaW5nKVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb2R1bGVGaWxlcyA9IGdsb2Iuc3luYygnbW9kdWxlLSouanMnLCB7IGN3ZDogb3hNb2R1bGVzRGlyUGF0aCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgbW9kdWxlcyAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlRmlsZU5hbWUgb2YgbW9kdWxlRmlsZXMpIHtcclxuICAgICAgICAgICAgLy8gZXh0cmFjdCBuYW1lIGZyb20gdGhlIG1vZHVsZSBmaWxlIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUgcGF0dGVyblxyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlRmlsZU5hbWUubWF0Y2goTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgpWzFdO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21GaWxlKG1vZHVsZU5hbWUsIG1vZHVsZUZpbGVOYW1lLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEludGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICAvLyBpZiBgbW9kdWxlc2AgaXMgZW1wdHkgb3IgdW5kZWZpbmVkIGluIG94eWdlbi5jb25mIHRoZW4gbG9hZCBhbGwgbW9kdWxlc1xyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBvbmx5IHRob3NlIGltcGxpY2l0bHkgZGVmaW5lZFxyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVVbmRlZmluZWRNb2RzID0gdGhpcy5vcHRzLm1vZHVsZXMgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhNb2R1bGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoZXhjbHVkZVVuZGVmaW5lZE1vZHMgJiYgIXRoaXMub3B0cy5tb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBNb2R1bGVDbGFzcyA9IE1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBveHV0aWwuZ2V0T3hNb2R1bGVzRGlyKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgTW9kdWxlOiR7bW9kdWxlTmFtZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUNsYXNzKG1vZHVsZU5hbWUsIE1vZHVsZUNsYXNzLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd3JhcE1vZHVsZShuYW1lLCBtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbGV0IG1vZHVsZU1ldGhvZHMgPSBPYmplY3Qua2V5cyhtb2R1bGUpO1xyXG4gICAgICAgIGlmICghbW9kdWxlTWV0aG9kcy5zb21lKHggPT4geD09PSAnZXhwb3J0cycpKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZU1ldGhvZHMgPSB0aGlzLl9nZXRBbGxQcm9wZXJ0eU5hbWVzKG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG1ldGhvZE5hbWUgb2YgbW9kdWxlTWV0aG9kcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBtb2R1bGVbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgYSBPeHlnZW5TdWJNb2R1bGVcclxuICAgICAgICAgICAgaWYgKCghKG1ldGhvZCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSAmJiAhKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkgJiYgdHlwZW9mIG1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykgfHwgbWV0aG9kTmFtZSA9PT0gJ2V4cG9ydHMnIHx8IG1ldGhvZE5hbWUgPT09ICdfY29tcGlsZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG1hcCBhbmQgd3JhcCBzdWItbW9kdWxlIG1ldGhvZHMgKHJlY3Vyc2l2ZSBjYWxsIHRvIF93cmFwTW9kdWxlKVxyXG4gICAgICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShgJHtuYW1lfS4ke21ldGhvZE5hbWV9YCwgbWV0aG9kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JhcCBtZXRob2RzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKERPX05PVF9XUkFQX01FVEhPRFMuaW5jbHVkZXMobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vID09PSAnZHJpdmVyJyB8fCBtZXRob2ROYW1lID09PSAnZ2V0RHJpdmVyJ1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IG1vZHVsZVttZXRob2ROYW1lXS5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzIGFuZCBldmVudCBoYW5kbGVyc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoJ18nKSB8fCBtZXRob2ROYW1lLnN0YXJ0c1dpdGgoJ29uJykpIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByaW50IG9ubHkgYWJvdXQgcHJpdmF0ZSBtZXRob2RzICYgYW5kIG9ubHkgaWYgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkIHRvIGF2b2lkIGxvZ3MgY2x1dHRlclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoJ18nKSAmJiBtb2R1bGUuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVttZXRob2ROYW1lXS5hcHBseShtb2R1bGUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbnRlcm5hbCBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCBmb3IgaW50ZXJuYWwgT3h5Z2VuIENvcmUgdXNlXHJcbiAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIHdvbid0IGJlIHZpc2libGUgaW4gdGhlIHRlc3QgcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdnZXRDYXBhYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlclsnX2dldENhcGFiaWxpdGllcyddID0gbWV0aG9kLmJpbmQobW9kdWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fY29tbWFuZFdyYXBwZXIobWV0aG9kTmFtZSwgYXJncywgbW9kdWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBPeEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdUaHJvd2luZyBhZ2FpbjonLCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIF9jb21tYW5kV3JhcHBlcihjbWROYW1lLCBjbWRBcmdzLCBtb2R1bGUsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSB8fCAhbW9kdWxlW2NtZE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNtZEZuID0gbW9kdWxlW2NtZE5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHB1YmxpY01ldGhvZCA9ICFjbWROYW1lLnN0YXJ0c1dpdGgoJ18nKSAmJiBjbWROYW1lICE9PSAnZGlzcG9zZSc7XHJcblxyXG4gICAgICAgIC8vIGRlbGF5IHRoZSBjb21tYW5kIGV4ZWN1dGlvbiBpZiByZXF1aXJlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5vcHRzLmRlbGF5ICYmXHJcbiAgICAgICAgICAgIHB1YmxpY01ldGhvZCAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAnaW5pdCcgJiZcclxuICAgICAgICAgICAgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBkZWFzeW5jLnNsZWVwKHRoaXMub3B0cy5kZWxheSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhyb3cgaWYgYSBjb21tYW5kIGV4ZWN1dGVkIG9uIHVuaXRpYWxpemVkIG1vZHVsZSAoZXhjZXB0IGludGVybmFsIG1ldGhvZHMgYW5kIGEgZmV3IG90aGVyKVxyXG4gICAgICAgIGlmICghbW9kdWxlLmlzSW5pdGlhbGl6ZWQgJiYgcHVibGljTWV0aG9kICYmIGNtZE5hbWUgIT09ICdpbml0JyAmJiBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnTWlzc2luZyAnICsgbW9kdWxlTmFtZSArICcuaW5pdCgpJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWN0eXB0IGFyZ3VtZW50c1xyXG4gICAgICAgIGxldCBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGNtZEFyZ3MsIG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGRlY3J5cHRlZEFyZ3MgPSB0aGlzLl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShkZWNyeXB0ZWRBcmdzKTtcclxuXHJcbiAgICAgICAgLy8gcmVwbGFjZSBwYXJhbWV0ZXJzIGluIG1ldGhvZCBhcmd1bWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlc1xyXG4gICAgICAgIGNtZEFyZ3MgPSB0aGlzLl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShjbWRBcmdzKTtcclxuICAgICAgICAvLyBzdGFydCBtZWFzdXJpbmcgbWV0aG9kIGV4ZWN1dGlvbiB0aW1lXHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICAvLyBhZGQgY29tbWFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbiAoZS5nLiBmaWxlIG5hbWUgYW5kIGNvbW1hbmQgbGluZSlcclxuICAgICAgICBsZXQgY21kTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgIC8vIGdlbmVyYXRlIHN0ZXAgcmVzdWx0IGlkXHJcbiAgICAgICAgY29uc3Qgc3RlcFJlc3VsdElkID0gdjEoKTtcclxuICAgICAgICAvLyBkbyBub3QgcmVwb3J0IHJlc3VsdHMgb3IgbGluZSB1cGRhdGVzIG9uIGludGVybmFsIG1ldGhvZHMgKHN0YXJ0ZWQgd2l0aCAnXycpXHJcbiAgICAgICAgaWYgKHB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBjbWRMb2NhdGlvbiA9IHRoaXMuX2dldENvbW1hbmRMb2NhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRCZWZvcmVDb21tYW5kKHN0ZXBSZXN1bHRJZCwgY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmc6ICcgKyBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZW1pdCBiZWZvcmUgZXZlbnRzXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnZGlzcG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJldHZhbFByb21pc2UgPSB0aGlzLl93cmFwQXN5bmMobW9kdWxlW2NtZE5hbWVdKS5hcHBseShtb2R1bGUsIGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldHZhbFByb21pc2UgJiYgcmV0dmFsUHJvbWlzZS50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZURvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR2YWxQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFwcm9taXNlRG9uZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWxQcm9taXNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygnaW52YWxpZCBzZXNzaW9uIGlkJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBlcnJvciBvY3VycmVkIGFmdGVyIHRoZSBtb2R1bGUgd2FzIGRpc3Bvc2VkIChvciBpbiBhIHByb2Nlc3Mgb2YgYmVpbmcgZGlzcG9zZWQpXHJcbiAgICAgICAgICAgICAgICAvLyBleGNlcHQgZm9yIGluaXQgbWV0aG9kcyBvZiBjb3Vyc2VcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG1vZHVsZS5pc0luaXRpYWxpemVkID09PSAnYm9vbGVhbicgJiYgIW1vZHVsZS5pc0luaXRpYWxpemVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIGNtZE5hbWUgIT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJz09PT0gZXJyb3IgPT09PScsIGUpXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICBsZXQgc3RlcFJlc3VsdDtcclxuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRJZCA9ICtuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QucHVzaCh3YWl0SWQpO1xyXG5cclxuICAgICAgICAgICAgc3RlcFJlc3VsdCA9IHRoaXMuX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzLCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycm9yKTtcclxuICAgICAgICAgICAgc3RlcFJlc3VsdC5pZCA9IHN0ZXBSZXN1bHRJZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LmluZGV4T2Yod2FpdElkKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICAvL3N0ZXBSZXN1bHQubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMucHVzaChzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QWZ0ZXJDb21tYW5kKGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIGVuZFRpbWUsIHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5pc0ZhdGFsICYmICF0aGlzLm9wdHMuY29udGludWVPbkVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IubG9jYXRpb24gJiYgY21kTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0ICYmIHN0ZXBSZXN1bHQuZmFpbHVyZSAmJiBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBfd3JhcEFzeW5jIChmbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IGNvbnRleHQgfHwgdGhpcztcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY29kZSBpcyBub3QgcnVubmluZyBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gcnVuIGFzeW5jIGNvZGUgYXMgc3luYyB1c2luZyBkZWFzeW5jIG1vZHVsZVxyXG4gICAgICAgICAgICBpZiAoIUZpYmVyLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHZhbCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbmFsVmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dmFsICYmIHJldHZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJldHZhbClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdyZWFkeVN0YXRlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIGVycm9yIGFzIGl0IHVzdWFsbHkgaGFwcGVucyBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIE94eWdlbiBpcyBkaXNwb3NlZCBhbmQgcHJvY2VzcyBpcyBiZWluZyBraWxsZWRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVhc3luYy5sb29wV2hpbGUoKSBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGlmIHdlIGFyZSBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gdXNlIEZpYmVyJ3MgRnV0dXJlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmdXR1cmUgPSBuZXcgRnV0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKCh2YWwpID0+IGZ1dHVyZS5yZXR1cm4odmFsKSwgKGVycikgPT4gZnV0dXJlLnRocm93KGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdXR1cmUud2FpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXRyaWV2ZSBjdXJyZW50IGxpbmUgYW5kIGZ1bmN0aW9uIG5hbWUgZnJvbSB0aGUgY2FsbCBzdGFja1xyXG4gICAgX2dldENvbW1hbmRMb2NhdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzdGFjayA9IF9fc3RhY2s7XHJcbiAgICAgICAgbGV0IGNhbGxlciA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgY2FsbCBvZiBzdGFjaykge1xyXG4gICAgICAgICAgICBpZiAoX19maWxlbmFtZSA9PT0gY2FsbC5nZXRGaWxlTmFtZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGNhbGxlciwgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50IGZpbGVcclxuICAgICAgICAgICAgY2FsbGVyID0gY2FsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2NhbGxlci5nZXRGaWxlTmFtZSgpfToke2NhbGxlci5nZXRMaW5lTnVtYmVyKCkgKyB0aGlzLmFkanVzdFNjcmlwdExpbmV9OiR7Y2FsbGVyLmdldENvbHVtbk51bWJlcigpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncywgbG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnIpIHtcclxuICAgICAgICB2YXIgc3RlcCA9IG5ldyBTdGVwUmVzdWx0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID1cclxuICAgICAgICAgICAgKG1vZHVsZS5nZXRTdGVwRGlzcGxheU5hbWUgJiYgbW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZShtZXRob2ROYW1lLCBhcmdzLCByZXR2YWwsIGVycikpIHx8XHJcbiAgICAgICAgICAgIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcblxyXG4gICAgICAgIHN0ZXAubmFtZSA9IGRpc3BsYXlOYW1lO1xyXG4gICAgICAgIHN0ZXAudHJhbnNhY3Rpb24gPSBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgfHwgbnVsbDsgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGhlcmUgaWYgaXQncyBhbHJlYWR5IHBvcHVsYXRlZCBpbiBycz9cclxuICAgICAgICBzdGVwLmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgLy8gbW9kdWxlLmV4dHJhIGlzIHJlc2V0ZWQgZm9yIGVhY2ggc3RlcCwgc28gd2UgbXVzdCBjbG9uZSBpdFxyXG4gICAgICAgIHN0ZXAuZXh0cmEgPSB7IC4uLm1vZHVsZS5leHRyYSB9O1xyXG4gICAgICAgIGlmIChtb2R1bGUuZXh0cmEgJiYgbW9kdWxlLmV4dHJhLmh0dHApIHtcclxuICAgICAgICAgICAgc3RlcC50eXBlID0gJ2h0dHAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIudHlwZSAmJiBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHN0ZXAgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuaXNGYXRhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycgJiYgbWV0aG9kTmFtZSA9PT0gJ3dhcm4nKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGVwLmFjdGlvbiA9ICh0eXBlb2YgbW9kdWxlLl9pc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IG1vZHVsZS5faXNBY3Rpb24obWV0aG9kTmFtZSkgOiBmYWxzZSk7XHJcbiAgICAgICAgc3RlcC5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcbiAgICAgICAgc3RlcC5lbmRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICBzdGVwLmR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX2dldFN0YXRzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSBtb2R1bGUuX2dldFN0YXRzKG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgaWYgKGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICAgICAgLy9pZ25vcmVkXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0cy5kaXNhYmxlU2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRha2VTY3JlZW5zaG90KG1vZHVsZSwgc3RlcCwgbWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGFrZVNuYXBzaG90KHRoaXMub3B0cywgbW9kdWxlLCBzdGVwLCBtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gXCJiYXNlbGluZVwiIG1vZGUsIHRha2Ugc25hcHNob3QgYW5kIHNjcmVlbnNob3QgZm9yIGVhY2ggXCJhY3Rpb25cIiBzdGVwXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRzLmJhc2VsaW5lKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RlcC5zY3JlZW5zaG90ICYmIHN0ZXAuYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRha2VTbmFwc2hvdCh0aGlzLm9wdHMsIG1vZHVsZSwgc3RlcCwgbWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGVwO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlU2VydmljZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzIHx8IHR5cGVvZiB0aGlzLnNlcnZpY2VzICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBzZXJ2aWNlIGRpc3Bvc2FsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIHNlcnZpY2UgJyR7a2V5fSc6YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlcyB8fCB0eXBlb2YgdGhpcy5tb2R1bGVzICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kID0gdGhpcy5tb2R1bGVzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAobW9kLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzcG9zZVJlc3VsdCA9IG1vZC5kaXNwb3NlKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VSZXN1bHQgJiYgdHlwZW9mIGRpc3Bvc2VSZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9iYWJseSBhIHByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGlzcG9zZVJlc3VsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG1vZHVsZSBkaXNwb3NhbCBlcnJvciBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRpc3Bvc2UgbW9kdWxlICcke2tleX0nOiBgLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgKiBTZXJ2aWNlcyBFdmVudCBFbWl0dGVyc1xyXG4gICAgICovXHJcbiAgICBfY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kdWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghc2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2Uub25Nb2R1bGVMb2FkZWQobW9kdWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25Nb2R1bGVMb2FkZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzZXJ2aWNlLm9uTW9kdWxlSW5pdGlhbGl6ZWQobW9kdWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25Nb2R1bGVJbml0aWFsaXplZFwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzIHx8ICF0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghc2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlLm9uTW9kdWxlV2lsbERpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlV2lsbERpc3Bvc2UobW9kdWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25Nb2R1bGVXaWxsRGlzcG9zZVwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGFyZ3MpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25ld0FyZ3M7XHJcbiAgICB9XHJcbiAgICBfcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQoYXJnKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLmdldERlY3J5cHRSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdFTkNSWVBURUQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcmcgfHwgdHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVwbGFjZSB1c2VyIHBhcmFtZXRlcnMgd2l0aCB2YWx1ZXNcclxuICAgICAgICAvLyBub3RlOiB1c2VyIHBhcmFtZXRlciB3aXRoIHRoZSBzYW1lIG5hbWUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGVudmlyb25tZW50IHZhcmlhYmxlXHJcbiAgICAgICAgZm9yIChsZXQgcGFyYW1OYW1lIGluIHRoaXMuY3R4LnBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdHgucGFyYW1zLmhhc093blByb3BlcnR5KHBhcmFtTmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSB0aGlzLmN0eC5wYXJhbXNbcGFyYW1OYW1lXTtcclxuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBwYXJhbU5hbWUgKyAnfScsICdnJyksIHBhcmFtVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgZm9yIChsZXQgZW52TmFtZSBpbiB0aGlzLmN0eC5lbnYpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LmVudi5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW52VmFsdWUgPSB0aGlzLmN0eC5lbnZbZW52TmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgZW52TmFtZSArICd9JywgJ2cnKSwgZW52VmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcmc7XHJcbiAgICB9XHJcbiAgICBfZ2V0QWxsUHJvcGVydHlOYW1lcyggb2JqICkge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gW107XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoIG9iaiApLmZvckVhY2goZnVuY3Rpb24gKCBwcm9wICkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCBwcm9wcy5pbmRleE9mKCBwcm9wICkgPT09IC0xICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goIHByb3AgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxyXG4gICAgICAgIH0gd2hpbGUgKCBvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoIG9iaiApICk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGlmICh0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3dhaXRTdGVwUmVzdWx0KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkoYXJncywgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmICghYXJncyB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBfbmV3QXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7XHJcbiAgICAgICAgICAgIF9uZXdBcmdzLnB1c2godGhpcy5fZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG5cclxuICAgIF9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50KGFyZywgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdFTkNSWVBURUQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZy5nZXREZWNyeXB0UmVzdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcmc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRha2VTY3JlZW5zaG90KG1vZHVsZSwgc3RlcCwgbWV0aG9kTmFtZSkge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc2NyZWVuc2hvdFxyXG4gICAgICAgIC8vIFRyeSB0byB3YWl0IGZvciBhIG1vbWVudCAoaW4gUGVyZmVjdG8gQ2xvdWQsIHRoZSBzY3JlZW5zaG90IG1pZ2h0IG5vdCBiZSBpbW1pZGlhdGVseSBhdmFpbGFibGUpXHJcbiAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBGSVhNRTogaW5kaWNhdGUgdG8gdXNlciB0aGF0IGFuIGF0dGVtcHQgdG8gdGFrZSBhIHNjcmVlbnNob3QgaGFzIGZhaWxlZFxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRha2VTbmFwc2hvdChvcHRpb25zLCBtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU25hcHNob3RTaWxlbnQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgc25hcHNob3Q7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHNuYXBzaG90ID0gbW9kdWxlLl90YWtlU25hcHNob3RTaWxlbnQobWV0aG9kTmFtZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIHVuYWJsZSB0byBnZXQgYSBzbmFwc2hvdCwgd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluXHJcbiAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzbmFwc2hvdCA9IG1vZHVsZS5fdGFrZVNuYXBzaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzbmFwc2hvdCkge1xyXG4gICAgICAgIGlmICghc3RlcC5hdHRhY2htZW50cykge1xyXG4gICAgICAgICAgICBzdGVwLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRldGVybWluZSBzbmFwc2hvdCBmaWxlIGV4dGVuc2lvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBtb2R1bGUgbmFtZVxyXG4gICAgICAgIGNvbnN0IHNuYXBzaG90VHlwZSA9IG1vZHVsZS5uYW1lICYmIG1vZHVsZS5uYW1lID09PSAnbW9iJyA/ICd4bWwnIDogJ2h0bWwnO1xyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBjb3JlVXRpbHMubmV3U25hcHNob3RBdHRhY2htZW50KG9wdGlvbnMsIHNuYXBzaG90LCBzbmFwc2hvdFR5cGUpO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgIHN0ZXAuYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xy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
|
|
@@ -32,7 +32,7 @@ module.exports = function (filePath, mode, fileType) {
|
|
|
32
32
|
self.currentRow = self.mode === 'random' ? random(0, self.table.length) : 0;
|
|
33
33
|
return null;
|
|
34
34
|
}).catch(function (err) {
|
|
35
|
-
throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file: ${err.message}`);
|
|
35
|
+
throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file "${path.basename(filePath)}": ${err.message}`);
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
module.getMode = function () {
|
|
@@ -68,4 +68,4 @@ module.exports = function (filePath, mode, fileType) {
|
|
|
68
68
|
}
|
|
69
69
|
return module;
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsInBhdGgiLCJFeGNlbFJlYWRlciIsIkNzdlJlYWRlciIsIkpzb25SZWFkZXIiLCJlcnJIZWxwZXIiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJQcm9taXNlIiwicmVqZWN0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlBBUkFNRVRFUlNfRVJST1IiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsImNhdGNoIiwiZXJyIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZ2V0TW9kZSIsInJlYWROZXh0IiwicHJldlJvdyIsInJlYWRQcmV2IiwiZ2V0VmFsdWVzIiwiX19kZWZpbmVHZXR0ZXJfXyIsIm1pbiIsIm1heCIsIk1hdGgiLCJmbG9vciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYW0tbWFuYWdlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZmlsZVBhdGgsIG1vZGUsIGZpbGVUeXBlIC8qb3B0aW9uYWwqLykge1xyXG4gICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbiAgICB2YXIgRXhjZWxSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1leGNlbCcpO1xyXG4gICAgdmFyIENzdlJlYWRlciA9IHJlcXVpcmUoJy4vcGFyYW0tcmVhZGVyLWNzdicpO1xyXG4gICAgdmFyIEpzb25SZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1qc29uJyk7XHJcbiAgICB2YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgdmFyIG1vZHVsZSA9IHt9O1xyXG5cclxuICAgIG1vZHVsZS5pbml0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlVHlwZSkge1xyXG4gICAgICAgICAgICBleHQgPSBmaWxlVHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWRlciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNob29zZSB0aGUgcmlnaHQgY29udmVydGVyIGJhc2VkIG9uIGVpdGhlciB4bHMgb3IgeGxzeCBmaWxlIGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChleHQgPT09ICcueGxzeCcgfHwgZXh0ID09PSAnLnhscycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5jc3YnIHx8IGV4dCA9PT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBDc3ZSZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXh0ID09PSAnLmpzb24nIHx8IGV4dCA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEpzb25SZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlBBUkFNRVRFUlNfRVJST1IsICdVbnN1cHBvcnRlZCBwYXJhbWV0ZXJzIGZpbGUgdHlwZTogJyArIGV4dCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlID0gbW9kZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkKGZpbGVQYXRoLCBmaWxlVHlwZSB8fCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudGFibGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIGN1cnJlbnRSb3cgYWNjb3JkaW5nIHdpdGggcGFyYW1ldGVyIHJlYWRpbmcgbW9kZSAocmFuZG9tIG9yIHNlcXVlbnRpYWwpXHJcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRSb3cgPSBzZWxmLm1vZGUgPT09ICdyYW5kb20nID8gcmFuZG9tKDAsIHNlbGYudGFibGUubGVuZ3RoKSA6IDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCBgVW5hYmxlIHRvIGxvYWQgcGFyYW1ldGVycyBmaWxlIFwiJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1cIjogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWROZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJldlJvdyA9IHRoaXMuY3VycmVudFJvdztcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmFuZG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSByYW5kb20oMCwgdGhpcy50YWJsZS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvdyA+IHRoaXMudGFibGUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWRQcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2Um93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSB0aGlzLnByZXZSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlIHx8IHRoaXMudGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1BhcmFtZXRlcnMgdGFibGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVbdGhpcy5jdXJyZW50Um93XTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLl9fZGVmaW5lR2V0dGVyX18oJ3Jvd3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQzVDRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFlO0VBQzlELElBQUlDLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUMxQixJQUFJVSxXQUFXLEdBQUdWLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztFQUNqRCxJQUFJVyxTQUFTLEdBQUdYLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QyxJQUFJWSxVQUFVLEdBQUdaLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUMvQyxJQUFJYSxTQUFTLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWZBLE1BQU0sQ0FBQ1UsSUFBSSxHQUFHLFlBQVc7SUFDckIsSUFBSUMsR0FBRyxHQUFHTixJQUFJLENBQUNPLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDO0lBRWhDLElBQUlFLFFBQVEsRUFBRTtNQUNWTyxHQUFHLEdBQUdQLFFBQVE7SUFDbEI7SUFDQSxJQUFJUyxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUVmLElBQUlILEdBQUcsS0FBSyxPQUFPLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUU7TUFDbkNFLE1BQU0sR0FBRyxJQUFJUCxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDLE1BQ0ksSUFBSUssR0FBRyxLQUFLLE1BQU0sSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUN2Q0UsTUFBTSxHQUFHLElBQUlOLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsTUFDSSxJQUFJSSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssS0FBSyxFQUFFO01BQ3ZDRSxNQUFNLEdBQUcsSUFBSUwsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUNJO01BQ0QsT0FBT08sT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSUMsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxHQUFHUixHQUFHLENBQUMsQ0FBQztJQUN4SDtJQUVBLElBQUksQ0FBQ1IsSUFBSSxHQUFHQSxJQUFJO0lBRWhCLE9BQU9VLE1BQU0sQ0FBQ08sSUFBSSxDQUFDbEIsUUFBUSxFQUFFRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQ3pDaUIsSUFBSSxDQUFDLFVBQVNDLE1BQU0sRUFBRTtNQUNuQlIsSUFBSSxDQUFDUyxLQUFLLEdBQUdELE1BQU07TUFFbkJSLElBQUksQ0FBQ1UsVUFBVSxHQUFHVixJQUFJLENBQUNYLElBQUksS0FBSyxRQUFRLEdBQUdzQixNQUFNLENBQUMsQ0FBQyxFQUFFWCxJQUFJLENBQUNTLEtBQUssQ0FBQ0csTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUMzRSxPQUFPLElBQUk7SUFDZixDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVNDLEdBQUcsRUFBRTtNQUNqQixNQUFNLElBQUlYLG9CQUFPLENBQUNSLFNBQVMsQ0FBQ1MsU0FBUyxDQUFDQyxnQkFBZ0IsRUFBRSxtQ0FBbUNkLElBQUksQ0FBQ3dCLFFBQVEsQ0FBQzNCLFFBQVEsQ0FBQyxNQUFNMEIsR0FBRyxDQUFDRSxPQUFPLEVBQUUsQ0FBQztJQUMxSSxDQUFDLENBQUM7RUFDVixDQUFDO0VBRUQ5QixNQUFNLENBQUMrQixPQUFPLEdBQUcsWUFBVztJQUN4QixPQUFPLElBQUksQ0FBQzVCLElBQUk7RUFDcEIsQ0FBQztFQUVESCxNQUFNLENBQUNnQyxRQUFRLEdBQUcsWUFBWTtJQUMxQixJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLENBQUNULFVBQVU7SUFDOUIsSUFBSSxJQUFJLENBQUNyQixJQUFJLEtBQUssUUFBUSxFQUFFO01BQ3hCLElBQUksQ0FBQ3FCLFVBQVUsR0FBR0MsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNGLEtBQUssQ0FBQ0csTUFBTSxDQUFDO0lBQ2xELENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ0YsVUFBVSxFQUFFO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUNBLFVBQVUsR0FBRyxJQUFJLENBQUNELEtBQUssQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN6QyxJQUFJLENBQUNGLFVBQVUsR0FBRyxDQUFDO0lBQ3ZCO0VBQ0osQ0FBQztFQUVEeEIsTUFBTSxDQUFDa0MsUUFBUSxHQUFHLFlBQVk7SUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQ0QsT0FBTyxLQUFLLFdBQVcsRUFBRTtNQUNyQyxJQUFJLENBQUNULFVBQVUsR0FBRyxJQUFJLENBQUNTLE9BQU87SUFDbEM7RUFDSixDQUFDO0VBRURqQyxNQUFNLENBQUNtQyxTQUFTLEdBQUcsWUFBVztJQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDWixLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUNHLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDeEMsTUFBTSxJQUFJVCxvQkFBTyxDQUFDUixTQUFTLENBQUNTLFNBQVMsQ0FBQ0MsZ0JBQWdCLEVBQUUsMkJBQTJCLENBQUM7SUFDeEY7SUFDQSxPQUFPLElBQUksQ0FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQ0MsVUFBVSxDQUFDO0VBQ3RDLENBQUM7RUFFRHhCLE1BQU0sQ0FBQ29DLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxZQUFXO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDYixLQUFLLENBQUNHLE1BQU07RUFDNUIsQ0FBQyxDQUFDO0VBRUYsU0FBU0QsTUFBTUEsQ0FBQ1ksR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDdEIsT0FBT0MsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ2QsTUFBTSxDQUFDLENBQUMsSUFBSWEsR0FBRyxHQUFHRCxHQUFHLENBQUMsQ0FBQyxHQUFHQSxHQUFHO0VBQ3hEO0VBRUEsT0FBT3JDLE1BQU07QUFDakIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|