appium-adb 9.2.1 → 9.2.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.
@@ -216,4 +216,4 @@ var _default = apksUtilsMethods;
216
216
  exports.default = _default;require('source-map-support').install();
217
217
 
218
218
 
219
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGtzLXV0aWxzLmpzIl0sIm5hbWVzIjpbIkJBU0VfQVBLIiwiTEFOR1VBR0VfQVBLIiwibGFuZyIsIkFQS1NfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiYXBrc0hhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFQS1NfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJCVU5ETEVUT09MX1RJTUVPVVRfTVMiLCJhcGtzVXRpbHNNZXRob2RzIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsInBhdGhzIiwidmFsdWVzIiwibG9nIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJleHRyYWN0RnJvbUFwa3MiLCJhcGtzIiwiZHN0UGF0aCIsIl8iLCJpc0FycmF5IiwiYWNxdWlyZSIsImhhc2giLCJoYXMiLCJyZXN1bHRQYXRoIiwicGF0aCIsInJlc29sdmUiLCJnZXQiLCJleGlzdHMiLCJkZWwiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJFcnJvciIsImpvaW4iLCJzZXAiLCJzZXQiLCJleGVjQnVuZGxldG9vbCIsImFyZ3MiLCJlcnJvck1zZyIsImluaXRCdW5kbGV0b29sIiwiYmluYXJpZXMiLCJidW5kbGV0b29sIiwiZW52IiwiYWRiUG9ydCIsIkFORFJPSURfQURCX1NFUlZFUl9QT1JUIiwiYWRiSG9zdCIsIkFORFJPSURfQURCX1NFUlZFUl9IT1NUIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0ZG91dCIsInRpbWVvdXQiLCJ0cnVuY2F0ZSIsInN0ZGVyciIsImdldERldmljZVNwZWMiLCJzcGVjTG9jYXRpb24iLCJleGVjdXRhYmxlIiwiY3VyRGV2aWNlSWQiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwiYXBrUGF0aHNUb0luc3RhbGwiLCJvcHRpb25zIiwiaW5zdGFsbEFyZ3MiLCJnZXRBcGlMZXZlbCIsImFkYkV4ZWMiLCJ0aW1lb3V0Q2FwTmFtZSIsImluc3RhbGxBcGtzIiwiZ3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJwdXNoIiwidGFza3MiLCJiYXNlbmFtZSIsImdldEFwa0luZm8iLCJhcGtJbmZvIiwiQiIsImFsbCIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJuYW1lIiwiZXh0cmFjdEJhc2VBcGsiLCJleHRyYWN0TGFuZ3VhZ2VBcGsiLCJsYW5ndWFnZSIsImluZm8iLCJkZWZhdWx0TGFuZ3VhZ2VzIiwiaWduIiwiaXNUZXN0UGFja2FnZU9ubHlFcnJvciIsIm91dHB1dCIsInRlc3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLGlCQUFqQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUlDLElBQUQsSUFBVyxRQUFPQSxJQUFLLE1BQTVDOztBQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0FBQ3pCQyxFQUFBQSxHQUFHLEVBQUUsRUFEb0I7QUFFekJDLEVBQUFBLE9BQU8sRUFBRSxDQUFDQyxRQUFELEVBQVdDLGtCQUFYLEtBQWtDQyxZQUFHQyxNQUFILENBQVVGLGtCQUFWO0FBRmxCLENBQVIsQ0FBbkI7QUFJQSxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxrQkFBSixFQUF6QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLElBQUksRUFBSixHQUFTLElBQXZDO0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsRUFBekI7QUFFQUMsT0FBTyxDQUFDQyxFQUFSLENBQVcsTUFBWCxFQUFtQixNQUFNO0FBQ3ZCLE1BQUksQ0FBQ2IsVUFBVSxDQUFDYyxJQUFoQixFQUFzQjtBQUNwQjtBQUNEOztBQUVELFFBQU1DLEtBQUssR0FBRyxDQUFDLEdBQUdmLFVBQVUsQ0FBQ2dCLE1BQVgsRUFBSixDQUFk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T0FBSyxNQUFNOUYsSUFBWCxJQUFtQjhGLGdCQUFuQixFQUFxQztBQUNuQyxRQUFJO0FBQ0YsYUFBTyxNQUFNbEUsZUFBZSxDQUFDQyxJQUFELEVBQU8sQ0FBQyxRQUFELEVBQVc5QixZQUFZLENBQUNDLElBQUQsQ0FBdkIsQ0FBUCxDQUE1QjtBQUNELEtBRkQsQ0FFRSxPQUFPK0YsR0FBUCxFQUFZLENBQUU7QUFDakI7O0FBRUQ3RSxrQkFBSTJFLElBQUosQ0FBVSx1REFBc0RqQyxJQUFJLENBQUNDLFNBQUwsQ0FBZWlDLGdCQUFmLENBQWlDLElBQXhGLEdBQ04saUNBREg7O0FBRUEsU0FBTyxNQUFNLEtBQUtKLGNBQUwsQ0FBb0I3RCxJQUFwQixDQUFiO0FBQ0QsQ0F0QkQ7O0FBd0JBakIsZ0JBQWdCLENBQUNvRixzQkFBakIsR0FBMEMsU0FBU0Esc0JBQVQsQ0FBaUNDLE1BQWpDLEVBQXlDO0FBQ2pGLFNBQU8sK0JBQStCQyxJQUEvQixDQUFvQ0QsTUFBcEMsQ0FBUDtBQUNELENBRkQ7O2VBSWVyRixnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgZ2V0SmF2YUZvck9zLCB1bnppcEZpbGUsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS1NfSU5TVEFMTF9USU1FT1VUXG59IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQkFTRV9BUEsgPSAnYmFzZS1tYXN0ZXIuYXBrJztcbmNvbnN0IExBTkdVQUdFX0FQSyA9IChsYW5nKSA9PiBgYmFzZS0ke2xhbmd9LmFwa2A7XG5jb25zdCBBUEtTX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogMTAsXG4gIGRpc3Bvc2U6IChhcGtzSGFzaCwgZXh0cmFjdGVkRmlsZXNSb290KSA9PiBmcy5yaW1yYWYoZXh0cmFjdGVkRmlsZXNSb290KSxcbn0pO1xuY29uc3QgQVBLU19DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IEJVTkRMRVRPT0xfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGFwa3NVdGlsc01ldGhvZHMgPSB7fTtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKCFBUEtTX0NBQ0hFLnNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IFsuLi5BUEtTX0NBQ0hFLnZhbHVlcygpXTtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHtwYXRocy5sZW5ndGh9IGNhY2hlZCAuYXBrcyBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgncGFja2FnZScsIHBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgcGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFydGljdWxhciBhcGtzIHBhY2thZ2UgaW50byBhIHRlbXBvcmFyeSBmb2xkZXIsXG4gKiBmaW5kcyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5lZCBpbiB0aGlzIGFway5cbiAqIFRoZSByZXN1bHRpbmcgdGVtcG9yYXJ5IHBhdGgsIHdoZXJlIHRoZSAuYXBrcyBmaWxlIGhhcyBiZWVuIGV4dHJhY3RlZCxcbiAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGludGVybmFsIExSVSBjYWNoZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8U3RyaW5nPn0gZHN0UGF0aCAtIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlLFxuICogd2hpY2ggaXMgZ29pbmcgdG8gYmUgZXh0cmFjdGVkLCB3aGVyZSBlYWNoIHBhdGggY29tcG9uZW50IGlzIGFuIGFycmF5IGl0ZW1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZXh0cmFjdGVkIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcmVxdWVzdGVkIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGV4dHJhY3RlZCBhcmNoaXZlIG9yIHRoZSBwcm92aWRlc1xuICogYXBrcyBmaWxlIGlzIG5vdCBhIHZhbGlkIGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0RnJvbUFwa3MgKGFwa3MsIGRzdFBhdGgpIHtcbiAgaWYgKCFfLmlzQXJyYXkoZHN0UGF0aCkpIHtcbiAgICBkc3RQYXRoID0gW2RzdFBhdGhdO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IEFQS1NfQ0FDSEVfR1VBUkQuYWNxdWlyZShhcGtzLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gSXQgbWlnaHQgYmUgdGhhdCB0aGUgb3JpZ2luYWwgZmlsZSBoYXMgYmVlbiByZXBsYWNlZCxcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhlIGhhc2ggc3VtcyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZmlsZSBwYXRoc1xuICAgIC8vIGFzIGNhY2hpbmcga2V5c1xuICAgIGNvbnN0IGFwa3NIYXNoID0gYXdhaXQgZnMuaGFzaChhcGtzKTtcbiAgICBsb2cuZGVidWcoYENhbGN1bGF0ZWQgJyR7YXBrc30nIGhhc2g6ICR7YXBrc0hhc2h9YCk7XG5cbiAgICBpZiAoQVBLU19DQUNIRS5oYXMoYXBrc0hhc2gpKSB7XG4gICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKEFQS1NfQ0FDSEUuZ2V0KGFwa3NIYXNoKSwgLi4uZHN0UGF0aCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgICAgfVxuICAgICAgQVBLU19DQUNIRS5kZWwoYXBrc0hhc2gpO1xuICAgIH1cblxuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBsb2cuZGVidWcoYFVucGFja2luZyBhcHBsaWNhdGlvbiBidW5kbGUgYXQgJyR7YXBrc30nIHRvICcke3RtcFJvb3R9J2ApO1xuICAgIGF3YWl0IHVuemlwRmlsZShhcGtzLCB0bXBSb290KTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIC4uLmRzdFBhdGgpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZHN0UGF0aC5qb2luKHBhdGguc2VwKX0gY2Fubm90IGJlIGZvdW5kIGluICcke2Fwa3N9JyBidW5kbGUuIGAgK1xuICAgICAgICBgRG9lcyB0aGUgYXJjaGl2ZSBjb250YWluIGEgdmFsaWQgYXBwbGljYXRpb24gYnVuZGxlP2ApO1xuICAgIH1cbiAgICBBUEtTX0NBQ0hFLnNldChhcGtzSGFzaCwgdG1wUm9vdCk7XG4gICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGJ1bmRsZXRvb2wgdXRpbGl0eSB3aXRoIGdpdmVuIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIHN0ZG91dFxuICpcbiAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gYXJncyAtIHRoZSBsaXN0IG9mIGJ1bmRsZXRvb2wgYXJndW1lbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNc2cgLSBUaGUgY3VzdG9taXplZCBlcnJvciBtZXNzYWdlIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGFjdHVhbCBjb21tYW5kIHN0ZG91dFxuICogQHRocm93cyB7RXJyb3J9IElmIGJ1bmRsZXRvb2wgamFyIGRvZXMgbm90IGV4aXN0IGluIFBBVEggb3IgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlXG4gKiBleGVjdXRpbmcgaXRcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leGVjQnVuZGxldG9vbCA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWNCdW5kbGV0b29sIChhcmdzLCBlcnJvck1zZykge1xuICBhd2FpdCB0aGlzLmluaXRCdW5kbGV0b29sKCk7XG4gIGFyZ3MgPSBbXG4gICAgJy1qYXInLCB0aGlzLmJpbmFyaWVzLmJ1bmRsZXRvb2wsXG4gICAgLi4uYXJnc1xuICBdO1xuICBjb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcbiAgaWYgKHRoaXMuYWRiUG9ydCkge1xuICAgIGVudi5BTkRST0lEX0FEQl9TRVJWRVJfUE9SVCA9IGAke3RoaXMuYWRiUG9ydH1gO1xuICB9XG4gIGlmICh0aGlzLmFkYkhvc3QpIHtcbiAgICBlbnYuQU5EUk9JRF9BREJfU0VSVkVSX0hPU1QgPSB0aGlzLmFkYkhvc3Q7XG4gIH1cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgYnVuZGxldG9vbCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKGF3YWl0IGdldEphdmFGb3JPcygpLCBhcmdzLCB7XG4gICAgICBlbnYsXG4gICAgICB0aW1lb3V0OiBCVU5ETEVUT09MX1RJTUVPVVRfTVMsXG4gICAgfSkpO1xuICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRvdXQ6ICR7Xy50cnVuY2F0ZShzdGRvdXQsIHtsZW5ndGg6IDMwMH0pfWApO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5zdGRvdXQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRvdXQ6ICR7ZS5zdGRvdXR9YCk7XG4gICAgfVxuICAgIGlmIChlLnN0ZGVycikge1xuICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZGVycjogJHtlLnN0ZGVycn1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTXNnfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcGVjTG9jYXRpb24gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBnZW5lcmF0ZWQgZGV2aWNlIHNwZWMgbG9jYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzYW1lIGBzcGVjTG9jYXRpb25gIHZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSBzcGVjIGZvciB0aGUgY3VycmVudCBkZXZpY2VcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5nZXREZXZpY2VTcGVjID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlU3BlYyAoc3BlY0xvY2F0aW9uKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2dldC1kZXZpY2Utc3BlYycsXG4gICAgJy0tYWRiJywgdGhpcy5leGVjdXRhYmxlLnBhdGgsXG4gICAgJy0tZGV2aWNlLWlkJywgdGhpcy5jdXJEZXZpY2VJZCxcbiAgICAnLS1vdXRwdXQnLCBzcGVjTG9jYXRpb24sXG4gIF07XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyB0aGUgc3BlYyBmb3IgdGhlIGRldmljZSAnJHt0aGlzLmN1ckRldmljZUlkfSdgKTtcbiAgYXdhaXQgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCAnQ2Fubm90IHJldHJpZXZlIHRoZSBkZXZpY2Ugc3BlYycpO1xuICByZXR1cm4gc3BlY0xvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gdGltZW91dCBbMjAwMDBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbFxuICogdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lb3V0Q2FwTmFtZSBbYW5kcm9pZEluc3RhbGxUaW1lb3V0XSAtIFRoZSB0aW1lb3V0IG9wdGlvbiBuYW1lXG4gKiB1c2VycyBjYW4gaW5jcmVhc2UgdGhlIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvblxuICogaXMgY29tcGxldGVkIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcGtzIGludG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcGtQYXRoc1RvSW5zdGFsbCAtIFRoZSBmdWxsIHBhdGhzIHRvIGluc3RhbGwgYXBrc1xuICogQHBhcmFtIHs/aW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxNdWx0aXBsZUFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsTXVsdGlwbGVBcGtzIChhcGtQYXRoc1RvSW5zdGFsbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluc3RhbGxBcmdzID0gYnVpbGRJbnN0YWxsQXJncyhhd2FpdCB0aGlzLmdldEFwaUxldmVsKCksIG9wdGlvbnMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGJFeGVjKFsnaW5zdGFsbC1tdWx0aXBsZScsIC4uLmluc3RhbGxBcmdzLCAuLi5hcGtQYXRoc1RvSW5zdGFsbF0sIHtcbiAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgdGltZW91dENhcE5hbWU6IG9wdGlvbnMudGltZW91dENhcE5hbWUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzEyMDAwMF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsXG4gKiB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvblxuICogaXMgY29tcGxldGVkIHVuZGVyIEFuZHJvaWQgNisuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gLmFwa3MgcGFja2FnZSBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHs/SW5zdGFsbEFwa3NPcHRpb25zfSBvcHRpb25zIC0gSW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgLmFwa3MgYnVuZGxlIGNhbm5vdCBiZSBpbnN0YWxsZWRcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5pbnN0YWxsQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGtzIChhcGtzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGdyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgdGltZW91dCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgYXJncyA9IFtcbiAgICAnaW5zdGFsbC1hcGtzJyxcbiAgICAnLS1hZGInLCB0aGlzLmV4ZWN1dGFibGUucGF0aCxcbiAgICAnLS1hcGtzJywgYXBrcyxcbiAgICAnLS10aW1lb3V0LW1pbGxpcycsIHRpbWVvdXQgfHwgQVBLU19JTlNUQUxMX1RJTUVPVVQsXG4gICAgJy0tZGV2aWNlLWlkJywgdGhpcy5jdXJEZXZpY2VJZCxcbiAgXTtcbiAgaWYgKGFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgYXJncy5wdXNoKCctLWFsbG93LXRlc3Qtb25seScpO1xuICB9XG4gIGNvbnN0IHRhc2tzID0gW1xuICAgIHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgYENhbm5vdCBpbnN0YWxsICcke3BhdGguYmFzZW5hbWUoYXBrcyl9JyB0byB0aGUgZGV2aWNlICR7dGhpcy5jdXJEZXZpY2VJZH1gKVxuICBdO1xuICBpZiAoZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIHRhc2tzLnB1c2godGhpcy5nZXRBcGtJbmZvKGFwa3MpKTtcbiAgfVxuICBjb25zdCBbLCBhcGtJbmZvXSA9IGF3YWl0IEIuYWxsKHRhc2tzKTtcbiAgaWYgKGdyYW50UGVybWlzc2lvbnMgJiYgYXBrSW5mbykge1xuICAgIC8vIFRPRE86IFNpbXBsaWZ5IGl0IGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvYnVuZGxldG9vbC9pc3N1ZXMvMjQ2IGlzIGltcGxlbWVudGVkXG4gICAgYXdhaXQgdGhpcy5ncmFudEFsbFBlcm1pc3Npb25zKGFwa0luZm8ubmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbWFzdGVyIC5hcGsgZmlsZSBpbnNpZGUgdGhlIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciBidW5kbGUgLmFwa1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBleHRyYWN0aW5nL2ZpbmRpbmcgdGhlIGZpbGVcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leHRyYWN0QmFzZUFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCYXNlQXBrIChhcGtzKSB7XG4gIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBCQVNFX0FQS10pO1xufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrLCB3aGljaCBjb250YWlucyB0aGUgY29ycmVzcG9uZGluZ1xuICogcmVzb3VyY2VzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaW4gdGhlIC5hcGtzIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBUaGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLiBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpc1xuICogZ29pbmcgdG8gYmUgc2VsZWN0ZWQgaWYgaXQgaXMgbm90IHNldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2UgLmFwayBvciB0aGUgbWFzdGVyIC5hcGtcbiAqIGlmIGxhbmd1YWdlIHNwbGl0IGlzIG5vdCBlbmFibGVkIGZvciB0aGUgYnVuZGxlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBleHRyYWN0aW5nL2ZpbmRpbmcgdGhlIGZpbGVcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leHRyYWN0TGFuZ3VhZ2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0TGFuZ3VhZ2VBcGsgKGFwa3MsIGxhbmd1YWdlID0gbnVsbCkge1xuICBpZiAobGFuZ3VhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5ndWFnZSldKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZS5tZXNzYWdlKTtcbiAgICAgIGxvZy5pbmZvKGBBc3N1bWluZyB0aGF0IHNwbGl0dGluZyBieSBsYW5ndWFnZSBpcyBub3QgZW5hYmxlZCBmb3IgdGhlICcke2Fwa3N9JyBidW5kbGUgYCArXG4gICAgICAgIGBhbmQgcmV0dXJuaW5nIHRoZSBtYWluIGFwayBpbnN0ZWFkYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcGtzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2VzID0gWydlbicsICdlbl91cyddO1xuICBmb3IgKGNvbnN0IGxhbmcgb2YgZGVmYXVsdExhbmd1YWdlcykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgTEFOR1VBR0VfQVBLKGxhbmcpXSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgbG9nLmluZm8oYENhbm5vdCBmaW5kIGFueSBzcGxpdCBhcGsgZm9yIHRoZSBkZWZhdWx0IGxhbmd1YWdlcyAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRMYW5ndWFnZXMpfS4gYCArXG4gICAgYFJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZC5gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG59O1xuXG5hcGtzVXRpbHNNZXRob2RzLmlzVGVzdFBhY2thZ2VPbmx5RXJyb3IgPSBmdW5jdGlvbiBpc1Rlc3RQYWNrYWdlT25seUVycm9yIChvdXRwdXQpIHtcbiAgcmV0dXJuIC9cXFtJTlNUQUxMX0ZBSUxFRF9URVNUX09OTFlcXF0vLnRlc3Qob3V0cHV0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFwa3NVdGlsc01ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hcGtzLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
219
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJuYW1lcyI6WyJCQVNFX0FQSyIsIkxBTkdVQUdFX0FQSyIsImxhbmciLCJBUEtTX0NBQ0hFIiwiTFJVIiwibWF4IiwiZGlzcG9zZSIsImFwa3NIYXNoIiwiZXh0cmFjdGVkRmlsZXNSb290IiwiZnMiLCJyaW1yYWYiLCJBUEtTX0NBQ0hFX0dVQVJEIiwiQXN5bmNMb2NrIiwiQlVORExFVE9PTF9USU1FT1VUX01TIiwiYXBrc1V0aWxzTWV0aG9kcyIsInByb2Nlc3MiLCJvbiIsInNpemUiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiZXhlY0J1bmRsZXRvb2wiLCJhcmdzIiwiZXJyb3JNc2ciLCJpbml0QnVuZGxldG9vbCIsImJpbmFyaWVzIiwiYnVuZGxldG9vbCIsImVudiIsImFkYlBvcnQiLCJBTkRST0lEX0FEQl9TRVJWRVJfUE9SVCIsImFkYkhvc3QiLCJBTkRST0lEX0FEQl9TRVJWRVJfSE9TVCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGRvdXQiLCJ0aW1lb3V0IiwidHJ1bmNhdGUiLCJzdGRlcnIiLCJnZXREZXZpY2VTcGVjIiwic3BlY0xvY2F0aW9uIiwiZXhlY3V0YWJsZSIsImN1ckRldmljZUlkIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsImFwa1BhdGhzVG9JbnN0YWxsIiwib3B0aW9ucyIsImluc3RhbGxBcmdzIiwiZ2V0QXBpTGV2ZWwiLCJhZGJFeGVjIiwidGltZW91dENhcE5hbWUiLCJpbnN0YWxsQXBrcyIsImdyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwicHVzaCIsInRhc2tzIiwiYmFzZW5hbWUiLCJnZXRBcGtJbmZvIiwiYXBrSW5mbyIsIkIiLCJhbGwiLCJncmFudEFsbFBlcm1pc3Npb25zIiwibmFtZSIsImV4dHJhY3RCYXNlQXBrIiwiZXh0cmFjdExhbmd1YWdlQXBrIiwibGFuZ3VhZ2UiLCJpbmZvIiwiZGVmYXVsdExhbmd1YWdlcyIsImlnbiIsImlzVGVzdFBhY2thZ2VPbmx5RXJyb3IiLCJvdXRwdXQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQge1xuICBnZXRKYXZhRm9yT3MsIHVuemlwRmlsZSwgYnVpbGRJbnN0YWxsQXJncywgQVBLU19JTlNUQUxMX1RJTUVPVVRcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBCQVNFX0FQSyA9ICdiYXNlLW1hc3Rlci5hcGsnO1xuY29uc3QgTEFOR1VBR0VfQVBLID0gKGxhbmcpID0+IGBiYXNlLSR7bGFuZ30uYXBrYDtcbmNvbnN0IEFQS1NfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMCxcbiAgZGlzcG9zZTogKGFwa3NIYXNoLCBleHRyYWN0ZWRGaWxlc1Jvb3QpID0+IGZzLnJpbXJhZihleHRyYWN0ZWRGaWxlc1Jvb3QpLFxufSk7XG5jb25zdCBBUEtTX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgQlVORExFVE9PTF9USU1FT1VUX01TID0gNCAqIDYwICogMTAwMDtcblxuY29uc3QgYXBrc1V0aWxzTWV0aG9kcyA9IHt9O1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoIUFQS1NfQ0FDSEUuc2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gWy4uLkFQS1NfQ0FDSEUudmFsdWVzKCldO1xuICBsb2cuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke3BhdGhzLmxlbmd0aH0gY2FjaGVkIC5hcGtzIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdwYWNrYWdlJywgcGF0aHMubGVuZ3RoKSk7XG4gIGZvciAoY29uc3QgYXBwUGF0aCBvZiBwYXRocykge1xuICAgIHRyeSB7XG4gICAgICAvLyBBc3luY2hyb25vdXMgY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gb25FeGl0IGhhbmRsZXJcbiAgICAgIGZzLnJpbXJhZlN5bmMoYXBwUGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBwYXJ0aWN1bGFyIGFwa3MgcGFja2FnZSBpbnRvIGEgdGVtcG9yYXJ5IGZvbGRlcixcbiAqIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmVkIGluIHRoaXMgYXBrLlxuICogVGhlIHJlc3VsdGluZyB0ZW1wb3JhcnkgcGF0aCwgd2hlcmUgdGhlIC5hcGtzIGZpbGUgaGFzIGJlZW4gZXh0cmFjdGVkLFxuICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgaW50ZXJuYWwgTFJVIGNhY2hlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxTdHJpbmc+fSBkc3RQYXRoIC0gVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBleHRyYWN0ZWQsIHdoZXJlIGVhY2ggcGF0aCBjb21wb25lbnQgaXMgYW4gYXJyYXkgaXRlbVxuICogQHJldHVybnMge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBleHRyYWN0ZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSByZXF1ZXN0ZWQgaXRlbSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZXh0cmFjdGVkIGFyY2hpdmUgb3IgdGhlIHByb3ZpZGVzXG4gKiBhcGtzIGZpbGUgaXMgbm90IGEgdmFsaWQgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RGcm9tQXBrcyAoYXBrcywgZHN0UGF0aCkge1xuICBpZiAoIV8uaXNBcnJheShkc3RQYXRoKSkge1xuICAgIGRzdFBhdGggPSBbZHN0UGF0aF07XG4gIH1cblxuICByZXR1cm4gYXdhaXQgQVBLU19DQUNIRV9HVUFSRC5hY3F1aXJlKGFwa3MsIGFzeW5jICgpID0+IHtcbiAgICAvLyBJdCBtaWdodCBiZSB0aGF0IHRoZSBvcmlnaW5hbCBmaWxlIGhhcyBiZWVuIHJlcGxhY2VkLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgaGFzaCBzdW1zIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBmaWxlIHBhdGhzXG4gICAgLy8gYXMgY2FjaGluZyBrZXlzXG4gICAgY29uc3QgYXBrc0hhc2ggPSBhd2FpdCBmcy5oYXNoKGFwa3MpO1xuICAgIGxvZy5kZWJ1ZyhgQ2FsY3VsYXRlZCAnJHthcGtzfScgaGFzaDogJHthcGtzSGFzaH1gKTtcblxuICAgIGlmIChBUEtTX0NBQ0hFLmhhcyhhcGtzSGFzaCkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoQVBLU19DQUNIRS5nZXQoYXBrc0hhc2gpLCAuLi5kc3RQYXRoKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgICB9XG4gICAgICBBUEtTX0NBQ0hFLmRlbChhcGtzSGFzaCk7XG4gICAgfVxuXG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIGxvZy5kZWJ1ZyhgVW5wYWNraW5nIGFwcGxpY2F0aW9uIGJ1bmRsZSBhdCAnJHthcGtzfScgdG8gJyR7dG1wUm9vdH0nYCk7XG4gICAgYXdhaXQgdW56aXBGaWxlKGFwa3MsIHRtcFJvb3QpO1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgLi4uZHN0UGF0aCk7XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtkc3RQYXRoLmpvaW4ocGF0aC5zZXApfSBjYW5ub3QgYmUgZm91bmQgaW4gJyR7YXBrc30nIGJ1bmRsZS4gYCArXG4gICAgICAgIGBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gYSB2YWxpZCBhcHBsaWNhdGlvbiBidW5kbGU/YCk7XG4gICAgfVxuICAgIEFQS1NfQ0FDSEUuc2V0KGFwa3NIYXNoLCB0bXBSb290KTtcbiAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYnVuZGxldG9vbCB1dGlsaXR5IHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgc3Rkb3V0XG4gKlxuICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBhcmdzIC0gdGhlIGxpc3Qgb2YgYnVuZGxldG9vbCBhcmd1bWVudHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1zZyAtIFRoZSBjdXN0b21pemVkIGVycm9yIG1lc3NhZ2Ugc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgYWN0dWFsIGNvbW1hbmQgc3Rkb3V0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnVuZGxldG9vbCBqYXIgZG9lcyBub3QgZXhpc3QgaW4gUEFUSCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGV4ZWN1dGluZyBpdFxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4ZWNCdW5kbGV0b29sID0gYXN5bmMgZnVuY3Rpb24gZXhlY0J1bmRsZXRvb2wgKGFyZ3MsIGVycm9yTXNnKSB7XG4gIGF3YWl0IHRoaXMuaW5pdEJ1bmRsZXRvb2woKTtcbiAgYXJncyA9IFtcbiAgICAnLWphcicsIHRoaXMuYmluYXJpZXMuYnVuZGxldG9vbCxcbiAgICAuLi5hcmdzXG4gIF07XG4gIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICBpZiAodGhpcy5hZGJQb3J0KSB7XG4gICAgZW52LkFORFJPSURfQURCX1NFUlZFUl9QT1JUID0gYCR7dGhpcy5hZGJQb3J0fWA7XG4gIH1cbiAgaWYgKHRoaXMuYWRiSG9zdCkge1xuICAgIGVudi5BTkRST0lEX0FEQl9TRVJWRVJfSE9TVCA9IHRoaXMuYWRiSG9zdDtcbiAgfVxuICBsb2cuZGVidWcoYEV4ZWN1dGluZyBidW5kbGV0b29sIHdpdGggYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoYXdhaXQgZ2V0SmF2YUZvck9zKCksIGFyZ3MsIHtcbiAgICAgIGVudixcbiAgICAgIHRpbWVvdXQ6IEJVTkRMRVRPT0xfVElNRU9VVF9NUyxcbiAgICB9KSk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLnN0ZG91dCkge1xuICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtlLnN0ZG91dH1gKTtcbiAgICB9XG4gICAgaWYgKGUuc3RkZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3RkZXJyOiAke2Uuc3RkZXJyfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNc2d9LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWNMb2NhdGlvbiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGdlbmVyYXRlZCBkZXZpY2Ugc3BlYyBsb2NhdGlvblxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNhbWUgYHNwZWNMb2NhdGlvbmAgdmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgdGhlIHNwZWMgZm9yIHRoZSBjdXJyZW50IGRldmljZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmdldERldmljZVNwZWMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VTcGVjIChzcGVjTG9jYXRpb24pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnZ2V0LWRldmljZS1zcGVjJyxcbiAgICAnLS1hZGInLCB0aGlzLmV4ZWN1dGFibGUucGF0aCxcbiAgICAnLS1kZXZpY2UtaWQnLCB0aGlzLmN1ckRldmljZUlkLFxuICAgICctLW91dHB1dCcsIHNwZWNMb2NhdGlvbixcbiAgXTtcbiAgbG9nLmRlYnVnKGBHZXR0aW5nIHRoZSBzcGVjIGZvciB0aGUgZGV2aWNlICcke3RoaXMuY3VyRGV2aWNlSWR9J2ApO1xuICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsICdDYW5ub3QgcmV0cmlldmUgdGhlIGRldmljZSBzcGVjJyk7XG4gIHJldHVybiBzcGVjTG9jYXRpb247XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsXG4gKiB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3QgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uXG4gKiBpcyBjb21wbGV0ZWQgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwa3MgaW50byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFwa1BhdGhzVG9JbnN0YWxsIC0gVGhlIGZ1bGwgcGF0aHMgdG8gaW5zdGFsbCBhcGtzXG4gKiBAcGFyYW0gez9pbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0aW9ucyAtIEluc3RhbGxhdGlvbiBvcHRpb25zXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuaW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxNdWx0aXBsZUFwa3MgKGFwa1BhdGhzVG9JbnN0YWxsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgaW5zdGFsbEFyZ3MgPSBidWlsZEluc3RhbGxBcmdzKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSwgb3B0aW9ucyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYkV4ZWMoWydpbnN0YWxsLW11bHRpcGxlJywgLi4uaW5zdGFsbEFyZ3MsIC4uLmFwa1BhdGhzVG9JbnN0YWxsXSwge1xuICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCxcbiAgICB0aW1lb3V0Q2FwTmFtZTogb3B0aW9ucy50aW1lb3V0Q2FwTmFtZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gdGltZW91dCBbMTIwMDAwXSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWxcbiAqIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3QgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uXG4gKiBpcyBjb21wbGV0ZWQgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiAuYXBrcyBwYWNrYWdlIGludG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9JbnN0YWxsQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSAuYXBrcyBidW5kbGUgY2Fubm90IGJlIGluc3RhbGxlZFxuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwa3MgKGFwa3MsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB0aW1lb3V0LFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBhcmdzID0gW1xuICAgICdpbnN0YWxsLWFwa3MnLFxuICAgICctLWFkYicsIHRoaXMuZXhlY3V0YWJsZS5wYXRoLFxuICAgICctLWFwa3MnLCBhcGtzLFxuICAgICctLXRpbWVvdXQtbWlsbGlzJywgdGltZW91dCB8fCBBUEtTX0lOU1RBTExfVElNRU9VVCxcbiAgICAnLS1kZXZpY2UtaWQnLCB0aGlzLmN1ckRldmljZUlkLFxuICBdO1xuICBpZiAoYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICBhcmdzLnB1c2goJy0tYWxsb3ctdGVzdC1vbmx5Jyk7XG4gIH1cbiAgY29uc3QgdGFza3MgPSBbXG4gICAgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCBgQ2Fubm90IGluc3RhbGwgJyR7cGF0aC5iYXNlbmFtZShhcGtzKX0nIHRvIHRoZSBkZXZpY2UgJHt0aGlzLmN1ckRldmljZUlkfWApXG4gIF07XG4gIGlmIChncmFudFBlcm1pc3Npb25zKSB7XG4gICAgdGFza3MucHVzaCh0aGlzLmdldEFwa0luZm8oYXBrcykpO1xuICB9XG4gIGNvbnN0IFssIGFwa0luZm9dID0gYXdhaXQgQi5hbGwodGFza3MpO1xuICBpZiAoZ3JhbnRQZXJtaXNzaW9ucyAmJiBhcGtJbmZvKSB7XG4gICAgLy8gVE9ETzogU2ltcGxpZnkgaXQgYWZ0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9idW5kbGV0b29sL2lzc3Vlcy8yNDYgaXMgaW1wbGVtZW50ZWRcbiAgICBhd2FpdCB0aGlzLmdyYW50QWxsUGVybWlzc2lvbnMoYXBrSW5mby5uYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgLmFwayBmaWxlIGluc2lkZSB0aGUgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbWFzdGVyIGJ1bmRsZSAuYXBrXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcvZmluZGluZyB0aGUgZmlsZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4dHJhY3RCYXNlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEJhc2VBcGsgKGFwa3MpIHtcbiAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIEJBU0VfQVBLXSk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGssIHdoaWNoIGNvbnRhaW5zIHRoZSBjb3JyZXNwb25kaW5nXG4gKiByZXNvdXJjZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpbiB0aGUgLmFwa3MgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIFRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uIFRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzXG4gKiBnb2luZyB0byBiZSBzZWxlY3RlZCBpZiBpdCBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBsYW5ndWFnZSAuYXBrIG9yIHRoZSBtYXN0ZXIgLmFwa1xuICogaWYgbGFuZ3VhZ2Ugc3BsaXQgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSBidW5kbGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcvZmluZGluZyB0aGUgZmlsZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4dHJhY3RMYW5ndWFnZUFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RMYW5ndWFnZUFwayAoYXBrcywgbGFuZ3VhZ2UgPSBudWxsKSB7XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgTEFOR1VBR0VfQVBLKGxhbmd1YWdlKV0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlLm1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEFzc3VtaW5nIHRoYXQgc3BsaXR0aW5nIGJ5IGxhbmd1YWdlIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJyR7YXBrc30nIGJ1bmRsZSBgICtcbiAgICAgICAgYGFuZCByZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWRgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZXMgPSBbJ2VuJywgJ2VuX3VzJ107XG4gIGZvciAoY29uc3QgbGFuZyBvZiBkZWZhdWx0TGFuZ3VhZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZyldKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBsb2cuaW5mbyhgQ2Fubm90IGZpbmQgYW55IHNwbGl0IGFwayBmb3IgdGhlIGRlZmF1bHQgbGFuZ3VhZ2VzICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdExhbmd1YWdlcyl9LiBgICtcbiAgICBgUmV0dXJuaW5nIHRoZSBtYWluIGFwayBpbnN0ZWFkLmApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcGtzKTtcbn07XG5cbmFwa3NVdGlsc01ldGhvZHMuaXNUZXN0UGFja2FnZU9ubHlFcnJvciA9IGZ1bmN0aW9uIGlzVGVzdFBhY2thZ2VPbmx5RXJyb3IgKG91dHB1dCkge1xuICByZXR1cm4gL1xcW0lOU1RBTExfRkFJTEVEX1RFU1RfT05MWVxcXS8udGVzdChvdXRwdXQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrc1V0aWxzTWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7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
@@ -46,4 +46,4 @@ var _default = _adbCommands.default;
46
46
  exports.default = _default;require('source-map-support').install();
47
47
 
48
48
 
49
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9pbmRleC5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJtZXRob2RzIiwibWFuaWZlc3RNZXRob2RzIiwic3lzdGVtQ2FsbE1ldGhvZHMiLCJlbXVNZXRob2RzIiwiYXBrU2lnbmluZ01ldGhvZHMiLCJhcGtVdGlsc01ldGhvZHMiLCJhcGtzVXRpbHNNZXRob2RzIiwiYWFiVXRpbHNNZXRob2RzIiwic2V0dGluZ3NDbGllbnRDb21tYW5kcyIsImxvY2tNYW5hZ2VtZW50Q29tbWFuZHMiLCJrZXlib2FyZENvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsTUFBTSxDQUFDQyxNQUFQLENBQ0lDLG9CQURKLEVBRUlDLHdCQUZKLEVBR0lDLG9CQUhKLEVBSUlDLHVCQUpKLEVBS0lDLG1CQUxKLEVBTUlDLGlCQU5KLEVBT0lDLGtCQVBKLEVBUUlDLGlCQVJKLEVBU0lDLCtCQVRKLEVBVUlDLGlCQVZKLEVBV0lDLHlCQVhKO2VBY2VWLG9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9hZGItY29tbWFuZHMuanMnO1xuaW1wb3J0IG1hbmlmZXN0TWV0aG9kcyBmcm9tICcuL2FuZHJvaWQtbWFuaWZlc3QuanMnO1xuaW1wb3J0IHN5c3RlbUNhbGxNZXRob2RzLCB7IGdldEFuZHJvaWRCaW5hcnlQYXRoIH0gZnJvbSAnLi9zeXN0ZW0tY2FsbHMuanMnO1xuaW1wb3J0IGFwa1NpZ25pbmdNZXRob2RzIGZyb20gJy4vYXBrLXNpZ25pbmcuanMnO1xuaW1wb3J0IGFwa1V0aWxzTWV0aG9kcyBmcm9tICcuL2Fway11dGlscy5qcyc7XG5pbXBvcnQgYXBrc1V0aWxzTWV0aG9kcyBmcm9tICcuL2Fwa3MtdXRpbHMuanMnO1xuaW1wb3J0IGFhYlV0aWxzTWV0aG9kcyBmcm9tICcuL2FhYi11dGlscy5qcyc7XG5pbXBvcnQgZW11TWV0aG9kcyBmcm9tICcuL2FkYi1lbXUtY29tbWFuZHMuanMnO1xuaW1wb3J0IHNldHRpbmdzQ2xpZW50Q29tbWFuZHMgZnJvbSAnLi9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMnO1xuaW1wb3J0IGxvY2tNYW5hZ2VtZW50Q29tbWFuZHMgZnJvbSAnLi9sb2NrbWdtdCc7XG5pbXBvcnQga2V5Ym9hcmRDb21tYW5kcyBmcm9tICcuL2tleWJvYXJkLWNvbW1hbmRzJztcblxuT2JqZWN0LmFzc2lnbihcbiAgICBtZXRob2RzLFxuICAgIG1hbmlmZXN0TWV0aG9kcyxcbiAgICBzeXN0ZW1DYWxsTWV0aG9kcyxcbiAgICBlbXVNZXRob2RzLFxuICAgIGFwa1NpZ25pbmdNZXRob2RzLFxuICAgIGFwa1V0aWxzTWV0aG9kcyxcbiAgICBhcGtzVXRpbHNNZXRob2RzLFxuICAgIGFhYlV0aWxzTWV0aG9kcyxcbiAgICBzZXR0aW5nc0NsaWVudENvbW1hbmRzLFxuICAgIGxvY2tNYW5hZ2VtZW50Q29tbWFuZHMsXG4gICAga2V5Ym9hcmRDb21tYW5kcyxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHM7XG5leHBvcnQgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9O1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
49
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2luZGV4LmpzIiwibmFtZXMiOlsiT2JqZWN0IiwiYXNzaWduIiwibWV0aG9kcyIsIm1hbmlmZXN0TWV0aG9kcyIsInN5c3RlbUNhbGxNZXRob2RzIiwiZW11TWV0aG9kcyIsImFwa1NpZ25pbmdNZXRob2RzIiwiYXBrVXRpbHNNZXRob2RzIiwiYXBrc1V0aWxzTWV0aG9kcyIsImFhYlV0aWxzTWV0aG9kcyIsInNldHRpbmdzQ2xpZW50Q29tbWFuZHMiLCJsb2NrTWFuYWdlbWVudENvbW1hbmRzIiwia2V5Ym9hcmRDb21tYW5kcyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi90b29scy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWV0aG9kcyBmcm9tICcuL2FkYi1jb21tYW5kcy5qcyc7XG5pbXBvcnQgbWFuaWZlc3RNZXRob2RzIGZyb20gJy4vYW5kcm9pZC1tYW5pZmVzdC5qcyc7XG5pbXBvcnQgc3lzdGVtQ2FsbE1ldGhvZHMsIHsgZ2V0QW5kcm9pZEJpbmFyeVBhdGggfSBmcm9tICcuL3N5c3RlbS1jYWxscy5qcyc7XG5pbXBvcnQgYXBrU2lnbmluZ01ldGhvZHMgZnJvbSAnLi9hcGstc2lnbmluZy5qcyc7XG5pbXBvcnQgYXBrVXRpbHNNZXRob2RzIGZyb20gJy4vYXBrLXV0aWxzLmpzJztcbmltcG9ydCBhcGtzVXRpbHNNZXRob2RzIGZyb20gJy4vYXBrcy11dGlscy5qcyc7XG5pbXBvcnQgYWFiVXRpbHNNZXRob2RzIGZyb20gJy4vYWFiLXV0aWxzLmpzJztcbmltcG9ydCBlbXVNZXRob2RzIGZyb20gJy4vYWRiLWVtdS1jb21tYW5kcy5qcyc7XG5pbXBvcnQgc2V0dGluZ3NDbGllbnRDb21tYW5kcyBmcm9tICcuL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcyc7XG5pbXBvcnQgbG9ja01hbmFnZW1lbnRDb21tYW5kcyBmcm9tICcuL2xvY2ttZ210JztcbmltcG9ydCBrZXlib2FyZENvbW1hbmRzIGZyb20gJy4va2V5Ym9hcmQtY29tbWFuZHMnO1xuXG5PYmplY3QuYXNzaWduKFxuICAgIG1ldGhvZHMsXG4gICAgbWFuaWZlc3RNZXRob2RzLFxuICAgIHN5c3RlbUNhbGxNZXRob2RzLFxuICAgIGVtdU1ldGhvZHMsXG4gICAgYXBrU2lnbmluZ01ldGhvZHMsXG4gICAgYXBrVXRpbHNNZXRob2RzLFxuICAgIGFwa3NVdGlsc01ldGhvZHMsXG4gICAgYWFiVXRpbHNNZXRob2RzLFxuICAgIHNldHRpbmdzQ2xpZW50Q29tbWFuZHMsXG4gICAgbG9ja01hbmFnZW1lbnRDb21tYW5kcyxcbiAgICBrZXlib2FyZENvbW1hbmRzLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kcztcbmV4cG9ydCB7IGdldEFuZHJvaWRCaW5hcnlQYXRoIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBQSxNQUFNLENBQUNDLE1BQVAsQ0FDSUMsb0JBREosRUFFSUMsd0JBRkosRUFHSUMsb0JBSEosRUFJSUMsdUJBSkosRUFLSUMsbUJBTEosRUFNSUMsaUJBTkosRUFPSUMsa0JBUEosRUFRSUMsaUJBUkosRUFTSUMsK0JBVEosRUFVSUMsaUJBVkosRUFXSUMseUJBWEo7ZUFjZVYsb0IifQ==
@@ -68,4 +68,4 @@ var _default = keyboardCommands;
68
68
  exports.default = _default;require('source-map-support').install();
69
69
 
70
70
 
71
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9rZXlib2FyZC1jb21tYW5kcy5qcyJdLCJuYW1lcyI6WyJLRVlDT0RFX0VTQyIsIktFWUNPREVfQkFDSyIsImtleWJvYXJkQ29tbWFuZHMiLCJoaWRlS2V5Ym9hcmQiLCJ0aW1lb3V0TXMiLCJpc0tleWJvYXJkU2hvd24iLCJjYW5DbG9zZUtleWJvYXJkIiwiaXNTb2Z0S2V5Ym9hcmRQcmVzZW50IiwibG9nIiwiaW5mbyIsImtleUNvZGUiLCJrZXlldmVudCIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJFcnJvciIsInN0ZG91dCIsInNoZWxsIiwiaW5wdXRTaG93bk1hdGNoIiwiZXhlYyIsImlucHV0Vmlld1Nob3duTWF0Y2giLCJlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsR0FBcEI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsQ0FBckI7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxFQUF6Qjs7QUFXQUEsZ0JBQWdCLENBQUNDLFlBQWpCLEdBQWdDLGVBQWVBLFlBQWYsQ0FBNkJDLFNBQVMsR0FBRyxJQUF6QyxFQUErQztBQUM3RSxNQUFJO0FBQUNDLElBQUFBLGVBQUQ7QUFBa0JDLElBQUFBO0FBQWxCLE1BQXNDLE1BQU0sS0FBS0MscUJBQUwsRUFBaEQ7O0FBQ0EsTUFBSSxDQUFDRixlQUFMLEVBQXNCO0FBQ3BCRyxvQkFBSUMsSUFBSixDQUFTLDBDQUFUOztBQUNBLFdBQU8sS0FBUDtBQUNEOztBQUVELE9BQUssTUFBTUMsT0FBWCxJQUFzQixDQUFDVixXQUFELEVBQWNDLFlBQWQsQ0FBdEIsRUFBbUQ7QUFDakQsUUFBSUssZ0JBQUosRUFBc0I7QUFDcEIsWUFBTSxLQUFLSyxRQUFMLENBQWNELE9BQWQsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixhQUFPLE1BQU0sZ0NBQWlCLFlBQVk7QUFDeEMsU0FBQztBQUFDTCxVQUFBQTtBQUFELFlBQW9CLE1BQU0sS0FBS0UscUJBQUwsRUFBM0I7QUFDQSxlQUFPLENBQUNGLGVBQVI7QUFDRCxPQUhZLEVBR1Y7QUFBQ08sUUFBQUEsTUFBTSxFQUFFUixTQUFUO0FBQW9CUyxRQUFBQSxVQUFVLEVBQUU7QUFBaEMsT0FIVSxDQUFiO0FBSUQsS0FMRCxDQUtFLE9BQU9DLEdBQVAsRUFBWSxDQUFFO0FBQ2pCOztBQUNELFFBQU0sSUFBSUMsS0FBSixDQUFXLHdDQUFYLENBQU47QUFDRCxDQW5CRDs7QUFnQ0FiLGdCQUFnQixDQUFDSyxxQkFBakIsR0FBeUMsZUFBZUEscUJBQWYsR0FBd0M7QUFDL0UsTUFBSTtBQUNGLFVBQU1TLE1BQU0sR0FBRyxNQUFNLEtBQUtDLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxjQUFaLENBQVgsQ0FBckI7QUFDQSxVQUFNQyxlQUFlLEdBQUcsb0JBQW9CQyxJQUFwQixDQUF5QkgsTUFBekIsQ0FBeEI7QUFDQSxVQUFNSSxtQkFBbUIsR0FBRywwQkFBMEJELElBQTFCLENBQStCSCxNQUEvQixDQUE1QjtBQUNBLFdBQU87QUFDTFgsTUFBQUEsZUFBZSxFQUFFLENBQUMsRUFBRWEsZUFBZSxJQUFJQSxlQUFlLENBQUMsQ0FBRCxDQUFmLEtBQXVCLE1BQTVDLENBRGI7QUFFTFosTUFBQUEsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFYyxtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUMsQ0FBRCxDQUFuQixLQUEyQixNQUFwRDtBQUZkLEtBQVA7QUFJRCxHQVJELENBUUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsVUFBTSxJQUFJTixLQUFKLENBQVcsK0NBQThDTSxDQUFDLENBQUNDLE9BQVEsRUFBbkUsQ0FBTjtBQUNEO0FBQ0YsQ0FaRDs7ZUFjZXBCLGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgS0VZQ09ERV9FU0MgPSAxMTE7XG5jb25zdCBLRVlDT0RFX0JBQ0sgPSA0O1xuXG5jb25zdCBrZXlib2FyZENvbW1hbmRzID0ge307XG5cbi8qKlxuICogSGlkZXMgc29mdHdhcmUga2V5Ym9hcmQgaWYgaXQgaXMgdmlzaWJsZS5cbiAqIE5vb3AgaWYgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0TXMgWzEwMDBdIEZvciBob3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpXG4gKiB1bnRpbCB0aGUga2V5Ym9hcmQgaXMgYWN0dWFsbHkgaGlkZGVuLlxuICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgdGhlIGtleWJvYXJkIHdhcyBhbHJlYWR5IGhpZGRlblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuLlxuICovXG5rZXlib2FyZENvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAodGltZW91dE1zID0gMTAwMCkge1xuICBsZXQge2lzS2V5Ym9hcmRTaG93biwgY2FuQ2xvc2VLZXlib2FyZH0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpO1xuICBpZiAoIWlzS2V5Ym9hcmRTaG93bikge1xuICAgIGxvZy5pbmZvKCdLZXlib2FyZCBoYXMgbm8gVUk7IG5vIGNsb3NpbmcgbmVjZXNzYXJ5Jyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRyeSBFU0MgdGhlbiBCQUNLIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHNcbiAgZm9yIChjb25zdCBrZXlDb2RlIG9mIFtLRVlDT0RFX0VTQywgS0VZQ09ERV9CQUNLXSkge1xuICAgIGlmIChjYW5DbG9zZUtleWJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLmtleWV2ZW50KGtleUNvZGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAoe2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpKTtcbiAgICAgICAgcmV0dXJuICFpc0tleWJvYXJkU2hvd247XG4gICAgICB9LCB7d2FpdE1zOiB0aW1lb3V0TXMsIGludGVydmFsTXM6IDUwMH0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzb2Z0d2FyZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuYCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleWJvYXJkU3RhdGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNLZXlib2FyZFNob3duIC0gV2hldGhlciBzb2Z0IGtleWJvYXJkIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjYW5DbG9zZUtleWJvYXJkIC0gV2hldGhlciB0aGUga2V5Ym9hcmQgY2FuIGJlIGNsb3NlZC5cbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzdGF0ZSBvZiB0aGUgc29mdHdhcmUga2V5Ym9hcmQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge0tleWJvYXJkU3RhdGV9IFRoZSBrZXlib2FyZCBzdGF0ZS5cbiAqL1xua2V5Ym9hcmRDb21tYW5kcy5pc1NvZnRLZXlib2FyZFByZXNlbnQgPSBhc3luYyBmdW5jdGlvbiBpc1NvZnRLZXlib2FyZFByZXNlbnQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ2lucHV0X21ldGhvZCddKTtcbiAgICBjb25zdCBpbnB1dFNob3duTWF0Y2ggPSAvbUlucHV0U2hvd249KFxcdyspLy5leGVjKHN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXRWaWV3U2hvd25NYXRjaCA9IC9tSXNJbnB1dFZpZXdTaG93bj0oXFx3KykvLmV4ZWMoc3Rkb3V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNLZXlib2FyZFNob3duOiAhIShpbnB1dFNob3duTWF0Y2ggJiYgaW5wdXRTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgICAgY2FuQ2xvc2VLZXlib2FyZDogISEoaW5wdXRWaWV3U2hvd25NYXRjaCAmJiBpbnB1dFZpZXdTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpbmRpbmcgc29mdGtleWJvYXJkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleWJvYXJkQ29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9rZXlib2FyZC1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
71
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2tleWJvYXJkLWNvbW1hbmRzLmpzIiwibmFtZXMiOlsiS0VZQ09ERV9FU0MiLCJLRVlDT0RFX0JBQ0siLCJrZXlib2FyZENvbW1hbmRzIiwiaGlkZUtleWJvYXJkIiwidGltZW91dE1zIiwiaXNLZXlib2FyZFNob3duIiwiY2FuQ2xvc2VLZXlib2FyZCIsImlzU29mdEtleWJvYXJkUHJlc2VudCIsImxvZyIsImluZm8iLCJrZXlDb2RlIiwia2V5ZXZlbnQiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaWduIiwiRXJyb3IiLCJzdGRvdXQiLCJzaGVsbCIsImlucHV0U2hvd25NYXRjaCIsImV4ZWMiLCJpbnB1dFZpZXdTaG93bk1hdGNoIiwiZSIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvdG9vbHMva2V5Ym9hcmQtY29tbWFuZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgS0VZQ09ERV9FU0MgPSAxMTE7XG5jb25zdCBLRVlDT0RFX0JBQ0sgPSA0O1xuXG5jb25zdCBrZXlib2FyZENvbW1hbmRzID0ge307XG5cbi8qKlxuICogSGlkZXMgc29mdHdhcmUga2V5Ym9hcmQgaWYgaXQgaXMgdmlzaWJsZS5cbiAqIE5vb3AgaWYgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0TXMgWzEwMDBdIEZvciBob3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpXG4gKiB1bnRpbCB0aGUga2V5Ym9hcmQgaXMgYWN0dWFsbHkgaGlkZGVuLlxuICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgdGhlIGtleWJvYXJkIHdhcyBhbHJlYWR5IGhpZGRlblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuLlxuICovXG5rZXlib2FyZENvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAodGltZW91dE1zID0gMTAwMCkge1xuICBsZXQge2lzS2V5Ym9hcmRTaG93biwgY2FuQ2xvc2VLZXlib2FyZH0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpO1xuICBpZiAoIWlzS2V5Ym9hcmRTaG93bikge1xuICAgIGxvZy5pbmZvKCdLZXlib2FyZCBoYXMgbm8gVUk7IG5vIGNsb3NpbmcgbmVjZXNzYXJ5Jyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRyeSBFU0MgdGhlbiBCQUNLIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHNcbiAgZm9yIChjb25zdCBrZXlDb2RlIG9mIFtLRVlDT0RFX0VTQywgS0VZQ09ERV9CQUNLXSkge1xuICAgIGlmIChjYW5DbG9zZUtleWJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLmtleWV2ZW50KGtleUNvZGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAoe2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpKTtcbiAgICAgICAgcmV0dXJuICFpc0tleWJvYXJkU2hvd247XG4gICAgICB9LCB7d2FpdE1zOiB0aW1lb3V0TXMsIGludGVydmFsTXM6IDUwMH0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzb2Z0d2FyZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuYCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleWJvYXJkU3RhdGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNLZXlib2FyZFNob3duIC0gV2hldGhlciBzb2Z0IGtleWJvYXJkIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjYW5DbG9zZUtleWJvYXJkIC0gV2hldGhlciB0aGUga2V5Ym9hcmQgY2FuIGJlIGNsb3NlZC5cbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzdGF0ZSBvZiB0aGUgc29mdHdhcmUga2V5Ym9hcmQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge0tleWJvYXJkU3RhdGV9IFRoZSBrZXlib2FyZCBzdGF0ZS5cbiAqL1xua2V5Ym9hcmRDb21tYW5kcy5pc1NvZnRLZXlib2FyZFByZXNlbnQgPSBhc3luYyBmdW5jdGlvbiBpc1NvZnRLZXlib2FyZFByZXNlbnQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ2lucHV0X21ldGhvZCddKTtcbiAgICBjb25zdCBpbnB1dFNob3duTWF0Y2ggPSAvbUlucHV0U2hvd249KFxcdyspLy5leGVjKHN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXRWaWV3U2hvd25NYXRjaCA9IC9tSXNJbnB1dFZpZXdTaG93bj0oXFx3KykvLmV4ZWMoc3Rkb3V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNLZXlib2FyZFNob3duOiAhIShpbnB1dFNob3duTWF0Y2ggJiYgaW5wdXRTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgICAgY2FuQ2xvc2VLZXlib2FyZDogISEoaW5wdXRWaWV3U2hvd25NYXRjaCAmJiBpbnB1dFZpZXdTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpbmRpbmcgc29mdGtleWJvYXJkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleWJvYXJkQ29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUEsTUFBTUEsV0FBVyxHQUFHLEdBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQXJCO0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsRUFBekI7O0FBV0FBLGdCQUFnQixDQUFDQyxZQUFqQixHQUFnQyxlQUFlQSxZQUFmLENBQTZCQyxTQUFTLEdBQUcsSUFBekMsRUFBK0M7RUFDN0UsSUFBSTtJQUFDQyxlQUFEO0lBQWtCQztFQUFsQixJQUFzQyxNQUFNLEtBQUtDLHFCQUFMLEVBQWhEOztFQUNBLElBQUksQ0FBQ0YsZUFBTCxFQUFzQjtJQUNwQkcsZ0JBQUlDLElBQUosQ0FBUywwQ0FBVDs7SUFDQSxPQUFPLEtBQVA7RUFDRDs7RUFFRCxLQUFLLE1BQU1DLE9BQVgsSUFBc0IsQ0FBQ1YsV0FBRCxFQUFjQyxZQUFkLENBQXRCLEVBQW1EO0lBQ2pELElBQUlLLGdCQUFKLEVBQXNCO01BQ3BCLE1BQU0sS0FBS0ssUUFBTCxDQUFjRCxPQUFkLENBQU47SUFDRDs7SUFDRCxJQUFJO01BQ0YsT0FBTyxNQUFNLGdDQUFpQixZQUFZO1FBQ3hDLENBQUM7VUFBQ0w7UUFBRCxJQUFvQixNQUFNLEtBQUtFLHFCQUFMLEVBQTNCO1FBQ0EsT0FBTyxDQUFDRixlQUFSO01BQ0QsQ0FIWSxFQUdWO1FBQUNPLE1BQU0sRUFBRVIsU0FBVDtRQUFvQlMsVUFBVSxFQUFFO01BQWhDLENBSFUsQ0FBYjtJQUlELENBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtFQUNqQjs7RUFDRCxNQUFNLElBQUlDLEtBQUosQ0FBVyx3Q0FBWCxDQUFOO0FBQ0QsQ0FuQkQ7O0FBZ0NBYixnQkFBZ0IsQ0FBQ0sscUJBQWpCLEdBQXlDLGVBQWVBLHFCQUFmLEdBQXdDO0VBQy9FLElBQUk7SUFDRixNQUFNUyxNQUFNLEdBQUcsTUFBTSxLQUFLQyxLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksY0FBWixDQUFYLENBQXJCO0lBQ0EsTUFBTUMsZUFBZSxHQUFHLG9CQUFvQkMsSUFBcEIsQ0FBeUJILE1BQXpCLENBQXhCO0lBQ0EsTUFBTUksbUJBQW1CLEdBQUcsMEJBQTBCRCxJQUExQixDQUErQkgsTUFBL0IsQ0FBNUI7SUFDQSxPQUFPO01BQ0xYLGVBQWUsRUFBRSxDQUFDLEVBQUVhLGVBQWUsSUFBSUEsZUFBZSxDQUFDLENBQUQsQ0FBZixLQUF1QixNQUE1QyxDQURiO01BRUxaLGdCQUFnQixFQUFFLENBQUMsRUFBRWMsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDLENBQUQsQ0FBbkIsS0FBMkIsTUFBcEQ7SUFGZCxDQUFQO0VBSUQsQ0FSRCxDQVFFLE9BQU9DLENBQVAsRUFBVTtJQUNWLE1BQU0sSUFBSU4sS0FBSixDQUFXLCtDQUE4Q00sQ0FBQyxDQUFDQyxPQUFRLEVBQW5FLENBQU47RUFDRDtBQUNGLENBWkQ7O2VBY2VwQixnQiJ9
@@ -221,4 +221,4 @@ var _default = lockManagementMethods;
221
221
  exports.default = _default;require('source-map-support').install();
222
222
 
223
223
 
224
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9sb2NrbWdtdC5qcyJdLCJuYW1lcyI6WyJsb2NrTWFuYWdlbWVudE1ldGhvZHMiLCJDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SIiwiQ1JFREVOVElBTF9ESURfTk9UX01BVENIX0VSUk9SIiwiU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyIsIktFWUNPREVfUE9XRVIiLCJLRVlDT0RFX1dBS0VVUCIsIkhJREVfS0VZQk9BUkRfV0FJVF9USU1FIiwiYnVpbGRDb21tYW5kIiwidmVyYiIsIm9sZENyZWRlbnRpYWwiLCJhcmdzIiwiY21kIiwiXyIsImlzRW1wdHkiLCJwdXNoIiwic3dpcGVVcCIsImFkYiIsIm91dHB1dCIsInNoZWxsIiwiZGltZW5zaW9uc01hdGNoIiwiZXhlYyIsIkVycm9yIiwiZGlzcGxheVdpZHRoIiwicGFyc2VJbnQiLCJkaXNwbGF5SGVpZ2h0IiwieDAiLCJ5MCIsIngxIiwieTEiLCJtYXAiLCJjIiwiTWF0aCIsInRydW5jIiwiaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsImlzQm9vbGVhbiIsIl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwicGFzc0ZsYWciLCJpZ24iLCJpbmNsdWRlcyIsImxvZyIsImRlYnVnIiwidmVyaWZ5TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0Rm9ybWF0IiwiRVhFQ19PVVRQVVRfRk9STUFUIiwiRlVMTCIsInNvbWUiLCJ4IiwiZSIsIm1lc3NhZ2UiLCJjbGVhckxvY2tDcmVkZW50aWFsIiwiaXNMb2NrRW5hYmxlZCIsInRlc3QiLCJzZXRMb2NrQ3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwiaXNJbnRlZ2VyIiwiaXNTY3JlZW5Mb2NrZWQiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX0xPR19EVU1QU1lTIiwiZHVtcHN5c0ZpbGUiLCJwYXRoIiwicmVzb2x2ZSIsImN3ZCIsImZzIiwid3JpdGVGaWxlIiwiZGlzbWlzc0tleWd1YXJkIiwiaW5mbyIsImN5Y2xlV2FrZVVwIiwiZ2V0QXBpTGV2ZWwiLCJoaWRlS2V5Ym9hcmQiLCJCIiwiZGVsYXkiLCJiYWNrIiwia2V5ZXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBOUI7QUFFQSxNQUFNQyx3Q0FBd0MsR0FBSSxtQ0FBbEQ7QUFDQSxNQUFNQyw4QkFBOEIsR0FBSSxjQUF4QztBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsU0FBcEIsQ0FBeEM7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsR0FBdkI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxJQUF2QixFQUE2QkMsYUFBYSxHQUFHLElBQTdDLEVBQW1ELEdBQUdDLElBQXRELEVBQTREO0FBQzFELFFBQU1DLEdBQUcsR0FBRyxDQUFDLGNBQUQsRUFBaUJILElBQWpCLENBQVo7O0FBQ0EsTUFBSSxDQUFDSSxnQkFBRUMsT0FBRixDQUFVSixhQUFWLENBQUwsRUFBK0I7QUFDN0JFLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLE9BQVQsRUFBa0JMLGFBQWxCO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRyxnQkFBRUMsT0FBRixDQUFVSCxJQUFWLENBQUwsRUFBc0I7QUFDcEJDLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLEdBQUdKLElBQVo7QUFDRDs7QUFDRCxTQUFPQyxHQUFQO0FBQ0Q7O0FBRUQsZUFBZUksT0FBZixDQUF3QkMsR0FBeEIsRUFBNkI7QUFDM0IsUUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsS0FBSixDQUFVLENBQUMsU0FBRCxFQUFZLFFBQVosQ0FBVixDQUFyQjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxtQkFB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O0FBR0EsUUFBTSxLQUFLQyxXQUFMLEVBQU47O0FBRUEsTUFBSSxPQUFNLEtBQUtDLFdBQUwsRUFBTixJQUEyQixFQUEvQixFQUFtQztBQUNqQyxVQUFNLEtBQUtyRCxLQUFMLENBQVcsQ0FBQyxJQUFELEVBQU8sa0JBQVAsQ0FBWCxDQUFOO0FBQ0E7QUFDRDs7QUFFRCxRQUFNeUIsTUFBTSxHQUFHLE1BQU0sS0FBS3pCLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxRQUFaLEVBQXNCLFNBQXRCLENBQVgsQ0FBckI7O0FBQ0EsTUFBSSxDQUFDLHVDQUF5QnlCLE1BQXpCLENBQUwsRUFBdUM7QUFDckNKLG9CQUFJQyxLQUFKLENBQVUsbUNBQVY7O0FBQ0E7QUFDRDs7QUFFREQsa0JBQUlDLEtBQUosQ0FBVSxvQ0FBVjs7QUFDQSxNQUFJLE1BQU0sS0FBS2dDLFlBQUwsRUFBVixFQUErQjtBQUM3QixVQUFNQyxrQkFBRUMsS0FBRixDQUFRcEUsdUJBQVIsQ0FBTjtBQUNEOztBQUNEaUMsa0JBQUlDLEtBQUosQ0FBVSwrQ0FBVjs7QUFDQSxRQUFNLEtBQUt0QixLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksTUFBWixFQUFvQixjQUFwQixFQUFvQyxHQUFwQyxDQUFYLENBQU47QUFDQSxRQUFNLEtBQUt5RCxJQUFMLEVBQU47QUFDQSxRQUFNNUQsT0FBTyxDQUFDLElBQUQsQ0FBYjtBQUNELENBekJEOztBQStCQWYscUJBQXFCLENBQUNzRSxXQUF0QixHQUFvQyxlQUFlQSxXQUFmLEdBQThCO0FBQ2hFLFFBQU0sS0FBS00sUUFBTCxDQUFjeEUsYUFBZCxDQUFOO0FBQ0EsUUFBTSxLQUFLd0UsUUFBTCxDQUFjdkUsY0FBZCxDQUFOO0FBQ0QsQ0FIRDs7ZUFLZUwscUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge1xuICBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsIGlzU2NyZWVuT25GdWxseSxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcyA9IHt9O1xuXG5jb25zdCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SID0gYENyZWRlbnRpYWwgY2FuJ3QgYmUgbnVsbCBvciBlbXB0eWA7XG5jb25zdCBDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IgPSBgZGlkbid0IG1hdGNoYDtcbmNvbnN0IFNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMgPSBbJ3Bhc3N3b3JkJywgJ3BpbicsICdwYXR0ZXJuJ107XG5jb25zdCBLRVlDT0RFX1BPV0VSID0gMjY7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDsgLy8gd29ya3Mgb3ZlciBBUEkgTGV2ZWwgMjBcbmNvbnN0IEhJREVfS0VZQk9BUkRfV0FJVF9USU1FID0gMTAwO1xuXG5mdW5jdGlvbiBidWlsZENvbW1hbmQgKHZlcmIsIG9sZENyZWRlbnRpYWwgPSBudWxsLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGNtZCA9IFsnbG9ja3NldHRpbmdzJywgdmVyYl07XG4gIGlmICghXy5pc0VtcHR5KG9sZENyZWRlbnRpYWwpKSB7XG4gICAgY21kLnB1c2goJy0tb2xkJywgb2xkQ3JlZGVudGlhbCk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBjbWQucHVzaCguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzd2lwZVVwIChhZGIpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGNvbnN0IGRpbWVuc2lvbnNNYXRjaCA9IC9pbml0PShcXGQrKXgoXFxkKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFkaW1lbnNpb25zTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGlzcGxheSBzaXplJyk7XG4gIH1cbiAgY29uc3QgZGlzcGxheVdpZHRoID0gcGFyc2VJbnQoZGltZW5zaW9uc01hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMl0sIDEwKTtcbiAgY29uc3QgeDAgPSBkaXNwbGF5V2lkdGggLyAyO1xuICBjb25zdCB5MCA9IGRpc3BsYXlIZWlnaHQgLyA1ICogNDtcbiAgY29uc3QgeDEgPSB4MDtcbiAgY29uc3QgeTEgPSBkaXNwbGF5SGVpZ2h0IC8gNTtcbiAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAnaW5wdXQnLCAndG91Y2hzY3JlZW4nLCAnc3dpcGUnLFxuICAgIC4uLihbeDAsIHkwLCB4MSwgeTFdLm1hcCgoYykgPT4gTWF0aC50cnVuYyhjKSkpXG4gIF0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBsb2NrIHNldHRpbmdzIG1hbmFnZW1lbnQgd2l0aCBgbG9ja3NldHRpbmdzYFxuICogY29tbWFuZCBsaW5lIHRvb2wuIFRoaXMgdG9vbCBoYXMgYmVlbiBhZGRlZCB0byBBbmRyb2lkIHRvb2xzZXQgc2luY2UgIEFQSSAyNyBPcmVvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuIFRoZSByZXN1bHQgaXMgY2FjaGVkIHBlciBBREIgaW5zdGFuY2VcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkICgpIHtcbiAgaWYgKCFfLmlzQm9vbGVhbih0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKSkge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2Bsb2Nrc2V0dGluZ3MgaGVscCAmJiBlY2hvICR7cGFzc0ZsYWd9YF0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkID0gXy5pbmNsdWRlcyhvdXRwdXQsIHBhc3NGbGFnKTtcbiAgICBsb2cuZGVidWcoYEV4dGVuZGVkIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCBpcyBgICtcbiAgICAgIGAke3RoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPyAnJyA6ICdub3QgJ31zdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBpcyBtYXRjaGVzIHRvIHRoZSBjdXJyZW50bHkgc2V0IG9uZS5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgZGV2aWNlJ3Mgb25lXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHZlcmlmaWNhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy52ZXJpZnlMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgndmVyaWZ5JywgY3JlZGVudGlhbCksIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmIChfLmluY2x1ZGVzKHN0ZG91dCwgJ3ZlcmlmaWVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFtgZGlkbid0IG1hdGNoYCwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl1cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB2ZXJpZmljYXRpb24gZmFpbGVkLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIGN1cnJlbnQgbG9jayBjcmVkZW50aWFscy4gVXN1YWxseSBpdCB0YWtlcyBzZXZlcmFsIHNlY29uZHMgZm9yIGEgZGV2aWNlIHRvXG4gKiBzeW5jIHRoZSBjcmVkZW50aWFsIHN0YXRlIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBjcmVkZW50aWFsIFtudWxsXSBUaGUgY3JlZGVudGlhbCB2YWx1ZS4gSXQgY291bGQgYmUgZWl0aGVyXG4gKiBwaW4sIHBhc3N3b3JkIG9yIGEgcGF0dGVybi4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIG51bGwvZW1wdHkgdmFsdWUgYXNzdW1lcyB0aGUgZGV2aWNlIGhhcyBubyBsb2NrIGN1cnJlbnRseSBzZXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmNsZWFyTG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBjbGVhckxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgnY2xlYXInLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKCFbJ3VzZXIgaGFzIG5vIHBhc3N3b3JkJywgJ0xvY2sgY3JlZGVudGlhbCBjbGVhcmVkJ11cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgZGV2aWNlIGxvY2sgY3JlZGVudGlhbC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBjcmVkZW50aWFsIChlaXRoZXIgcGluIG9yIGEgcGFzc3dvcmRcbiAqIG9yIGEgcGF0dGVybikuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZFxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZXJhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc0xvY2tFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrRW5hYmxlZCAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdnZXQtZGlzYWJsZWQnKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKC9cXGJmYWxzZVxcYi8udGVzdChzdGRvdXQpXG4gICAgICAgIHx8IFtDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IsIENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1JdLnNvbWUoXG4gICAgICAgICAgKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKC9cXGJ0cnVlXFxiLy50ZXN0KHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2hlY2sgaWYgZGV2aWNlIGxvY2sgaXMgZW5hYmxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRldmljZSBsb2NrLlxuICpcbiAqIEBwYXJhbSB7IXN0cmluZ30gY3JlZGVudGlhbFR5cGUgT25lIG9mOiBwYXNzd29yZCwgcGluLCBwYXR0ZXJuLlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsIEEgbm9uLWVtcHR5IGNyZWRlbnRpYWwgdmFsdWUgdG8gYmUgc2V0LlxuICogTWFrZSBzdXJlIHlvdXIgbmV3IGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgYWN0dWFsIHN5c3RlbSBzZWN1cml0eSByZXF1aXJlbWVudHMsXG4gKiBlLmcuIGEgbWluaW11bSBwYXNzd29yZCBsZW5ndGguIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBAcGFyYW0gez9zdHJpbmd9IG9sZENyZWRlbnRpYWwgW251bGxdIEFuIG9sZCBjcmVkZW50aWFsIHN0cmluZy5cbiAqIEl0IGlzIG9ubHkgcmVxdWlyZWQgdG8gYmUgc2V0IGluIGNhc2UgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50XG4gKiBjcmVkZW50aWFsIHJhdGhlciB0aGFuIHRvIHNldCBhIG5ldyBvbmUuIFNldHRpbmcgaXQgdG8gYSB3cm9uZyB2YWx1ZSB3aWxsXG4gKiBtYWtlIHRoaXMgbWV0aG9kIHRvIGZhaWwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHZlcmlmeWluZyBpbnB1dCBhcmd1bWVudHMgb3Igc2V0dGluZ1xuICogdGhlIGNyZWRlbnRpYWxcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnNldExvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9ja0NyZWRlbnRpYWwgKFxuICBjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCwgb2xkQ3JlZGVudGlhbCA9IG51bGwpIHtcbiAgaWYgKCFTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTLmluY2x1ZGVzKGNyZWRlbnRpYWxUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB0eXBlICcke2NyZWRlbnRpYWxUeXBlfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWwgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTfWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoY3JlZGVudGlhbCkgJiYgIV8uaXNJbnRlZ2VyKGNyZWRlbnRpYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgbG9jayBjcmVkZW50aWFsIGNhbm5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGNvbnN0IGNtZCA9IGJ1aWxkQ29tbWFuZChgc2V0LSR7Y3JlZGVudGlhbFR5cGV9YCwgb2xkQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoY21kLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoc3Rkb3V0LCAnc2V0IHRvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgb2YgZGV2aWNlIGxvY2sgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc2NyZWVuIGxvY2sgc3RhdGUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRldmljZSBpcyBsb2NrZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc1NjcmVlbkxvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzU2NyZWVuTG9ja2VkICgpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93J10pO1xuICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX0xPR19EVU1QU1lTKSB7XG4gICAgLy8gb3B0aW9uYWwgZGVidWdnaW5nXG4gICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgd29ya2luZywgdHVybiBpdCBvbiBhbmQgc2VuZCB1cyB0aGUgb3V0cHV0XG4gICAgY29uc3QgZHVtcHN5c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2R1bXBzeXMubG9nJyk7XG4gICAgbG9nLmRlYnVnKGBXcml0aW5nIGR1bXBzeXMgb3V0cHV0IHRvICR7ZHVtcHN5c0ZpbGV9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bXBzeXNGaWxlLCBzdGRvdXQpO1xuICB9XG4gIHJldHVybiBpc1Nob3dpbmdMb2Nrc2NyZWVuKHN0ZG91dCkgfHwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkgfHwgIWlzU2NyZWVuT25GdWxseShzdGRvdXQpO1xufTtcblxuLyoqXG4gKiBEaXNtaXNzZXMga2V5Z3VhcmQgb3ZlcmxheS5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmRpc21pc3NLZXlndWFyZCA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NLZXlndWFyZCAoKSB7XG4gIGxvZy5pbmZvKCdXYWtpbmcgdXAgdGhlIGRldmljZSB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICAvLyBTY3JlZW4gb2ZmIG9uY2UgdG8gZm9yY2UgcHJlLWlucHV0dGVkIHRleHQgZmllbGQgY2xlYW4gYWZ0ZXIgd2FrZS11cFxuICAvLyBKdXN0IHNjcmVlbiBvbiBpZiB0aGUgc2NyZWVuIGRlZmF1bHRzIG9mZlxuICBhd2FpdCB0aGlzLmN5Y2xlV2FrZVVwKCk7XG5cbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+IDIxKSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3dtJywgJ2Rpc21pc3Mta2V5Z3VhcmQnXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIGlmICghaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkpIHtcbiAgICBsb2cuZGVidWcoJ1RoZSBrZXlndWFyZCBzZWVtcyB0byBiZSBpbmFjdGl2ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3dpcGluZyB1cCB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICBpZiAoYXdhaXQgdGhpcy5oaWRlS2V5Ym9hcmQoKSkge1xuICAgIGF3YWl0IEIuZGVsYXkoSElERV9LRVlCT0FSRF9XQUlUX1RJTUUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnRGlzbWlzc2luZyBub3RpZmljYXRpb25zIGZyb20gdGhlIHVubG9jayB2aWV3Jyk7XG4gIGF3YWl0IHRoaXMuc2hlbGwoWydzZXJ2aWNlJywgJ2NhbGwnLCAnbm90aWZpY2F0aW9uJywgJzEnXSk7XG4gIGF3YWl0IHRoaXMuYmFjaygpO1xuICBhd2FpdCBzd2lwZVVwKHRoaXMpO1xufTtcblxuLyoqXG4gKiBQcmVzc2VzIHRoZSBjb3JyZXNwb25kaW5nIGtleSBjb21iaW5hdGlvbiB0byBtYWtlIHN1cmUgdGhlIGRldmljZSdzIHNjcmVlblxuICogaXMgbm90IHR1cm5lZCBvZmYgYW5kIGlzIGxvY2tlZCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5jeWNsZVdha2VVcCA9IGFzeW5jIGZ1bmN0aW9uIGN5Y2xlV2FrZVVwICgpIHtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1BPV0VSKTtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1dBS0VVUCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2NrTWFuYWdlbWVudE1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9sb2NrbWdtdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
224
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2xvY2ttZ210LmpzIiwibmFtZXMiOlsibG9ja01hbmFnZW1lbnRNZXRob2RzIiwiQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUiIsIkNSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiIsIlNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMiLCJLRVlDT0RFX1BPV0VSIiwiS0VZQ09ERV9XQUtFVVAiLCJISURFX0tFWUJPQVJEX1dBSVRfVElNRSIsImJ1aWxkQ29tbWFuZCIsInZlcmIiLCJvbGRDcmVkZW50aWFsIiwiYXJncyIsImNtZCIsIl8iLCJpc0VtcHR5IiwicHVzaCIsInN3aXBlVXAiLCJhZGIiLCJvdXRwdXQiLCJzaGVsbCIsImRpbWVuc2lvbnNNYXRjaCIsImV4ZWMiLCJFcnJvciIsImRpc3BsYXlXaWR0aCIsInBhcnNlSW50IiwiZGlzcGxheUhlaWdodCIsIngwIiwieTAiLCJ4MSIsInkxIiwibWFwIiwiYyIsIk1hdGgiLCJ0cnVuYyIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJpc0Jvb2xlYW4iLCJfaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsInBhc3NGbGFnIiwiaWduIiwiaW5jbHVkZXMiLCJsb2ciLCJkZWJ1ZyIsInZlcmlmeUxvY2tDcmVkZW50aWFsIiwiY3JlZGVudGlhbCIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dEZvcm1hdCIsIkVYRUNfT1VUUFVUX0ZPUk1BVCIsIkZVTEwiLCJzb21lIiwieCIsImUiLCJtZXNzYWdlIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImlzTG9ja0VuYWJsZWQiLCJ0ZXN0Iiwic2V0TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsImlzSW50ZWdlciIsImlzU2NyZWVuTG9ja2VkIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9MT0dfRFVNUFNZUyIsImR1bXBzeXNGaWxlIiwicGF0aCIsInJlc29sdmUiLCJjd2QiLCJmcyIsIndyaXRlRmlsZSIsImRpc21pc3NLZXlndWFyZCIsImluZm8iLCJjeWNsZVdha2VVcCIsImdldEFwaUxldmVsIiwiaGlkZUtleWJvYXJkIiwiQiIsImRlbGF5IiwiYmFjayIsImtleWV2ZW50Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL2xvY2ttZ210LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7XG4gIGlzU2hvd2luZ0xvY2tzY3JlZW4sIGlzQ3VycmVudEZvY3VzT25LZXlndWFyZCwgaXNTY3JlZW5PbkZ1bGx5LFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgbG9ja01hbmFnZW1lbnRNZXRob2RzID0ge307XG5cbmNvbnN0IENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1IgPSBgQ3JlZGVudGlhbCBjYW4ndCBiZSBudWxsIG9yIGVtcHR5YDtcbmNvbnN0IENSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiA9IGBkaWRuJ3QgbWF0Y2hgO1xuY29uc3QgU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyA9IFsncGFzc3dvcmQnLCAncGluJywgJ3BhdHRlcm4nXTtcbmNvbnN0IEtFWUNPREVfUE9XRVIgPSAyNjtcbmNvbnN0IEtFWUNPREVfV0FLRVVQID0gMjI0OyAvLyB3b3JrcyBvdmVyIEFQSSBMZXZlbCAyMFxuY29uc3QgSElERV9LRVlCT0FSRF9XQUlUX1RJTUUgPSAxMDA7XG5cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZCAodmVyYiwgb2xkQ3JlZGVudGlhbCA9IG51bGwsIC4uLmFyZ3MpIHtcbiAgY29uc3QgY21kID0gWydsb2Nrc2V0dGluZ3MnLCB2ZXJiXTtcbiAgaWYgKCFfLmlzRW1wdHkob2xkQ3JlZGVudGlhbCkpIHtcbiAgICBjbWQucHVzaCgnLS1vbGQnLCBvbGRDcmVkZW50aWFsKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eShhcmdzKSkge1xuICAgIGNtZC5wdXNoKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN3aXBlVXAgKGFkYikge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuc2hlbGwoWydkdW1wc3lzJywgJ3dpbmRvdyddKTtcbiAgY29uc3QgZGltZW5zaW9uc01hdGNoID0gL2luaXQ9KFxcZCspeChcXGQrKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIWRpbWVuc2lvbnNNYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJldHJpZXZlIHRoZSBkaXNwbGF5IHNpemUnKTtcbiAgfVxuICBjb25zdCBkaXNwbGF5V2lkdGggPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMV0sIDEwKTtcbiAgY29uc3QgZGlzcGxheUhlaWdodCA9IHBhcnNlSW50KGRpbWVuc2lvbnNNYXRjaFsyXSwgMTApO1xuICBjb25zdCB4MCA9IGRpc3BsYXlXaWR0aCAvIDI7XG4gIGNvbnN0IHkwID0gZGlzcGxheUhlaWdodCAvIDUgKiA0O1xuICBjb25zdCB4MSA9IHgwO1xuICBjb25zdCB5MSA9IGRpc3BsYXlIZWlnaHQgLyA1O1xuICBhd2FpdCBhZGIuc2hlbGwoW1xuICAgICdpbnB1dCcsICd0b3VjaHNjcmVlbicsICdzd2lwZScsXG4gICAgLi4uKFt4MCwgeTAsIHgxLCB5MV0ubWFwKChjKSA9PiBNYXRoLnRydW5jKGMpKSlcbiAgXSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCB3aXRoIGBsb2Nrc2V0dGluZ3NgXG4gKiBjb21tYW5kIGxpbmUgdG9vbC4gVGhpcyB0b29sIGhhcyBiZWVuIGFkZGVkIHRvIEFuZHJvaWQgdG9vbHNldCBzaW5jZSAgQVBJIDI3IE9yZW9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4gVGhlIHJlc3VsdCBpcyBjYWNoZWQgcGVyIEFEQiBpbnN0YW5jZVxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgKCkge1xuICBpZiAoIV8uaXNCb29sZWFuKHRoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQpKSB7XG4gICAgY29uc3QgcGFzc0ZsYWcgPSAnX19QQVNTX18nO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbYGxvY2tzZXR0aW5ncyBoZWxwICYmIGVjaG8gJHtwYXNzRmxhZ31gXSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIHRoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBfLmluY2x1ZGVzKG91dHB1dCwgcGFzc0ZsYWcpO1xuICAgIGxvZy5kZWJ1ZyhgRXh0ZW5kZWQgbG9jayBzZXR0aW5ncyBtYW5hZ2VtZW50IGlzIGAgK1xuICAgICAgYCR7dGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCA/ICcnIDogJ25vdCAnfXN1cHBvcnRlZGApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjcmVkZW50aWFsIGlzIG1hdGNoZXMgdG8gdGhlIGN1cnJlbnRseSBzZXQgb25lLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gY3JlZGVudGlhbCBbbnVsbF0gVGhlIGNyZWRlbnRpYWwgdmFsdWUuIEl0IGNvdWxkIGJlIGVpdGhlclxuICogcGluLCBwYXNzd29yZCBvciBhIHBhdHRlcm4uIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBudWxsL2VtcHR5IHZhbHVlIGFzc3VtZXMgdGhlIGRldmljZSBoYXMgbm8gbG9jayBjdXJyZW50bHkgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBtYXRjaGVzIHRvIHRoZSBkZXZpY2UncyBvbmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdmVyaWZpY2F0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnZlcmlmeUxvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TG9ja0NyZWRlbnRpYWwgKGNyZWRlbnRpYWwgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCd2ZXJpZnknLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKF8uaW5jbHVkZXMoc3Rkb3V0LCAndmVyaWZpZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoW2BkaWRuJ3QgbWF0Y2hgLCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SXVxuICAgICAgICAuc29tZSgoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgbG9jayBjcmVkZW50aWFsIHZlcmlmaWNhdGlvbiBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgY3VycmVudCBsb2NrIGNyZWRlbnRpYWxzLiBVc3VhbGx5IGl0IHRha2VzIHNldmVyYWwgc2Vjb25kcyBmb3IgYSBkZXZpY2UgdG9cbiAqIHN5bmMgdGhlIGNyZWRlbnRpYWwgc3RhdGUgYWZ0ZXIgdGhpcyBtZXRob2QgcmV0dXJucy5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBvcGVyYXRpb24gZmFjZXMgYW4gdW5leHBlY3RlZCBlcnJvclxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuY2xlYXJMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIGNsZWFyTG9ja0NyZWRlbnRpYWwgKGNyZWRlbnRpYWwgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdjbGVhcicsIGNyZWRlbnRpYWwpLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIVsndXNlciBoYXMgbm8gcGFzc3dvcmQnLCAnTG9jayBjcmVkZW50aWFsIGNsZWFyZWQnXVxuICAgICAgICAuc29tZSgoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBkZXZpY2UgbG9jayBjcmVkZW50aWFsLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBsb2NrZWQgd2l0aCBhIGNyZWRlbnRpYWwgKGVpdGhlciBwaW4gb3IgYSBwYXNzd29yZFxuICogb3IgYSBwYXR0ZXJuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgbG9ja2VkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja0VuYWJsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tFbmFibGVkICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgdGhpcy5zaGVsbChidWlsZENvbW1hbmQoJ2dldC1kaXNhYmxlZCcpLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoL1xcYmZhbHNlXFxiLy50ZXN0KHN0ZG91dClcbiAgICAgICAgfHwgW0NSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl0uc29tZShcbiAgICAgICAgICAoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoL1xcYnRydWVcXGIvLnRlc3Qoc3Rkb3V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjaGVjayBpZiBkZXZpY2UgbG9jayBpcyBlbmFibGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZGV2aWNlIGxvY2suXG4gKlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsVHlwZSBPbmUgb2Y6IHBhc3N3b3JkLCBwaW4sIHBhdHRlcm4uXG4gKiBAcGFyYW0geyFzdHJpbmd9IGNyZWRlbnRpYWwgQSBub24tZW1wdHkgY3JlZGVudGlhbCB2YWx1ZSB0byBiZSBzZXQuXG4gKiBNYWtlIHN1cmUgeW91ciBuZXcgY3JlZGVudGlhbCBtYXRjaGVzIHRvIHRoZSBhY3R1YWwgc3lzdGVtIHNlY3VyaXR5IHJlcXVpcmVtZW50cyxcbiAqIGUuZy4gYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aC4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIEBwYXJhbSB7P3N0cmluZ30gb2xkQ3JlZGVudGlhbCBbbnVsbF0gQW4gb2xkIGNyZWRlbnRpYWwgc3RyaW5nLlxuICogSXQgaXMgb25seSByZXF1aXJlZCB0byBiZSBzZXQgaW4gY2FzZSB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnRcbiAqIGNyZWRlbnRpYWwgcmF0aGVyIHRoYW4gdG8gc2V0IGEgbmV3IG9uZS4gU2V0dGluZyBpdCB0byBhIHdyb25nIHZhbHVlIHdpbGxcbiAqIG1ha2UgdGhpcyBtZXRob2QgdG8gZmFpbCBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgdmVyaWZ5aW5nIGlucHV0IGFyZ3VtZW50cyBvciBzZXR0aW5nXG4gKiB0aGUgY3JlZGVudGlhbFxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuc2V0TG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBzZXRMb2NrQ3JlZGVudGlhbCAoXG4gIGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsLCBvbGRDcmVkZW50aWFsID0gbnVsbCkge1xuICBpZiAoIVNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMuaW5jbHVkZXMoY3JlZGVudGlhbFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgbG9jayBjcmVkZW50aWFsIHR5cGUgJyR7Y3JlZGVudGlhbFR5cGV9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbCB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1NVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVN9YCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShjcmVkZW50aWFsKSAmJiAhXy5pc0ludGVnZXIoY3JlZGVudGlhbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldmljZSBsb2NrIGNyZWRlbnRpYWwgY2Fubm90IGJlIGVtcHR5Jyk7XG4gIH1cbiAgY29uc3QgY21kID0gYnVpbGRDb21tYW5kKGBzZXQtJHtjcmVkZW50aWFsVHlwZX1gLCBvbGRDcmVkZW50aWFsLCBjcmVkZW50aWFsKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgdGhpcy5zaGVsbChjbWQsIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmICghXy5pbmNsdWRlcyhzdGRvdXQsICdzZXQgdG8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2V0dGluZyBvZiBkZXZpY2UgbG9jayAke2NyZWRlbnRpYWxUeXBlfSBjcmVkZW50aWFsIGZhaWxlZC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzY3JlZW4gbG9jayBzdGF0ZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZC5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzU2NyZWVuTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNTY3JlZW5Mb2NrZWQgKCkge1xuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fTE9HX0RVTVBTWVMpIHtcbiAgICAvLyBvcHRpb25hbCBkZWJ1Z2dpbmdcbiAgICAvLyBpZiB0aGUgbWV0aG9kIGlzIG5vdCB3b3JraW5nLCB0dXJuIGl0IG9uIGFuZCBzZW5kIHVzIHRoZSBvdXRwdXRcbiAgICBjb25zdCBkdW1wc3lzRmlsZSA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnZHVtcHN5cy5sb2cnKTtcbiAgICBsb2cuZGVidWcoYFdyaXRpbmcgZHVtcHN5cyBvdXRwdXQgdG8gJHtkdW1wc3lzRmlsZX1gKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZHVtcHN5c0ZpbGUsIHN0ZG91dCk7XG4gIH1cbiAgcmV0dXJuIGlzU2hvd2luZ0xvY2tzY3JlZW4oc3Rkb3V0KSB8fCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQoc3Rkb3V0KSB8fCAhaXNTY3JlZW5PbkZ1bGx5KHN0ZG91dCk7XG59O1xuXG4vKipcbiAqIERpc21pc3NlcyBrZXlndWFyZCBvdmVybGF5LlxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuZGlzbWlzc0tleWd1YXJkID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0tleWd1YXJkICgpIHtcbiAgbG9nLmluZm8oJ1dha2luZyB1cCB0aGUgZGV2aWNlIHRvIGRpc21pc3MgdGhlIGtleWd1YXJkJyk7XG4gIC8vIFNjcmVlbiBvZmYgb25jZSB0byBmb3JjZSBwcmUtaW5wdXR0ZWQgdGV4dCBmaWVsZCBjbGVhbiBhZnRlciB3YWtlLXVwXG4gIC8vIEp1c3Qgc2NyZWVuIG9uIGlmIHRoZSBzY3JlZW4gZGVmYXVsdHMgb2ZmXG4gIGF3YWl0IHRoaXMuY3ljbGVXYWtlVXAoKTtcblxuICBpZiAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID4gMjEpIHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnd20nLCAnZGlzbWlzcy1rZXlndWFyZCddKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddKTtcbiAgaWYgKCFpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQoc3Rkb3V0KSkge1xuICAgIGxvZy5kZWJ1ZygnVGhlIGtleWd1YXJkIHNlZW1zIHRvIGJlIGluYWN0aXZlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTd2lwaW5nIHVwIHRvIGRpc21pc3MgdGhlIGtleWd1YXJkJyk7XG4gIGlmIChhd2FpdCB0aGlzLmhpZGVLZXlib2FyZCgpKSB7XG4gICAgYXdhaXQgQi5kZWxheShISURFX0tFWUJPQVJEX1dBSVRfVElNRSk7XG4gIH1cbiAgbG9nLmRlYnVnKCdEaXNtaXNzaW5nIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgdW5sb2NrIHZpZXcnKTtcbiAgYXdhaXQgdGhpcy5zaGVsbChbJ3NlcnZpY2UnLCAnY2FsbCcsICdub3RpZmljYXRpb24nLCAnMSddKTtcbiAgYXdhaXQgdGhpcy5iYWNrKCk7XG4gIGF3YWl0IHN3aXBlVXAodGhpcyk7XG59O1xuXG4vKipcbiAqIFByZXNzZXMgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGNvbWJpbmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlJ3Mgc2NyZWVuXG4gKiBpcyBub3QgdHVybmVkIG9mZiBhbmQgaXMgbG9ja2VkIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmN5Y2xlV2FrZVVwID0gYXN5bmMgZnVuY3Rpb24gY3ljbGVXYWtlVXAgKCkge1xuICBhd2FpdCB0aGlzLmtleWV2ZW50KEtFWUNPREVfUE9XRVIpO1xuICBhd2FpdCB0aGlzLmtleWV2ZW50KEtFWUNPREVfV0FLRVVQKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRyxFQUE5QjtBQUVBLE1BQU1DLHdDQUF3QyxHQUFJLG1DQUFsRDtBQUNBLE1BQU1DLDhCQUE4QixHQUFJLGNBQXhDO0FBQ0EsTUFBTUMsK0JBQStCLEdBQUcsQ0FBQyxVQUFELEVBQWEsS0FBYixFQUFvQixTQUFwQixDQUF4QztBQUNBLE1BQU1DLGFBQWEsR0FBRyxFQUF0QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxHQUF2QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDOztBQUVBLFNBQVNDLFlBQVQsQ0FBdUJDLElBQXZCLEVBQTZCQyxhQUFhLEdBQUcsSUFBN0MsRUFBbUQsR0FBR0MsSUFBdEQsRUFBNEQ7RUFDMUQsTUFBTUMsR0FBRyxHQUFHLENBQUMsY0FBRCxFQUFpQkgsSUFBakIsQ0FBWjs7RUFDQSxJQUFJLENBQUNJLGdCQUFFQyxPQUFGLENBQVVKLGFBQVYsQ0FBTCxFQUErQjtJQUM3QkUsR0FBRyxDQUFDRyxJQUFKLENBQVMsT0FBVCxFQUFrQkwsYUFBbEI7RUFDRDs7RUFDRCxJQUFJLENBQUNHLGdCQUFFQyxPQUFGLENBQVVILElBQVYsQ0FBTCxFQUFzQjtJQUNwQkMsR0FBRyxDQUFDRyxJQUFKLENBQVMsR0FBR0osSUFBWjtFQUNEOztFQUNELE9BQU9DLEdBQVA7QUFDRDs7QUFFRCxlQUFlSSxPQUFmLENBQXdCQyxHQUF4QixFQUE2QjtFQUMzQixNQUFNQyxNQUFNLEdBQUcsTUFBTUQsR0FBRyxDQUFDRSxLQUFKLENBQVUsQ0FBQyxTQUFELEVBQVksUUFBWixDQUFWLENBQXJCO0VBQ0EsTUFBTUMsZUFBZSxHQUFHLG1CQUFtQkMsSUFBbkIsQ0FBd0JILE1BQXhCLENBQXhCOztFQUNBLElBQUksQ0FBQ0UsZUFBTCxFQUFz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
@@ -359,4 +359,4 @@ var _default = commands;
359
359
  exports.default = _default;require('source-map-support').install();
360
360
 
361
361
 
362
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIk1FRElBX1NDQU5fUkVDRUlWRVIiLCJNRURJQV9TQ0FOX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJMT0NBVElPTl9UUkFDS0VSX1RBRyIsIkdQU19DQUNIRV9SRUZSRVNIRURfTE9HUyIsIkdQU19DT09SRElOQVRFU19QQVRURVJOIiwiY29tbWFuZHMiLCJyZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwIiwib3B0cyIsInByb2Nlc3NFeGlzdHMiLCJsb2ciLCJkZWJ1ZyIsInRpbWVvdXQiLCJzdGFydEFwcCIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJzdG9wQXBwIiwid2FpdEZvckxhdW5jaCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnIiLCJFcnJvciIsInNldFdpZmlTdGF0ZSIsIm9uIiwiaXNFbXVsYXRvciIsInNoZWxsIiwicHJpdmlsZWdlZCIsImdldEFwaUxldmVsIiwic2V0RGF0YVN0YXRlIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJzZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwIiwibGFuZ3VhZ2UiLCJjb3VudHJ5Iiwic2NyaXB0IiwicGFyYW1zIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInB1c2giLCJzZXRHZW9Mb2NhdGlvbiIsImxvY2F0aW9uIiwiZm9ybWF0TG9jYXRpb25WYWx1ZSIsInZhbHVlTmFtZSIsImlzUmVxdWlyZWQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJmbG9hdFZhbHVlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiXyIsImNlaWwiLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsImFsdGl0dWRlIiwic3BlZWQiLCJhcmdzIiwiaXNOaWwiLCJzYXRlbGxpdGVzIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJsZW5ndGgiLCJyZXNldFRlbG5ldEF1dGhUb2tlbiIsImFkYkV4ZWMiLCJtYXAiLCJhcmciLCJyZXBsYWNlIiwiZ2V0R2VvTG9jYXRpb24iLCJvdXRwdXQiLCJzdGRlcnIiLCJzdGRvdXQiLCJtZXNzYWdlIiwibWF0Y2giLCJleGVjIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlIiwidGltZW91dE1zIiwibG9nY2F0TW9uaXRvciIsIm1vbml0b3JpbmdQcm9taXNlIiwiY21kIiwiYWRiIiwiZGVmYXVsdEFyZ3MiLCJTdWJQcm9jZXNzIiwicGF0aCIsInRpbWVvdXRFcnJvck1zZyIsIkIiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2V0VGltZW91dCIsImV2dCIsImxpbmVzIiwic29tZSIsImxpbmUiLCJ4IiwiaW5jbHVkZXMiLCJzdGFydCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJpc1J1bm5pbmciLCJzdG9wIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FBSSxHQUFFVixrQkFBbUIsbUJBQS9DO0FBQ0EsTUFBTVcsaUJBQWlCLEdBQUksR0FBRVgsa0JBQW1CLGtDQUFoRDtBQUNBLE1BQU1ZLHlCQUF5QixHQUFJLEdBQUVaLGtCQUFtQixXQUF4RDtBQUNBLE1BQU1hLGtCQUFrQixHQUFJLEdBQUViLGtC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NEJELElBQUksQ0FBQ3RELE1BQWpDLEVBQXlDLElBQXpDLENBQStDLEVBQW5FOztBQUNBLE1BQUksQ0FBQ3NELElBQUwsRUFBVztBQUNULFdBQU8sS0FBUDtBQUNEOztBQUNELFFBQU0sS0FBS1IsZUFBTCxDQUNKM0csV0FESSxFQUNTLFlBQVksTUFBTSxLQUFLcUgsU0FBTCxDQUFlQyxVQUFLQyxNQUFMLENBQVlKLElBQVosQ0FBZixDQUQzQixDQUFOO0FBR0EsU0FBTyxJQUFQO0FBQ0QsQ0FkRDs7QUF3QkE3RyxRQUFRLENBQUNrSCxTQUFULEdBQXFCLGVBQWVBLFNBQWYsQ0FBMEJDLFdBQTFCLEVBQXVDO0FBQzFEL0csa0JBQUlDLEtBQUosQ0FBVyxhQUFZOEcsV0FBWSxtQkFBbkM7O0FBQ0EsUUFBTXJELE1BQU0sR0FBRyxNQUFNLEtBQUt6QyxLQUFMLENBQVcsQ0FDOUIsSUFEOEIsRUFDeEIsV0FEd0IsRUFFOUIsSUFGOEIsRUFFeEI5QixtQkFGd0IsRUFHOUIsSUFIOEIsRUFHeEJDLGlCQUh3QixFQUk5QixNQUo4QixFQUl0QixNQUpzQixFQUlkMkgsV0FKYyxDQUFYLENBQXJCOztBQU1BLE1BQUksQ0FBQ3ZFLGdCQUFFNkMsUUFBRixDQUFXM0IsTUFBWCxFQUFtQixXQUFuQixDQUFMLEVBQXNDO0FBQ3BDLFVBQU0sSUFBSTdDLEtBQUosQ0FBVyxpQ0FBZ0NrRyxXQUFZLEtBQTdDLEdBQ2Isa0RBREcsQ0FBTjtBQUVEO0FBQ0YsQ0FaRDs7ZUFjZW5ILFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0c2VydmljZScsXG4gICAgICAnLWUnLCAnbG9uZ2l0dWRlJywgbG9uZ2l0dWRlLFxuICAgICAgJy1lJywgJ2xhdGl0dWRlJywgbGF0aXR1ZGUsXG4gICAgXTtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnYWx0aXR1ZGUnLCBhbHRpdHVkZSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNwZWVkKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdzcGVlZCcsIHNwZWVkKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKExPQ0FUSU9OX1NFUlZJQ0UpO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGNhY2hlZCBHUFMgbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTi5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGxvY2F0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgbGF0aXR1ZGU6IG1hdGNoWzFdLFxuICAgIGxvbmdpdHVkZTogbWF0Y2hbMl0sXG4gICAgYWx0aXR1ZGU6IG1hdGNoWzNdLFxuICB9O1xuICBsb2cuZGVidWcoYEdvdCBnZW8gY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobG9jYXRpb24pfWApO1xuICByZXR1cm4gbG9jYXRpb247XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGFzeW5jIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlLlxuICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhc1xuICogR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkLiBJbiBjYXNlIHRoZSB2YW5pbGxhXG4gKiBMb2NhdGlvbk1hbmFnZXIgaXMgdXNlZCB0aGUgZGV2aWNlIEFQSSBsZXZlbCBtdXN0IGJlIGF0XG4gKiB2ZXJzaW9uIDMwIChBbmRyb2lkIFIpIG9yIGhpZ2hlci5cbiAqXG4gKiBAcGFyYW0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgR1BTIGNhY2hlIGNhbm5vdCBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbW1hbmRzLnJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIGxldCBsb2djYXRNb25pdG9yO1xuICBsZXQgbW9uaXRvcmluZ1Byb21pc2U7XG5cbiAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICdsb2djYXQnLCAnLXMnLCBMT0NBVElPTl9UUkFDS0VSX1RBRyxcbiAgICBdO1xuICAgIGxvZ2NhdE1vbml0b3IgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnJvck1zZyA9IGBUaGUgR1BTIGNhY2hlIGhhcyBub3QgYmVlbiByZWZyZXNoZWQgd2l0aGluICR7dGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBBcHBpdW0gU2V0dGluZ3MgYXBwIGluc3RhbGxlZCBhbmQgcnVubmluZy4gYCArXG4gICAgICBgQWxzbywgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQgb3IgaXMgcnVubmluZyBgICtcbiAgICAgIGBBbmRyb2lkIDEwKyBvdGhlcndpc2UuYDtcbiAgICBtb25pdG9yaW5nUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aW1lb3V0RXJyb3JNc2cpKSwgdGltZW91dE1zKTtcblxuICAgICAgbG9nY2F0TW9uaXRvci5vbignZXhpdCcsICgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSkpO1xuICAgICAgWydsaW5lcy1zdGRlcnInLCAnbGluZXMtc3Rkb3V0J10ubWFwKChldnQpID0+IGxvZ2NhdE1vbml0b3Iub24oZXZ0LCAobGluZXMpID0+IHtcbiAgICAgICAgaWYgKGxpbmVzLnNvbWUoKGxpbmUpID0+IEdQU19DQUNIRV9SRUZSRVNIRURfTE9HUy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBhd2FpdCBsb2djYXRNb25pdG9yLnN0YXJ0KDApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1uJywgTE9DQVRJT05fUkVDRUlWRVIsXG4gICAgICAnLWEnLCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OLFxuICAgICAgJy0tZXonLCAnZm9yY2VVcGRhdGUnLCAndHJ1ZScsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZnJlc2ggdGhlIEdQUyBjYWNoZSBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlIGFuZCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbnMuIEFsc28gdGhlIGxvY2F0aW9uIGAgK1xuICAgICAgYHNlcnZpY2VzIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAobG9nY2F0TW9uaXRvciAmJiBtb25pdG9yaW5nUHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGltZW91dE1zfW1zIGZvciB0aGUgR1BTIGNhY2hlIHRvIGJlIHJlZnJlc2hlZGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb25pdG9yaW5nUHJvbWlzZTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgR1BTIGNhY2hlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobG9nY2F0TW9uaXRvci5pc1J1bm5pbmcpIHtcbiAgICAgICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUgaGFzIGJlZW4gc2VudC4gU2tpcHBpbmcgd2FpdGluZyBmb3IgaXRzIHJlc3VsdC4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGRldmljZSdzIGNsaXBib2FyZC5cbiAqIFRoZSBtZXRob2Qgd29ya3MgZm9yIEFuZHJvaWQgYmVsb3cgYW5kIGFib3ZlIDI5LlxuICogSXQgdGVtb3JhcmlseSBlbmZvcmNlcyB0aGUgSU1FIHNldHRpbmcgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZFxuICogc2VjdXJpdHkgbGltaXRhdGlvbnMgaWYgbmVlZGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBBcHBpdW0gU2V0dGluZ3Mgdi4gMi4xNSsgaXMgaW5zdGFsbGVkXG4gKiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIG1haW4gY2xpcGJvYXJkIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjbGlwYm9hcmQgaXMgZW1wdHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGdldHRpbmcgdGhlXG4gKiBjbGlwYm9hcmQgY29udGFudFxuICovXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgdGhlIGNsaXBib2FyZCBjb250ZW50Jyk7XG4gIGNvbnN0IHJldHJpZXZlQ2xpcGJvYXJkID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgQ0xJUEJPQVJEX1JFQ0VJVkVSLFxuICAgICctYScsIENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID49IDI5KVxuICAgICAgPyAoYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSwgcmV0cmlldmVDbGlwYm9hcmQpKVxuICAgICAgOiAoYXdhaXQgcmV0cmlldmVDbGlwYm9hcmQoKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGNsaXBib2FyZCBjb250ZW50IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKFteXCJdKilcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBjbGlib2FyZCBjb250ZW50IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICByZXR1cm4gXy50cmltKG1hdGNoWzFdKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIEFuZHJvaWQgbm90aWZpY2F0aW9ucyB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIEFwcGl1bSBTZXR0aW5ncyBhcHAgaXRzZWxmIG11c3QgYmUgKm1hbnVhbGx5KiBncmFudGVkIHRvIGFjY2VzcyBub3RpZmljYXRpb25zXG4gKiB1bmRlciBkZXZpY2UgU2V0dGluZ3MgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGZlYXR1cmUgd29ya2luZy5cbiAqIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIga2VlcHMgYWxsIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9ucyBwbHVzXG4gKiBub3RpZmljYXRpb25zIHRoYXQgYXBwZWFyZWQgd2hpbGUgaXQgd2FzIHJ1bm5pbmcgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAqIGJ1dCBubyBtb3JlIHRoYW4gMTAwIGl0ZW1zIGFsdG9nZXRoZXIuIE5ld2x5IGFwcGVhcmVkIG5vdGlmaWNhdGlvbnNcbiAqIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIG5vdGlmaWNhdGlvbnMgYXJyYXkuXG4gKiBUaGUgYGlzUmVtb3ZlZGAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGZvciBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvblxuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uaHRtbFxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCB0aGVpciB2YWx1ZXMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcInN0YXR1c0Jhck5vdGlmaWNhdGlvbnNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpc0dyb3VwXCI6ZmFsc2UsXG4gKiAgICAgICBcInBhY2thZ2VOYW1lXCI6XCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICAgIFwiaXNDbGVhcmFibGVcIjpmYWxzZSxcbiAqICAgICAgIFwiaXNPbmdvaW5nXCI6dHJ1ZSxcbiAqICAgICAgIFwiaWRcIjoxLFxuICogICAgICAgXCJ0YWdcIjpudWxsLFxuICogICAgICAgXCJub3RpZmljYXRpb25cIjp7XG4gKiAgICAgICAgIFwidGl0bGVcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RpdGxlXCI6XCJBcHBpdW0gU2V0dGluZ3NcIixcbiAqICAgICAgICAgXCJ0ZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUZXh0XCI6XCJLZWVwIHRoaXMgc2VydmljZSBydW5uaW5nLCBzbyBBcHBpdW0gZm9yIEFuZHJvaWQgY2FuIHByb3Blcmx5IGludGVyYWN0IHdpdGggc2V2ZXJhbCBzeXN0ZW0gQVBJc1wiLFxuICogICAgICAgICBcInRpY2tlclRleHRcIjpudWxsLFxuICogICAgICAgICBcInN1YlRleHRcIjpudWxsLFxuICogICAgICAgICBcImluZm9UZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJ0ZW1wbGF0ZVwiOlwiYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZVwiXG4gKiAgICAgICB9LFxuICogICAgICAgXCJ1c2VySGFuZGxlXCI6MCxcbiAqICAgICAgIFwiZ3JvdXBLZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJvdmVycmlkZUdyb3VwS2V5XCI6bnVsbCxcbiAqICAgICAgIFwicG9zdFRpbWVcIjoxNTc2ODUzNTE4ODUwLFxuICogICAgICAgXCJrZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJpc1JlbW92ZWRcIjpmYWxzZVxuICogICAgIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICovXG5jb21tYW5kcy5nZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBub3RpZmljYXRpb25zJyk7XG4gIC8vIFNvbWVob3cgcHJvdmlkaW5nIHRoZSBgLW5gIGFyZyB0byB0aGUgYGFtYCB1bmRlcm5lYXRoXG4gIC8vIHJlbmRlcnMgdGhlIGJyb2FkY2FzdCB0byBmYWlsIGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlXG4gIC8vIEFwcGl1bSBTZXR0aW5ncyBhcHAuIFRoaXMgb25seSBoYXBwZW5zIHRvIHRoZSBub3RpZmljYXRpb25zXG4gIC8vIHJlY2VpdmVyXG4gIGF3YWl0IHRoaXMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ25vdGlmaWNhdGlvbnMnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdGhlIG1vc3QgcmVjZW50IFNNU1xuICogcHJvcGVydGllcyBsaXN0IHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogTWVzc2FnZXMgYXJlIHNvcnRlZCBieSBkYXRlIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcIml0ZW1zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjJcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2NDIyMjAzXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlMlxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjFcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2MzgyNzQwXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ0b3RhbFwiOjJcbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBTTVMgbGlzdFxuICovXG5jb21tYW5kcy5nZXRTbXNMaXN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U21zTGlzdCAob3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVjZW50IFNNUyBtZXNzYWdlcycpO1xuICBjb25zdCBhcmdzID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIFNNU19MSVNUX1JFQ0VJVkVSLFxuICAgICctYScsIFNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF07XG4gIGlmIChvcHRzLm1heCkge1xuICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXgnLCBvcHRzLm1heCk7XG4gIH1cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBTTVMgbGlzdCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnU01TIGxpc3QnKTtcbn07XG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqL1xuY29tbWFuZHMudHlwZVVuaWNvZGUgPSBhc3luYyBmdW5jdGlvbiB0eXBlVW5pY29kZSAodGV4dCkge1xuICBpZiAoXy5pc05pbCh0ZXh0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRleHQgPSBgJHt0ZXh0fWA7XG4gIGxvZy5kZWJ1ZyhgVHlwaW5nICR7dXRpbC5wbHVyYWxpemUoJ2NoYXJhY3RlcicsIHRleHQubGVuZ3RoLCB0cnVlKX1gKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KFxuICAgIFVOSUNPREVfSU1FLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlucHV0VGV4dChpbWFwLmVuY29kZSh0ZXh0KSlcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHJlY3Vyc2l2ZSBtZWRpYSBzY2FuIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEFsbCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCBpdGVtcyBhcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGRldmljZSdzXG4gKiBtZWRpYSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBGaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIGJ5IHNjYW5uaW5nLlxuICovXG5jb21tYW5kcy5zY2FuTWVkaWEgPSBhc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGRlc3RpbmF0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgU2Nhbm5pbmcgJyR7ZGVzdGluYXRpb259JyBmb3IgbWVkaWEgZmlsZXNgKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgTUVESUFfU0NBTl9SRUNFSVZFUixcbiAgICAnLWEnLCBNRURJQV9TQ0FOX0FDVElPTixcbiAgICAnLS1lcycsICdwYXRoJywgZGVzdGluYXRpb25cbiAgXSk7XG4gIGlmICghXy5pbmNsdWRlcyhvdXRwdXQsICdyZXN1bHQ9LTEnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWVkaWEgY291bGQgYmUgc2Nhbm5lZCBhdCAnJHtkZXN0aW5hdGlvbn0nLiBgICtcbiAgICAgIGBDaGVjayB0aGUgZGV2aWNlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
362
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyIsIm5hbWVzIjpbIlNFVFRJTkdTX0hFTFBFUl9JRCIsIlNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZIiwiV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04iLCJEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OIiwiTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIiLCJMT0NBTEVfU0VUVElOR19BQ1RJT04iLCJMT0NBVElPTl9TRVJWSUNFIiwiTE9DQVRJT05fUkVDRUlWRVIiLCJMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OIiwiQ0xJUEJPQVJEX1JFQ0VJVkVSIiwiQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04iLCJOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04iLCJTTVNfTElTVF9SRUNFSVZFUiIsIlNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04iLCJNRURJQV9TQ0FOX1JFQ0VJVkVSIiwiTUVESUFfU0NBTl9BQ1RJT04iLCJBUFBJVU1fSU1FIiwiVU5JQ09ERV9JTUUiLCJERUZBVUxUX1NBVEVMTElURVNfQ09VTlQiLCJERUZBVUxUX0FMVElUVURFIiwiTE9DQVRJT05fVFJBQ0tFUl9UQUciLCJHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MiLCJHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiIsImNvbW1hbmRzIiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsIm9wdHMiLCJwcm9jZXNzRXhpc3RzIiwibG9nIiwiZGVidWciLCJ0aW1lb3V0Iiwic3RhcnRBcHAiLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsIndhaXRGb3JMYXVuY2giLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyIiwiRXJyb3IiLCJzZXRXaWZpU3RhdGUiLCJvbiIsImlzRW11bGF0b3IiLCJzaGVsbCIsInByaXZpbGVnZWQiLCJnZXRBcGlMZXZlbCIsInNldERhdGFTdGF0ZSIsInNldEFuaW1hdGlvblN0YXRlIiwic2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCIsImxhbmd1YWdlIiwiY291bnRyeSIsInNjcmlwdCIsInBhcmFtcyIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJwdXNoIiwic2V0R2VvTG9jYXRpb24iLCJsb2NhdGlvbiIsImZvcm1hdExvY2F0aW9uVmFsdWUiLCJ2YWx1ZU5hbWUiLCJpc1JlcXVpcmVkIiwidXRpbCIsImhhc1ZhbHVlIiwiZmxvYXRWYWx1ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIl8iLCJjZWlsIiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJhbHRpdHVkZSIsInNwZWVkIiwiYXJncyIsImlzTmlsIiwic2F0ZWxsaXRlcyIsInBhcnNlSW50IiwiTnVtYmVyIiwibGVuZ3RoIiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJhZGJFeGVjIiwibWFwIiwiYXJnIiwicmVwbGFjZSIsImdldEdlb0xvY2F0aW9uIiwib3V0cHV0Iiwic3RkZXJyIiwic3Rkb3V0IiwibWVzc2FnZSIsIm1hdGNoIiwiZXhlYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWZyZXNoR2VvTG9jYXRpb25DYWNoZSIsInRpbWVvdXRNcyIsImxvZ2NhdE1vbml0b3IiLCJtb25pdG9yaW5nUHJvbWlzZSIsImNtZCIsImFkYiIsImRlZmF1bHRBcmdzIiwiU3ViUHJvY2VzcyIsInBhdGgiLCJ0aW1lb3V0RXJyb3JNc2ciLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJldnQiLCJsaW5lcyIsInNvbWUiLCJsaW5lIiwieCIsImluY2x1ZGVzIiwic3RhcnQiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaXNSdW5uaW5nIiwic3RvcCIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJydW5JbkltZUNvbnRleHQiLCJnZXRDbGlwYm9hcmQiLCJyZXRyaWV2ZUNsaXBib2FyZCIsInRyaW0iLCJnZXROb3RpZmljYXRpb25zIiwiZ2V0U21zTGlzdCIsIm1heCIsInR5cGVVbmljb2RlIiwidGV4dCIsInBsdXJhbGl6ZSIsImlucHV0VGV4dCIsImltYXAiLCJlbmNvZGUiLCJzY2FuTWVkaWEiLCJkZXN0aW5hdGlvbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VKc29uRGF0YSB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgaW1hcCB9IGZyb20gJ3V0ZjcnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkgPSAnLlNldHRpbmdzJztcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLldpRmlDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ud2lmaWA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5EYXRhQ29ubmVjdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmRhdGFfY29ubmVjdGlvbmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5BbmltYXRpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5hbmltYXRpb25gO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYWxlU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IExPQ0FMRV9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYWxlYDtcbmNvbnN0IExPQ0FUSU9OX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Mb2NhdGlvblNlcnZpY2VgO1xuY29uc3QgTE9DQVRJT05fUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYXRpb25JbmZvUmVjZWl2ZXJgO1xuY29uc3QgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYXRpb25gO1xuY29uc3QgQ0xJUEJPQVJEX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkNsaXBib2FyZFJlY2VpdmVyYDtcbmNvbnN0IENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5jbGlwYm9hcmQuZ2V0YDtcbmNvbnN0IE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubm90aWZpY2F0aW9uc2A7XG5jb25zdCBTTVNfTElTVF9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5TbXNSZWFkZXJgO1xuY29uc3QgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc21zLnJlYWRgO1xuY29uc3QgTUVESUFfU0NBTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5NZWRpYVNjYW5uZXJSZWNlaXZlcmA7XG5jb25zdCBNRURJQV9TQ0FOX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc2Nhbl9tZWRpYWA7XG5jb25zdCBBUFBJVU1fSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8uQXBwaXVtSU1FYDtcbmNvbnN0IFVOSUNPREVfSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8uVW5pY29kZUlNRWA7XG5jb25zdCBERUZBVUxUX1NBVEVMTElURVNfQ09VTlQgPSAxMjtcbmNvbnN0IERFRkFVTFRfQUxUSVRVREUgPSAwLjA7XG5jb25zdCBMT0NBVElPTl9UUkFDS0VSX1RBRyA9ICdMb2NhdGlvblRyYWNrZXInO1xuY29uc3QgR1BTX0NBQ0hFX1JFRlJFU0hFRF9MT0dTID0gW1xuICAnVGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIFBsYXkgU2VydmljZXMnLFxuICAnVGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIExvY2F0aW9uIE1hbmFnZXInXG5dO1xuXG5jb25zdCBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiA9IC9kYXRhPVwiKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcIi87XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIGFwcCBoYXMgc3RhcnRlZFxuICovXG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuICogYW5kIHN0YXJ0cyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge1NldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBBcHBpdW0gU2V0dGluZ3MgaGFzIGZhaWxlZCB0byBzdGFydFxuICogQHJldHVybnMge0FEQn0gc2VsZiBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAqL1xuY29tbWFuZHMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3RhcnRpbmcgQXBwaXVtIFNldHRpbmdzIGFwcCcpO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnN0YXJ0QXBwKHtcbiAgICBwa2c6IFNFVFRJTkdTX0hFTFBFUl9JRCxcbiAgICBhY3Rpdml0eTogU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFksXG4gICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgIHdhaXRGb3JMYXVuY2g6IGZhbHNlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIFNldHRpbmdzIGFwcCBpcyBub3QgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIFdpRmkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICd3aWZpJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIERhdGEgdHJhbnNmZXIgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldERhdGFTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldERhdGFTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICdkYXRhJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIGFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKiBBbmltYXRpb24gb24gdGhlIGRldmljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHByb3BlcnRpZXM6XG4gKiBbQU5JTUFUT1JfRFVSQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFfSxcbiAqIFtUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEV9LFxuICogW1dJTkRPV19BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1dJTkRPV19BTklNQVRJT05fU0NBTEV9LlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgdGhpcyBwcm9wZXJ0aWVzIHRvIDAuMCB0byBkaXNhYmxlICgxLjAgdG8gZW5hYmxlKSBhbmltYXRpb24uXG4gKlxuICogVHVybmluZyBvZmYgYW5pbWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICogYW5kIHJlZHVjZSB0ZXN0cyBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKi9cbmNvbW1hbmRzLnNldEFuaW1hdGlvblN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0QW5pbWF0aW9uU3RhdGUgKG9uKSB7XG4gIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIEFOSU1BVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gIF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGxvY2FsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuIERvbid0IG5lZWQgdG8gcmVib290IHRoZSBkZXZpY2UgYWZ0ZXIgY2hhbmdpbmcgdGhlIGxvY2FsZS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYW4gYXJiaXRyYXJ5IGxvY2FsZSBmb2xsb3dpbmc6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCNMb2NhbGUoamF2YS5sYW5nLlN0cmluZywlMjBqYXZhLmxhbmcuU3RyaW5nKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBlLmcuIGVuLCBqYVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBlLmcuIFVTLCBKUFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIGUuZy4gSGFucyBpbiBgemgtSGFucy1DTmBcbiAqL1xuY29tbWFuZHMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBMT0NBTEVfU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnbGFuZycsIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCksXG4gICAgJy0tZXMnLCAnY291bnRyeScsIGNvdW50cnkudG9VcHBlckNhc2UoKVxuICBdO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgICBwYXJhbXMucHVzaCgnLS1lcycsICdzY3JpcHQnLCBzY3JpcHQpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zaGVsbChwYXJhbXMpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2F0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxvbmdpdHVkZSAtIFZhbGlkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbGF0aXR1ZGUgLSBWYWxpZCBsYXRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGFsdGl0dWRlIC0gVmFsaWQgYWx0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzYXRlbGxpdGVzIFsxMl0gLSBOdW1iZXIgb2Ygc2F0ZWxsaXRlcyBiZWluZyB0cmFja2VkICgxLTEyKS5cbiAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiByZWFsIGRldmljZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzcGVlZCAtIFZhbGlkIHNwZWVkIHZhbHVlLlxuICogU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLjAgbWV0ZXJzL3NlY29uZCBmb3IgcmVhbCBkZXZpY2VzIG9yIDAuMCBrbm90c1xuICogZm9yIGVtdWxhdG9ycy5cbiAqL1xuXG4vKipcbiAqIEVtdWxhdGUgZ2VvbG9jYXRpb24gY29vcmRpbmF0ZXMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7TG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24gb2JqZWN0LiBUaGUgYGFsdGl0dWRlYCB2YWx1ZSBpcyBpZ25vcmVkXG4gKiB3aGlsZSBtb2NraW5nIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgY29uc3QgZm9ybWF0TG9jYXRpb25WYWx1ZSA9ICh2YWx1ZU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKGxvY2F0aW9uW3ZhbHVlTmFtZV0pKSB7XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQobG9jYXRpb25bdmFsdWVOYW1lXSk7XG4gICAgaWYgKCFpc05hTihmbG9hdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke18uY2VpbChmbG9hdFZhbHVlLCA1KX1gO1xuICAgIH1cbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBmbG9hdCBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7bG9jYXRpb25bdmFsdWVOYW1lXX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGxvbmdpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xvbmdpdHVkZScpO1xuICBjb25zdCBsYXRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xhdGl0dWRlJyk7XG4gIGNvbnN0IGFsdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnYWx0aXR1ZGUnLCBmYWxzZSk7XG4gIGNvbnN0IHNwZWVkID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnc3BlZWQnLCBmYWxzZSk7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgY29uc3QgYXJncyA9IFtsb25naXR1ZGUsIGxhdGl0dWRlXTtcbiAgICBpZiAoIV8uaXNOaWwoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBjb25zdCBzYXRlbGxpdGVzID0gcGFyc2VJbnQobG9jYXRpb24uc2F0ZWxsaXRlcywgMTApO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHNhdGVsbGl0ZXMpICYmIHNhdGVsbGl0ZXMgPiAwICYmIHNhdGVsbGl0ZXMgPD0gMTIpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goYCR7c2F0ZWxsaXRlc31gKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzTmlsKHNwZWVkKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfU0FURUxMSVRFU19DT1VOVH1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChzcGVlZCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLmFyZ3NdKTtcbiAgICAvLyBBIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwNjE4MFxuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uKGFyZ3MubWFwKChhcmcpID0+IGFyZy5yZXBsYWNlKCcuJywgJywnKSkpXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBjYWNoZWQgR1BTIGxvY2F0aW9uIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtMb2NhdGlvbn0gVGhlIGN1cnJlbnQgbG9jYXRpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBsb2NhdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkXG4gKi9cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLW4nLCBMT0NBVElPTl9SRUNFSVZFUixcbiAgICAgICctYScsIExPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGdlbyBjb29yZGluYXRlcyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUgYW5kIGhhcyBsb2NhdGlvbiBwZXJtaXNzaW9ucy4gQWxzbyB0aGUgbG9jYXRpb24gYCArXG4gICAgICBgc2VydmljZXMgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBkZXZpY2UuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5zdGRlcnIgfHwgZXJyLnN0ZG91dCB8fCBlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gR1BTX0NPT1JESU5BVEVTX1BBVFRFUk4uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhbiBhc3luYyByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIEdQUyBjYWNoZS5cbiAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXNcbiAqIEdvb2dsZSBQbGF5IFNlcnZpY2VzIGluc3RhbGxlZC4gSW4gY2FzZSB0aGUgdmFuaWxsYVxuICogTG9jYXRpb25NYW5hZ2VyIGlzIHVzZWQgdGhlIGRldmljZSBBUEkgbGV2ZWwgbXVzdCBiZSBhdFxuICogdmVyc2lvbiAzMCAoQW5kcm9pZCBSKSBvciBoaWdoZXIuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRNcyBbMjAwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIGJsb2NrIHVudGlsIEdQUyBjYWNoZSBpcyByZWZyZXNoZWQuIFByb3ZpZGluZyB6ZXJvIG9yIGEgbmVnYXRpdmVcbiAqIHZhbHVlIHRvIGl0IHNraXBzIHdhaXRpbmcgY29tcGxldGVseS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIEdQUyBjYWNoZSBjYW5ub3QgYmUgcmVmcmVzaGVkLlxuICovXG5jb21tYW5kcy5yZWZyZXNoR2VvTG9jYXRpb25DYWNoZSA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlICh0aW1lb3V0TXMgPSAyMDAwMCkge1xuICBsZXQgbG9nY2F0TW9uaXRvcjtcbiAgbGV0IG1vbml0b3JpbmdQcm9taXNlO1xuXG4gIGlmICh0aW1lb3V0TXMgPiAwKSB7XG4gICAgY29uc3QgY21kID0gW1xuICAgICAgLi4udGhpcy5hZGIuZGVmYXVsdEFyZ3MsXG4gICAgICAnbG9nY2F0JywgJy1zJywgTE9DQVRJT05fVFJBQ0tFUl9UQUcsXG4gICAgXTtcbiAgICBsb2djYXRNb25pdG9yID0gbmV3IFN1YlByb2Nlc3ModGhpcy5hZGIucGF0aCwgY21kKTtcbiAgICBjb25zdCB0aW1lb3V0RXJyb3JNc2cgPSBgVGhlIEdQUyBjYWNoZSBoYXMgbm90IGJlZW4gcmVmcmVzaGVkIHdpdGhpbiAke3RpbWVvdXRNc31tcyB0aW1lb3V0LiBgICtcbiAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXMgQXBwaXVtIFNldHRpbmdzIGFwcCBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuIGAgK1xuICAgICAgYEFsc28sIGl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGRldmljZSBoYXMgR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkIG9yIGlzIHJ1bm5pbmcgYCArXG4gICAgICBgQW5kcm9pZCAxMCsgb3RoZXJ3aXNlLmA7XG4gICAgbW9uaXRvcmluZ1Byb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSksIHRpbWVvdXRNcyk7XG5cbiAgICAgIGxvZ2NhdE1vbml0b3Iub24oJ2V4aXQnLCAoKSA9PiByZWplY3QobmV3IEVycm9yKHRpbWVvdXRFcnJvck1zZykpKTtcbiAgICAgIFsnbGluZXMtc3RkZXJyJywgJ2xpbmVzLXN0ZG91dCddLm1hcCgoZXZ0KSA9PiBsb2djYXRNb25pdG9yLm9uKGV2dCwgKGxpbmVzKSA9PiB7XG4gICAgICAgIGlmIChsaW5lcy5zb21lKChsaW5lKSA9PiBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1Muc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdGFydCgwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICAgICctLWV6JywgJ2ZvcmNlVXBkYXRlJywgJ3RydWUnLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWZyZXNoIHRoZSBHUFMgY2FjaGUgb24gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKGxvZ2NhdE1vbml0b3IgJiYgbW9uaXRvcmluZ1Byb21pc2UpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXRNc31tcyBmb3IgdGhlIEdQUyBjYWNoZSB0byBiZSByZWZyZXNoZWRgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbW9uaXRvcmluZ1Byb21pc2U7XG4gICAgICBsb2cuaW5mbyhgVGhlIEdQUyBjYWNoZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVmcmVzaGVkIGFmdGVyIGAgK1xuICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGxvZ2NhdE1vbml0b3IuaXNSdW5uaW5nKSB7XG4gICAgICAgIGF3YWl0IGxvZ2NhdE1vbml0b3Iuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuaW5mbygnVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlIGhhcyBiZWVuIHNlbnQuIFNraXBwaW5nIHdhaXRpbmcgZm9yIGl0cyByZXN1bHQuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIGdpdmVuIGVkaXRvciBhY3Rpb24gb24gdGhlIGZvY3VzZWQgaW5wdXQgZmllbGQuXG4gKiBUaGlzIG1ldGhvZCByZXF1aXJlcyBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLlxuICogTm8gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGFjdGlvbi5cbiAqIFlvdSBtdXN0IGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0IGlmIHNvbWV0aGluZyBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBhY3Rpb24gLSBFaXRoZXIgYWN0aW9uIGNvZGUgb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgYXJlIHN1cHBvcnRlZDogYG5vcm1hbCwgdW5zcGVjaWZpZWQsIG5vbmUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLCBzZWFyY2gsIHNlbmQsIG5leHQsIGRvbmUsIHByZXZpb3VzYFxuICovXG5jb21tYW5kcy5wZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUVkaXRvckFjdGlvbiAoYWN0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBlZGl0b3IgYWN0aW9uOiAke2FjdGlvbn1gKTtcbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSxcbiAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGAvJHthY3Rpb259L2BdKSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBkZXZpY2UncyBjbGlwYm9hcmQuXG4gKiBUaGUgbWV0aG9kIHdvcmtzIGZvciBBbmRyb2lkIGJlbG93IGFuZCBhYm92ZSAyOS5cbiAqIEl0IHRlbW9yYXJpbHkgZW5mb3JjZXMgdGhlIElNRSBzZXR0aW5nIGluIG9yZGVyIHRvIHdvcmthcm91bmRcbiAqIHNlY3VyaXR5IGxpbWl0YXRpb25zIGlmIG5lZWRlZC5cbiAqIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgQXBwaXVtIFNldHRpbmdzIHYuIDIuMTUrIGlzIGluc3RhbGxlZFxuICogb24gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBtYWluIGNsaXBib2FyZCBhc1xuICogYmFzZTY0LWVuY29kZWQgc3RyaW5nIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY2xpcGJvYXJkIGlzIGVtcHR5XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSBnZXR0aW5nIHRoZVxuICogY2xpcGJvYXJkIGNvbnRhbnRcbiAqL1xuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIHRoZSBjbGlwYm9hcmQgY29udGVudCcpO1xuICBjb25zdCByZXRyaWV2ZUNsaXBib2FyZCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIENMSVBCT0FSRF9SRUNFSVZFUixcbiAgICAnLWEnLCBDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTixcbiAgXSk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+PSAyOSlcbiAgICAgID8gKGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KEFQUElVTV9JTUUsIHJldHJpZXZlQ2xpcGJvYXJkKSlcbiAgICAgIDogKGF3YWl0IHJldHJpZXZlQ2xpcGJvYXJkKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSB0aGUgY3VycmVudCBjbGlwYm9hcmQgY29udGVudCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSAvZGF0YT1cIihbXlwiXSopXCIvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBhY3R1YWwgY2xpYm9hcmQgY29udGVudCBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgcmV0dXJuIF8udHJpbShtYXRjaFsxXSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBBbmRyb2lkIG5vdGlmaWNhdGlvbnMgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBBcHBpdW0gU2V0dGluZ3MgYXBwIGl0c2VsZiBtdXN0IGJlICptYW51YWxseSogZ3JhbnRlZCB0byBhY2Nlc3Mgbm90aWZpY2F0aW9uc1xuICogdW5kZXIgZGV2aWNlIFNldHRpbmdzIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBmZWF0dXJlIHdvcmtpbmcuXG4gKiBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIGtlZXBzIGFsbCB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbnMgcGx1c1xuICogbm90aWZpY2F0aW9ucyB0aGF0IGFwcGVhcmVkIHdoaWxlIGl0IHdhcyBydW5uaW5nIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gKiBidXQgbm8gbW9yZSB0aGFuIDEwMCBpdGVtcyBhbHRvZ2V0aGVyLiBOZXdseSBhcHBlYXJlZCBub3RpZmljYXRpb25zXG4gKiBhcmUgYWx3YXlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBub3RpZmljYXRpb25zIGFycmF5LlxuICogVGhlIGBpc1JlbW92ZWRgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBmb3Igbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb25cbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmh0bWxcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgdGhlaXIgdmFsdWVzLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJzdGF0dXNCYXJOb3RpZmljYXRpb25zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaXNHcm91cFwiOmZhbHNlLFxuICogICAgICAgXCJwYWNrYWdlTmFtZVwiOlwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgICBcImlzQ2xlYXJhYmxlXCI6ZmFsc2UsXG4gKiAgICAgICBcImlzT25nb2luZ1wiOnRydWUsXG4gKiAgICAgICBcImlkXCI6MSxcbiAqICAgICAgIFwidGFnXCI6bnVsbCxcbiAqICAgICAgIFwibm90aWZpY2F0aW9uXCI6e1xuICogICAgICAgICBcInRpdGxlXCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUaXRsZVwiOlwiQXBwaXVtIFNldHRpbmdzXCIsXG4gKiAgICAgICAgIFwidGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGV4dFwiOlwiS2VlcCB0aGlzIHNlcnZpY2UgcnVubmluZywgc28gQXBwaXVtIGZvciBBbmRyb2lkIGNhbiBwcm9wZXJseSBpbnRlcmFjdCB3aXRoIHNldmVyYWwgc3lzdGVtIEFQSXNcIixcbiAqICAgICAgICAgXCJ0aWNrZXJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJzdWJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJpbmZvVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwidGVtcGxhdGVcIjpcImFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbiRCaWdUZXh0U3R5bGVcIlxuICogICAgICAgfSxcbiAqICAgICAgIFwidXNlckhhbmRsZVwiOjAsXG4gKiAgICAgICBcImdyb3VwS2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwib3ZlcnJpZGVHcm91cEtleVwiOm51bGwsXG4gKiAgICAgICBcInBvc3RUaW1lXCI6MTU3Njg1MzUxODg1MCxcbiAqICAgICAgIFwia2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwiaXNSZW1vdmVkXCI6ZmFsc2VcbiAqICAgICB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBub3RpZmljYXRpb25zIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbnMgKCkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgbm90aWZpY2F0aW9ucycpO1xuICAvLyBTb21laG93IHByb3ZpZGluZyB0aGUgYC1uYCBhcmcgdG8gdGhlIGBhbWAgdW5kZXJuZWF0aFxuICAvLyByZW5kZXJzIHRoZSBicm9hZGNhc3QgdG8gZmFpbCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZVxuICAvLyBBcHBpdW0gU2V0dGluZ3MgYXBwLiBUaGlzIG9ubHkgaGFwcGVucyB0byB0aGUgbm90aWZpY2F0aW9uc1xuICAvLyByZWNlaXZlclxuICBhd2FpdCB0aGlzLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBub3RpZmljYXRpb25zIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdub3RpZmljYXRpb25zJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHRoZSBtb3N0IHJlY2VudCBTTVNcbiAqIHByb3BlcnRpZXMgbGlzdCB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYnkgZGF0ZSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpdGVtc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIyXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjQyMjIwM1wiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZTJcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIxXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjM4Mjc0MFwiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZVxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwidG90YWxcIjoyXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgU01TIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0U21zTGlzdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNtc0xpc3QgKG9wdHMgPSB7fSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlY2VudCBTTVMgbWVzc2FnZXMnKTtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBTTVNfTElTVF9SRUNFSVZFUixcbiAgICAnLWEnLCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdO1xuICBpZiAob3B0cy5tYXgpIHtcbiAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4Jywgb3B0cy5tYXgpO1xuICB9XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgU01TIGxpc3QgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ1NNUyBsaXN0Jyk7XG59O1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIHR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKi9cbmNvbW1hbmRzLnR5cGVVbmljb2RlID0gYXN5bmMgZnVuY3Rpb24gdHlwZVVuaWNvZGUgKHRleHQpIHtcbiAgaWYgKF8uaXNOaWwodGV4dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0ZXh0ID0gYCR7dGV4dH1gO1xuICBsb2cuZGVidWcoYFR5cGluZyAke3V0aWwucGx1cmFsaXplKCdjaGFyYWN0ZXInLCB0ZXh0Lmxlbmd0aCwgdHJ1ZSl9YCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChcbiAgICBVTklDT0RFX0lNRSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5pbnB1dFRleHQoaW1hcC5lbmNvZGUodGV4dCkpXG4gICk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyByZWN1cnNpdmUgbWVkaWEgc2NhbiBhdCB0aGUgZ2l2ZW4gZGVzdGluYXRpb24uXG4gKiBBbGwgc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgaXRlbXMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBkZXZpY2Unc1xuICogbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gRmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBlcnJvciBieSBzY2FubmluZy5cbiAqL1xuY29tbWFuZHMuc2Nhbk1lZGlhID0gYXN5bmMgZnVuY3Rpb24gc2Nhbk1lZGlhIChkZXN0aW5hdGlvbikge1xuICBsb2cuZGVidWcoYFNjYW5uaW5nICcke2Rlc3RpbmF0aW9ufScgZm9yIG1lZGlhIGZpbGVzYCk7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIE1FRElBX1NDQU5fUkVDRUlWRVIsXG4gICAgJy1hJywgTUVESUFfU0NBTl9BQ1RJT04sXG4gICAgJy0tZXMnLCAncGF0aCcsIGRlc3RpbmF0aW9uXG4gIF0pO1xuICBpZiAoIV8uaW5jbHVkZXMob3V0cHV0LCAncmVzdWx0PS0xJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1lZGlhIGNvdWxkIGJlIHNjYW5uZWQgYXQgJyR7ZGVzdGluYXRpb259Jy4gYCArXG4gICAgICBgQ2hlY2sgdGhlIGRldmljZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FBSSxHQUFFVixrQkFBbUIsbUJBQS9DO0FBQ0EsTUFBTVcsaUJBQWlCLEdBQUksR0FBRVgsa0JBQW1CLGtDQUFoRDtBQUNBLE1BQU1ZLHlCQUF5QixHQUFJLEdBQUVaLGtCQUFt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