Socket
Socket
Sign inDemoInstall

appium-support

Package Overview
Dependencies
Maintainers
7
Versions
145
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appium-support - npm Package Compare versions

Comparing version 2.49.0 to 2.50.0

4

build/lib/net.js

@@ -113,3 +113,3 @@ "use strict";

if ((auth === null || auth === void 0 ? void 0 : auth.user) && (auth === null || auth === void 0 ? void 0 : auth.pass) || user && pass) {
if (auth !== null && auth !== void 0 && auth.user && auth !== null && auth !== void 0 && auth.pass || user && pass) {
ftpOpts.user = (auth === null || auth === void 0 ? void 0 : auth.user) || user;

@@ -235,2 +235,2 @@ ftpOpts.pass = (auth === null || auth === void 0 ? void 0 : auth.pass) || pass;

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsidG9BeGlvc0F1dGgiLCJhdXRoIiwiXyIsImlzUGxhaW5PYmplY3QiLCJheGlvc0F1dGgiLCJ1c2VybmFtZSIsInVzZXIiLCJwYXNzd29yZCIsInBhc3MiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJwcm90b2NvbCIsImhyZWYiLCJyZXF1ZXN0T3B0cyIsInVybCIsImZvcm0iLCJGb3JtRGF0YSIsImFwcGVuZCIsInBhaXJzIiwiaXNBcnJheSIsInRvUGFpcnMiLCJrZXkiLCJ2YWx1ZSIsInRvTG93ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRIZWFkZXJzIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInVwbG9hZEZpbGVUb0Z0cCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiZnRwT3B0cyIsImhvc3QiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIkZ0cCIsInB1dCIsImVyciIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVVcmkiLCJmcyIsImV4aXN0cyIsIkVycm9yIiwiaXNNZXRlcmVkIiwicGFyc2UiLCJzaXplIiwic3RhdCIsImluZm8iLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJpbmNsdWRlcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGFyc2VJbnQiLCJwaXBlIiwib25jZSIsImUiLCJ1bnBpcGUiLCJtZXNzYWdlIiwicmltcmFmIiwic2Vjb25kc0VsYXBzZWQiLCJieXRlc1BlclNlYyIsIk1hdGgiLCJmbG9vciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsU0FBU0EsV0FBVCxDQUFzQkMsSUFBdEIsRUFBNEI7QUFDMUIsTUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQixXQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFNRyxTQUFTLEdBQUc7QUFDaEJDLElBQUFBLFFBQVEsRUFBRUosSUFBSSxDQUFDSSxRQUFMLElBQWlCSixJQUFJLENBQUNLLElBRGhCO0FBRWhCQyxJQUFBQSxRQUFRLEVBQUVOLElBQUksQ0FBQ00sUUFBTCxJQUFpQk4sSUFBSSxDQUFDTztBQUZoQixHQUFsQjtBQUlBLFNBQVFKLFNBQVMsQ0FBQ0MsUUFBVixJQUFzQkQsU0FBUyxDQUFDRyxRQUFqQyxHQUE2Q0gsU0FBN0MsR0FBeUQsSUFBaEU7QUFDRDs7QUFFRCxlQUFlSyxnQkFBZixDQUFpQ0MsZUFBakMsRUFBa0RDLFNBQWxELEVBQTZEQyxhQUFhLEdBQUcsRUFBN0UsRUFBaUY7QUFDL0UsUUFBTTtBQUNKQyxJQUFBQSxNQUFNLEdBQUcsTUFETDtBQUVKQyxJQUFBQSxPQUFPLEdBQUcsSUFGTjtBQUdKQyxJQUFBQSxPQUhJO0FBSUpkLElBQUFBLElBSkk7QUFLSmUsSUFBQUEsYUFBYSxHQUFHLE1BTFo7QUFNSkMsSUFBQUE7QUFOSSxNQU9GTCxhQVBKO0FBUUEsUUFBTTtBQUNKTSxJQUFBQSxRQURJO0FBRUpDLElBQUFBO0FBRkksTUFHRlIsU0FISjtBQUtBLFFBQU1TLFdBQVcsR0FBRztBQUNsQkMsSUFBQUEsR0FBRyxFQUFFRixJQURhO0FBRWxCTixJQUFBQSxNQUZrQjtBQUdsQkMsSUFBQUE7QUFIa0IsR0FB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QUlHLGNBQWMsSUFBSWhCLElBQUksS0FBS2dCLGNBQS9CLEVBQStDO0FBQzdDLFVBQU1yQixZQUFHZ0MsTUFBSCxDQUFVZCxPQUFWLENBQU47QUFDQSxVQUFNLElBQUloQixLQUFKLENBQVcsd0NBQXVDZSxTQUFVLEtBQUlaLElBQUssVUFBM0QsR0FDYiwyREFBMERnQixjQUFlLFNBRHRFLENBQU47QUFFRDs7QUFDRCxNQUFJbEIsU0FBSixFQUFlO0FBQ2IsVUFBTThCLGNBQWMsR0FBR3pCLEtBQUssQ0FBQ0ssV0FBTixHQUFvQkMsU0FBM0M7O0FBQ0FsQyxvQkFBSUMsS0FBSixDQUFXLEdBQUVvQyxTQUFVLEtBQUksZ0NBQXFCWixJQUFyQixDQUEyQixJQUE1QyxHQUNQLDJCQUEwQmEsT0FBUSxRQUFPZSxjQUFjLENBQUNsQixPQUFmLENBQXVCLENBQXZCLENBQTBCLEdBRHRFOztBQUVBLFFBQUlrQixjQUFjLElBQUksQ0FBdEIsRUFBeUI7QUFDdkIsWUFBTUMsV0FBVyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBVy9CLElBQUksR0FBRzRCLGNBQWxCLENBQXBCOztBQUNBckQsc0JBQUlDLEtBQUosQ0FBVywrQkFBOEIsZ0NBQXFCcUQsV0FBckIsQ0FBa0MsSUFBM0U7QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cblxuZnVuY3Rpb24gdG9BeGlvc0F1dGggKGF1dGgpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoYXV0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGF4aW9zQXV0aCA9IHtcbiAgICB1c2VybmFtZTogYXV0aC51c2VybmFtZSB8fCBhdXRoLnVzZXIsXG4gICAgcGFzc3dvcmQ6IGF1dGgucGFzc3dvcmQgfHwgYXV0aC5wYXNzLFxuICB9O1xuICByZXR1cm4gKGF4aW9zQXV0aC51c2VybmFtZSAmJiBheGlvc0F1dGgucGFzc3dvcmQpID8gYXhpb3NBdXRoIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvSHR0cCAobG9jYWxGaWxlU3RyZWFtLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbWV0aG9kID0gJ1BPU1QnLFxuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIGhlYWRlcnMsXG4gICAgYXV0aCxcbiAgICBmaWxlRmllbGROYW1lID0gJ2ZpbGUnLFxuICAgIGZvcm1GaWVsZHMsXG4gIH0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB7XG4gICAgcHJvdG9jb2wsXG4gICAgaHJlZixcbiAgfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCByZXF1ZXN0T3B0cyA9IHtcbiAgICB1cmw6IGhyZWYsXG4gICAgbWV0aG9kLFxuICAgIHRpbWVvdXQsXG4gIH07XG4gIGNvbnN0IGF4aW9zQXV0aCA9IHRvQXhpb3NBdXRoKGF1dGgpO1xuICBpZiAoYXhpb3NBdXRoKSB7XG4gICAgcmVxdWVzdE9wdHMuYXV0aCA9IGF4aW9zQXV0aDtcbiAgfVxuICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gIGZvcm0uYXBwZW5kKGZpbGVGaWVsZE5hbWUsIGxvY2FsRmlsZVN0cmVhbSk7XG4gIGlmIChmb3JtRmllbGRzKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG4gICAgaWYgKF8uaXNBcnJheShmb3JtRmllbGRzKSkge1xuICAgICAgcGFpcnMgPSBmb3JtRmllbGRzO1xuICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGZvcm1GaWVsZHMpKSB7XG4gICAgICBwYWlycyA9IF8udG9QYWlycyhmb3JtRmllbGRzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgIGlmIChfLnRvTG93ZXIoa2V5KSAhPT0gXy50b0xvd2VyKGZpbGVGaWVsZE5hbWUpKSB7XG4gICAgICAgIGZvcm0uYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXF1ZXN0T3B0cy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgXy5pc1BsYWluT2JqZWN0KGhlYWRlcnMpID8gaGVhZGVycyA6IHt9LCBmb3JtLmdldEhlYWRlcnMoKSk7XG5cbiAgLy8gZXhjbHVkZSBmb3JtIGRhdGEgZnJvbSB0aGUgbG9nIHNpbmNlIGl0J2xsIGNvbnRhaW4gdGhlIGVudGlyZSByZWNvcmRlZCB2aWRlb1xuICBsb2cuZGVidWcoYCR7cHJvdG9jb2x9IHVwbG9hZCBvcHRpb25zIChleC4gZm9ybSBkYXRhKTogJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0T3B0cyl9YCk7XG4gIHJlcXVlc3RPcHRzLmRhdGEgPSBmb3JtO1xuXG4gIGF3YWl0IGF4aW9zKHJlcXVlc3RPcHRzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvRnRwIChsb2NhbEZpbGVTdHJlYW0sIHBhcnNlZFVyaSwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhdXRoLFxuICAgIHVzZXIsXG4gICAgcGFzcyxcbiAgfSA9IHVwbG9hZE9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBob3N0bmFtZSxcbiAgICBwb3J0LFxuICAgIHByb3RvY29sLFxuICAgIHBhdGhuYW1lLFxuICB9ID0gcGFyc2VkVXJpO1xuXG4gIGNvbnN0IGZ0cE9wdHMgPSB7XG4gICAgaG9zdDogaG9zdG5hbWUsXG4gICAgcG9ydDogcG9ydCB8fCAyMSxcbiAgfTtcbiAgaWYgKChhdXRoPy51c2VyICYmIGF1dGg/LnBhc3MpIHx8ICh1c2VyICYmIHBhc3MpKSB7XG4gICAgZnRwT3B0cy51c2VyID0gYXV0aD8udXNlciB8fCB1c2VyO1xuICAgIGZ0cE9wdHMucGFzcyA9IGF1dGg/LnBhc3MgfHwgcGFzcztcbiAgfVxuICBsb2cuZGVidWcoYCR7cHJvdG9jb2x9IHVwbG9hZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGZ0cE9wdHMpfWApO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG5ldyBGdHAoZnRwT3B0cykucHV0KGxvY2FsRmlsZVN0cmVhbSwgcGF0aG5hbWUsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEF1dGhDcmVkZW50aWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHVzZXIgLSBOb24tZW1wdHkgdXNlciBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFzcyAtIE5vbi1lbXB0eSBwYXNzd29yZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRnRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIC0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbCB1cGxvYWQgcGVyZm9ybWFuY2VcbiAqIChlLmcuIHRpbWluZ3MgYW5kIHNwZWVkKVxuICogQHByb3BlcnR5IHtBdXRoQ3JlZGVudGlhbHN9IGF1dGhcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEh0dHBVcGxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIHVwbG9hZCBwZXJmb3JtYW5jZVxuICogKGUuZy4gdGltaW5ncyBhbmQgc3BlZWQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWV0aG9kIFtQT1NUXSAtIFRoZSBIVFRQIG1ldGhvZCB1c2VkIGZvciBmaWxlIHVwbG9hZFxuICogQHByb3BlcnR5IHtBdXRoQ3JlZGVudGlhbHN9IGF1dGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs1MDAwXSAtIFRoZSBhY3R1YWwgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgLSBBZGRpdGlvbmFsIHJlcXVlc3QgaGVhZGVycyBtYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCBjb250YWluaW5nIHRoZSBmaWxlXG4gKiBjb250ZW50IHRvIGJlIHVwbG9hZGVkXG4gKiBAcHJvcGVydHkge0FycmF5PFBhaXI+fE9iamVjdH0gZm9ybUZpZWxkcyAtIFRoZSBhZGRpdGlvbmFsIGZvcm0gZmllbGRzXG4gKiB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSB1cGxvYWQgcmVxdWVzdC4gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGNvbnNpZGVyZWQgaWZcbiAqIGBmaWxlRmllbGROYW1lYCBpcyBzZXRcbiAqL1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGdpdmVuIGZpbGUgdG8gYSByZW1vdGUgbG9jYXRpb24uIEhUVFAoUykgYW5kIEZUUFxuICogcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsUGF0aCAtIFRoZSBwYXRoIHRvIGEgZmlsZSBvbiB0aGUgbG9jYWwgc3RvcmFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVVcmkgLSBUaGUgcmVtb3RlIFVSSSB0byB1cGxvYWQgdGhlIGZpbGUgdG8uXG4gKiBAcGFyYW0gez9GdHBVcGxvYWRPcHRpb25zfEh0dHBVcGxvYWRPcHRpb25zfSB1cGxvYWRPcHRpb25zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGUgKGxvY2FsUGF0aCwgcmVtb3RlVXJpLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMobG9jYWxQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvciAoYCcke2xvY2FsUGF0aH0nIGRvZXMgbm90IGV4aXN0cyBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gIH0gPSB1cGxvYWRPcHRpb25zO1xuXG4gIGNvbnN0IHBhcnNlZFVyaSA9IHVybC5wYXJzZShyZW1vdGVVcmkpO1xuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGxvY2FsUGF0aCk7XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBsb2cuaW5mbyhgVXBsb2FkaW5nICcke2xvY2FsUGF0aH0nIG9mICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9IHNpemUgdG8gJyR7cmVtb3RlVXJpfScuLi5gKTtcbiAgfVxuICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gIGlmIChbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHBhcnNlZFVyaS5wcm90b2NvbCkpIHtcbiAgICBhd2FpdCB1cGxvYWRGaWxlVG9IdHRwKGZzLmNyZWF0ZVJlYWRTdHJlYW0obG9jYWxQYXRoKSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zKTtcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmkucHJvdG9jb2wgPT09ICdmdHA6Jykge1xuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0Z0cChmcy5jcmVhdGVSZWFkU3RyZWFtKGxvY2FsUGF0aCksIHBhcnNlZFVyaSwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBsb2FkIHRoZSBmaWxlIGF0ICcke2xvY2FsUGF0aH0nIHRvICcke3JlbW90ZVVyaX0nLiBgICtcbiAgICAgIGBVbnN1cHBvcnRlZCByZW1vdGUgcHJvdG9jb2wgJyR7cGFyc2VkVXJpLnByb3RvY29sfScuIGAgK1xuICAgICAgYE9ubHkgaHR0cC9odHRwcyBhbmQgZnRwL2Z0cHMgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKGBVcGxvYWRlZCAnJHtsb2NhbFBhdGh9JyBvZiAke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSBzaXplIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3dubG9hZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNNZXRlcmVkIFt0cnVlXSAtIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWwgZG93bmxvYWQgcGVyZm9ybWFuY2VcbiAqIChlLmcuIHRpbWluZ3MgYW5kIHNwZWVkKVxuICogQHByb3BlcnR5IHtBdXRoQ3JlZGVudGlhbHN9IGF1dGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs1MDAwXSAtIFRoZSBhY3R1YWwgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgLSBSZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICovXG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBnaXZlbiBmaWxlIHZpYSBIVFRQKFMpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVybCAtIFRoZSByZW1vdGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSBsb2NhbCBwYXRoIHRvIGRvd25sb2FkIHRoZSBmaWxlIHRvXG4gKiBAcGFyYW0gez9Eb3dubG9hZE9wdGlvbnN9IGRvd25sb2FkT3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IElmIGRvd25sb2FkIG9wZXJhdGlvbiBmYWlsc1xuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEZpbGUgKHJlbW90ZVVybCwgZHN0UGF0aCwgZG93bmxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgYXV0aCxcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgICBoZWFkZXJzLFxuICB9ID0gZG93bmxvYWRPcHRpb25zO1xuXG4gIGNvbnN0IHJlcXVlc3RPcHRzID0ge1xuICAgIHVybDogcmVtb3RlVXJsLFxuICAgIHJlc3BvbnNlVHlwZTogJ3N0cmVhbScsXG4gICAgdGltZW91dCxcbiAgfTtcbiAgY29uc3QgYXhpb3NBdXRoID0gdG9BeGlvc0F1dGgoYXV0aCk7XG4gIGlmIChheGlvc0F1dGgpIHtcbiAgICByZXF1ZXN0T3B0cy5hdXRoID0gYXhpb3NBdXRoO1xuICB9XG4gIGlmIChfLmlzUGxhaW5PYmplY3QoaGVhZGVycykpIHtcbiAgICByZXF1ZXN0T3B0cy5oZWFkZXJzID0gaGVhZGVycztcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCkuc3RhcnQoKTtcbiAgbGV0IHJlc3BvbnNlTGVuZ3RoO1xuICB0cnkge1xuICAgIGNvbnN0IHdyaXRlciA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRzdFBhdGgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IHJlc3BvbnNlU3RyZWFtLFxuICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIH0gPSBhd2FpdCBheGlvcyhyZXF1ZXN0T3B0cyk7XG4gICAgcmVzcG9uc2VMZW5ndGggPSBwYXJzZUludChyZXNwb25zZUhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10sIDEwKTtcbiAgICByZXNwb25zZVN0cmVhbS5waXBlKHdyaXRlcik7XG5cbiAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNwb25zZVN0cmVhbS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICB3cml0ZXIub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgICB3cml0ZXIub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICByZXNwb25zZVN0cmVhbS51bnBpcGUod3JpdGVyKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRvd25sb2FkIHRoZSBmaWxlIGZyb20gJHtyZW1vdGVVcmx9OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChkc3RQYXRoKTtcbiAgaWYgKHJlc3BvbnNlTGVuZ3RoICYmIHNpemUgIT09IHJlc3BvbnNlTGVuZ3RoKSB7XG4gICAgYXdhaXQgZnMucmltcmFmKGRzdFBhdGgpO1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNpemUgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tICR7cmVtb3RlVXJsfSAoJHtzaXplfSBieXRlcykgYCArXG4gICAgICBgZGlmZmVycyBmcm9tIHRoZSBvbmUgaW4gQ29udGVudC1MZW5ndGggcmVzcG9uc2UgaGVhZGVyICgke3Jlc3BvbnNlTGVuZ3RofSBieXRlcylgKTtcbiAgfVxuICBpZiAoaXNNZXRlcmVkKSB7XG4gICAgY29uc3Qgc2Vjb25kc0VsYXBzZWQgPSB0aW1lci5nZXREdXJhdGlvbigpLmFzU2Vjb25kcztcbiAgICBsb2cuZGVidWcoYCR7cmVtb3RlVXJsfSAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0pIGAgK1xuICAgICAgYGhhcyBiZWVuIGRvd25sb2FkZWQgdG8gJyR7ZHN0UGF0aH0nIGluICR7c2Vjb25kc0VsYXBzZWQudG9GaXhlZCgzKX1zYCk7XG4gICAgaWYgKHNlY29uZHNFbGFwc2VkID49IDIpIHtcbiAgICAgIGNvbnN0IGJ5dGVzUGVyU2VjID0gTWF0aC5mbG9vcihzaXplIC8gc2Vjb25kc0VsYXBzZWQpO1xuICAgICAgbG9nLmRlYnVnKGBBcHByb3hpbWF0ZSBkb3dubG9hZCBzcGVlZDogJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhieXRlc1BlclNlYyl9L3NgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgdXBsb2FkRmlsZSwgZG93bmxvYWRGaWxlIH07XG4iXSwiZmlsZSI6ImxpYi9uZXQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsidG9BeGlvc0F1dGgiLCJhdXRoIiwiXyIsImlzUGxhaW5PYmplY3QiLCJheGlvc0F1dGgiLCJ1c2VybmFtZSIsInVzZXIiLCJwYXNzd29yZCIsInBhc3MiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJwcm90b2NvbCIsImhyZWYiLCJyZXF1ZXN0T3B0cyIsInVybCIsImZvcm0iLCJGb3JtRGF0YSIsImFwcGVuZCIsInBhaXJzIiwiaXNBcnJheSIsInRvUGFpcnMiLCJrZXkiLCJ2YWx1ZSIsInRvTG93ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRIZWFkZXJzIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInVwbG9hZEZpbGVUb0Z0cCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiZnRwT3B0cyIsImhvc3QiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIkZ0cCIsInB1dCIsImVyciIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVVcmkiLCJmcyIsImV4aXN0cyIsIkVycm9yIiwiaXNNZXRlcmVkIiwicGFyc2UiLCJzaXplIiwic3RhdCIsImluZm8iLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJpbmNsdWRlcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGFyc2VJbnQiLCJwaXBlIiwib25jZSIsImUiLCJ1bnBpcGUiLCJtZXNzYWdlIiwicmltcmFmIiwic2Vjb25kc0VsYXBzZWQiLCJieXRlc1BlclNlYyIsIk1hdGgiLCJmbG9vciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsU0FBU0EsV0FBVCxDQUFzQkMsSUFBdEIsRUFBNEI7QUFDMUIsTUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQixXQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFNRyxTQUFTLEdBQUc7QUFDaEJDLElBQUFBLFFBQVEsRUFBRUosSUFBSSxDQUFDSSxRQUFMLElBQWlCSixJQUFJLENBQUNLLElBRGhCO0FBRWhCQyxJQUFBQSxRQUFRLEVBQUVOLElBQUksQ0FBQ00sUUFBTCxJQUFpQk4sSUFBSSxDQUFDTztBQUZoQixHQUFsQjtBQUlBLFNBQVFKLFNBQVMsQ0FBQ0MsUUFBVixJQUFzQkQsU0FBUyxDQUFDRyxRQUFqQyxHQUE2Q0gsU0FBN0MsR0FBeUQsSUFBaEU7QUFDRDs7QUFFRCxlQUFlSyxnQkFBZixDQUFpQ0MsZUFBakMsRUFBa0RDLFNBQWxELEVBQTZEQyxhQUFhLEdBQUcsRUFBN0UsRUFBaUY7QUFDL0UsUUFBTTtBQUNKQyxJQUFBQSxNQUFNLEdBQUcsTUFETDtBQUVKQyxJQUFBQSxPQUFPLEdBQUcsSUFGTjtBQUdKQyxJQUFBQSxPQUhJO0FBSUpkLElBQUFBLElBSkk7QUFLSmUsSUFBQUEsYUFBYSxHQUFHLE1BTFo7QUFNSkMsSUFBQUE7QUFOSSxNQU9GTCxhQVBKO0FBUUEsUUFBTTtBQUNKTSxJQUFBQSxRQURJO0FBRUpDLElBQUFBO0FBRkksTUFHRlIsU0FISjtBQUtBLFFBQU1TLFdBQVcsR0FBRztBQUNsQkMsSUFBQUEsR0FBRyxFQUFFRixJQURhO0FBRWxCTixJQUFBQSxNQUZrQjtBQUdsQkMsSUFBQUE7QUFIa0IsR0FB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QUloQixJQUFJLEtBQUtnQixjQUEvQixFQUErQztBQUM3QyxVQUFNckIsWUFBR2dDLE1BQUgsQ0FBVWQsT0FBVixDQUFOO0FBQ0EsVUFBTSxJQUFJaEIsS0FBSixDQUFXLHdDQUF1Q2UsU0FBVSxLQUFJWixJQUFLLFVBQTNELEdBQ2IsMkRBQTBEZ0IsY0FBZSxTQUR0RSxDQUFOO0FBRUQ7O0FBQ0QsTUFBSWxCLFNBQUosRUFBZTtBQUNiLFVBQU04QixjQUFjLEdBQUd6QixLQUFLLENBQUNLLFdBQU4sR0FBb0JDLFNBQTNDOztBQUNBbEMsb0JBQUlDLEtBQUosQ0FBVyxHQUFFb0MsU0FBVSxLQUFJLGdDQUFxQlosSUFBckIsQ0FBMkIsSUFBNUMsR0FDUCwyQkFBMEJhLE9BQVEsUUFBT2UsY0FBYyxDQUFDbEIsT0FBZixDQUF1QixDQUF2QixDQUEwQixHQUR0RTs7QUFFQSxRQUFJa0IsY0FBYyxJQUFJLENBQXRCLEVBQXlCO0FBQ3ZCLFlBQU1DLFdBQVcsR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVcvQixJQUFJLEdBQUc0QixjQUFsQixDQUFwQjs7QUFDQXJELHNCQUFJQyxLQUFKLENBQVcsK0JBQThCLGdDQUFxQnFELFdBQXJCLENBQWtDLElBQTNFO0FBQ0Q7QUFDRjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHRvUmVhZGFibGVTaXplU3RyaW5nIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IEZ0cCBmcm9tICdqc2Z0cCc7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuXG5cbmZ1bmN0aW9uIHRvQXhpb3NBdXRoIChhdXRoKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGF1dGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBheGlvc0F1dGggPSB7XG4gICAgdXNlcm5hbWU6IGF1dGgudXNlcm5hbWUgfHwgYXV0aC51c2VyLFxuICAgIHBhc3N3b3JkOiBhdXRoLnBhc3N3b3JkIHx8IGF1dGgucGFzcyxcbiAgfTtcbiAgcmV0dXJuIChheGlvc0F1dGgudXNlcm5hbWUgJiYgYXhpb3NBdXRoLnBhc3N3b3JkKSA/IGF4aW9zQXV0aCA6IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVUb0h0dHAgKGxvY2FsRmlsZVN0cmVhbSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG1ldGhvZCA9ICdQT1NUJyxcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgICBoZWFkZXJzLFxuICAgIGF1dGgsXG4gICAgZmlsZUZpZWxkTmFtZSA9ICdmaWxlJyxcbiAgICBmb3JtRmllbGRzLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIHByb3RvY29sLFxuICAgIGhyZWYsXG4gIH0gPSBwYXJzZWRVcmk7XG5cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiBocmVmLFxuICAgIG1ldGhvZCxcbiAgICB0aW1lb3V0LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuICBmb3JtLmFwcGVuZChmaWxlRmllbGROYW1lLCBsb2NhbEZpbGVTdHJlYW0pO1xuICBpZiAoZm9ybUZpZWxkcykge1xuICAgIGxldCBwYWlycyA9IFtdO1xuICAgIGlmIChfLmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgIHBhaXJzID0gZm9ybUZpZWxkcztcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChmb3JtRmllbGRzKSkge1xuICAgICAgcGFpcnMgPSBfLnRvUGFpcnMoZm9ybUZpZWxkcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICBpZiAoXy50b0xvd2VyKGtleSkgIT09IF8udG9Mb3dlcihmaWxlRmllbGROYW1lKSkge1xuICAgICAgICBmb3JtLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVxdWVzdE9wdHMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSA/IGhlYWRlcnMgOiB7fSwgZm9ybS5nZXRIZWFkZXJzKCkpO1xuXG4gIC8vIGV4Y2x1ZGUgZm9ybSBkYXRhIGZyb20gdGhlIGxvZyBzaW5jZSBpdCdsbCBjb250YWluIHRoZSBlbnRpcmUgcmVjb3JkZWQgdmlkZW9cbiAgbG9nLmRlYnVnKGAke3Byb3RvY29sfSB1cGxvYWQgb3B0aW9ucyAoZXguIGZvcm0gZGF0YSk6ICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdHMpfWApO1xuICByZXF1ZXN0T3B0cy5kYXRhID0gZm9ybTtcblxuICBhd2FpdCBheGlvcyhyZXF1ZXN0T3B0cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVUb0Z0cCAobG9jYWxGaWxlU3RyZWFtLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXV0aCxcbiAgICB1c2VyLFxuICAgIHBhc3MsXG4gIH0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB7XG4gICAgaG9zdG5hbWUsXG4gICAgcG9ydCxcbiAgICBwcm90b2NvbCxcbiAgICBwYXRobmFtZSxcbiAgfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCBmdHBPcHRzID0ge1xuICAgIGhvc3Q6IGhvc3RuYW1lLFxuICAgIHBvcnQ6IHBvcnQgfHwgMjEsXG4gIH07XG4gIGlmICgoYXV0aD8udXNlciAmJiBhdXRoPy5wYXNzKSB8fCAodXNlciAmJiBwYXNzKSkge1xuICAgIGZ0cE9wdHMudXNlciA9IGF1dGg/LnVzZXIgfHwgdXNlcjtcbiAgICBmdHBPcHRzLnBhc3MgPSBhdXRoPy5wYXNzIHx8IHBhc3M7XG4gIH1cbiAgbG9nLmRlYnVnKGAke3Byb3RvY29sfSB1cGxvYWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShmdHBPcHRzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBuZXcgRnRwKGZ0cE9wdHMpLnB1dChsb2NhbEZpbGVTdHJlYW0sIHBhdGhuYW1lLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBdXRoQ3JlZGVudGlhbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1c2VyIC0gTm9uLWVtcHR5IHVzZXIgbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhc3MgLSBOb24tZW1wdHkgcGFzc3dvcmRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZ0cFVwbG9hZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNNZXRlcmVkIFt0cnVlXSAtIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWwgdXBsb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBhdXRoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdHRwVXBsb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIC0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbCB1cGxvYWQgcGVyZm9ybWFuY2VcbiAqIChlLmcuIHRpbWluZ3MgYW5kIHNwZWVkKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGhvZCBbUE9TVF0gLSBUaGUgSFRUUCBtZXRob2QgdXNlZCBmb3IgZmlsZSB1cGxvYWRcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBhdXRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gLSBUaGUgYWN0dWFsIHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWFkZXJzIC0gQWRkaXRpb25hbCByZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQgY29udGFpbmluZyB0aGUgZmlsZVxuICogY29udGVudCB0byBiZSB1cGxvYWRlZFxuICogQHByb3BlcnR5IHtBcnJheTxQYWlyPnxPYmplY3R9IGZvcm1GaWVsZHMgLSBUaGUgYWRkaXRpb25hbCBmb3JtIGZpZWxkc1xuICogdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgdXBsb2FkIHJlcXVlc3QuIFRoaXMgcHJvcGVydHkgaXMgb25seSBjb25zaWRlcmVkIGlmXG4gKiBgZmlsZUZpZWxkTmFtZWAgaXMgc2V0XG4gKi9cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBnaXZlbiBmaWxlIHRvIGEgcmVtb3RlIGxvY2F0aW9uLiBIVFRQKFMpIGFuZCBGVFBcbiAqIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbFBhdGggLSBUaGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGxvY2FsIHN0b3JhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlVXJpIC0gVGhlIHJlbW90ZSBVUkkgdG8gdXBsb2FkIHRoZSBmaWxlIHRvLlxuICogQHBhcmFtIHs/RnRwVXBsb2FkT3B0aW9uc3xIdHRwVXBsb2FkT3B0aW9uc30gdXBsb2FkT3B0aW9uc1xuICovXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlIChsb2NhbFBhdGgsIHJlbW90ZVVyaSwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IgKGAnJHtsb2NhbFBhdGh9JyBkb2VzIG5vdCBleGlzdHMgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc01ldGVyZWQgPSB0cnVlLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcblxuICBjb25zdCBwYXJzZWRVcmkgPSB1cmwucGFyc2UocmVtb3RlVXJpKTtcbiAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChsb2NhbFBhdGgpO1xuICBpZiAoaXNNZXRlcmVkKSB7XG4gICAgbG9nLmluZm8oYFVwbG9hZGluZyAnJHtsb2NhbFBhdGh9JyBvZiAke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSBzaXplIHRvICcke3JlbW90ZVVyaX0nLi4uYCk7XG4gIH1cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBpZiAoWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhwYXJzZWRVcmkucHJvdG9jb2wpKSB7XG4gICAgYXdhaXQgdXBsb2FkRmlsZVRvSHR0cChmcy5jcmVhdGVSZWFkU3RyZWFtKGxvY2FsUGF0aCksIHBhcnNlZFVyaSwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAocGFyc2VkVXJpLnByb3RvY29sID09PSAnZnRwOicpIHtcbiAgICBhd2FpdCB1cGxvYWRGaWxlVG9GdHAoZnMuY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVwbG9hZCB0aGUgZmlsZSBhdCAnJHtsb2NhbFBhdGh9JyB0byAnJHtyZW1vdGVVcml9Jy4gYCArXG4gICAgICBgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sICcke3BhcnNlZFVyaS5wcm90b2NvbH0nLiBgICtcbiAgICAgIGBPbmx5IGh0dHAvaHR0cHMgYW5kIGZ0cC9mdHBzIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBsb2cuaW5mbyhgVXBsb2FkZWQgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2ApO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRG93bmxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIGRvd25sb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBhdXRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gLSBUaGUgYWN0dWFsIHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWFkZXJzIC0gUmVxdWVzdCBoZWFkZXJzIG1hcHBpbmdcbiAqL1xuXG4vKipcbiAqIERvd25sb2FkcyB0aGUgZ2l2ZW4gZmlsZSB2aWEgSFRUUChTKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVVcmwgLSBUaGUgcmVtb3RlIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFBhdGggLSBUaGUgbG9jYWwgcGF0aCB0byBkb3dubG9hZCB0aGUgZmlsZSB0b1xuICogQHBhcmFtIHs/RG93bmxvYWRPcHRpb25zfSBkb3dubG9hZE9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBkb3dubG9hZCBvcGVyYXRpb24gZmFpbHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRGaWxlIChyZW1vdGVVcmwsIGRzdFBhdGgsIGRvd25sb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpc01ldGVyZWQgPSB0cnVlLFxuICAgIGF1dGgsXG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgaGVhZGVycyxcbiAgfSA9IGRvd25sb2FkT3B0aW9ucztcblxuICBjb25zdCByZXF1ZXN0T3B0cyA9IHtcbiAgICB1cmw6IHJlbW90ZVVybCxcbiAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nLFxuICAgIHRpbWVvdXQsXG4gIH07XG4gIGNvbnN0IGF4aW9zQXV0aCA9IHRvQXhpb3NBdXRoKGF1dGgpO1xuICBpZiAoYXhpb3NBdXRoKSB7XG4gICAgcmVxdWVzdE9wdHMuYXV0aCA9IGF4aW9zQXV0aDtcbiAgfVxuICBpZiAoXy5pc1BsYWluT2JqZWN0KGhlYWRlcnMpKSB7XG4gICAgcmVxdWVzdE9wdHMuaGVhZGVycyA9IGhlYWRlcnM7XG4gIH1cblxuICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gIGxldCByZXNwb25zZUxlbmd0aDtcbiAgdHJ5IHtcbiAgICBjb25zdCB3cml0ZXIgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoKTtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiByZXNwb25zZVN0cmVhbSxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICB9ID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdHMpO1xuICAgIHJlc3BvbnNlTGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2VIZWFkZXJzWydjb250ZW50LWxlbmd0aCddLCAxMCk7XG4gICAgcmVzcG9uc2VTdHJlYW0ucGlwZSh3cml0ZXIpO1xuXG4gICAgYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzcG9uc2VTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgd3JpdGVyLm9uY2UoJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgcmVzcG9uc2VTdHJlYW0udW5waXBlKHdyaXRlcik7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkb3dubG9hZCB0aGUgZmlsZSBmcm9tICR7cmVtb3RlVXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZHN0UGF0aCk7XG4gIGlmIChyZXNwb25zZUxlbmd0aCAmJiBzaXplICE9PSByZXNwb25zZUxlbmd0aCkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihkc3RQYXRoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSBmaWxlIGRvd25sb2FkZWQgZnJvbSAke3JlbW90ZVVybH0gKCR7c2l6ZX0gYnl0ZXMpIGAgK1xuICAgICAgYGRpZmZlcnMgZnJvbSB0aGUgb25lIGluIENvbnRlbnQtTGVuZ3RoIHJlc3BvbnNlIGhlYWRlciAoJHtyZXNwb25zZUxlbmd0aH0gYnl0ZXMpYCk7XG4gIH1cbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGNvbnN0IHNlY29uZHNFbGFwc2VkID0gdGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHM7XG4gICAgbG9nLmRlYnVnKGAke3JlbW90ZVVybH0gKCR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9KSBgICtcbiAgICAgIGBoYXMgYmVlbiBkb3dubG9hZGVkIHRvICcke2RzdFBhdGh9JyBpbiAke3NlY29uZHNFbGFwc2VkLnRvRml4ZWQoMyl9c2ApO1xuICAgIGlmIChzZWNvbmRzRWxhcHNlZCA+PSAyKSB7XG4gICAgICBjb25zdCBieXRlc1BlclNlYyA9IE1hdGguZmxvb3Ioc2l6ZSAvIHNlY29uZHNFbGFwc2VkKTtcbiAgICAgIGxvZy5kZWJ1ZyhgQXBwcm94aW1hdGUgZG93bmxvYWQgc3BlZWQ6ICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoYnl0ZXNQZXJTZWMpfS9zYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IHVwbG9hZEZpbGUsIGRvd25sb2FkRmlsZSB9O1xuIl0sImZpbGUiOiJsaWIvbmV0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -39,2 +39,3 @@ import _ from 'lodash';

const DEFAULT_MATCH_THRESHOLD = 0.5;
const MATCH_NEIGHBOUR_THRESHOLD = 10;

@@ -412,2 +413,5 @@ const AVAILABLE_DETECTORS = [

* a match
* @property {?float} multiple [false] find multiple matches in the image
* @property {?number} matchNeighbourThreshold [10] The pixel distance between matches we consider
* to be part of the same template match
*/

@@ -421,5 +425,8 @@

* represented as PNG image buffer. On this image the matching
* region is highlighted with a rectangle.
* region is highlighted with a rectangle. If the multiple option is passed,
* all results are highlighted here.
* @property {number} score The similarity score as a float number in range [0.0, 1.0].
* 1.0 is the highest score (means both images are totally equal).
* @property {Array<OccurrenceResult>} multiple The array of matching OccurenceResults
* - only when multiple option is passed
*/

@@ -441,3 +448,7 @@

const {visualize = false, threshold = DEFAULT_MATCH_THRESHOLD} = options;
const { visualize = false,
threshold = DEFAULT_MATCH_THRESHOLD,
multiple = false,
matchNeighbourThreshold = MATCH_NEIGHBOUR_THRESHOLD } = options;
const [fullImg, partialImg] = await B.all([

@@ -447,32 +458,99 @@ cv.imdecodeAsync(fullImgData),

]);
const result = {};
const results = [];
let visualization = null;
try {
const matched = await fullImg.matchTemplateAsync(partialImg, cv.TM_CCOEFF_NORMED);
const minMax = await matched.minMaxLocAsync();
result.score = minMax.maxVal;
if (result.score < threshold) {
if (multiple) {
const nonZeroMatchResults = matched.threshold(threshold, 1, cv.THRESH_BINARY).convertTo(cv.CV_8U).findNonZero();
const matches = filterNearMatches(nonZeroMatchResults, matchNeighbourThreshold);
for (const element of matches) {
results.push({
score: matched.at(element.y, element.x),
rect: {
x: element.x,
y: element.y,
width: partialImg.cols,
height: partialImg.rows
}
});
}
} else if (minMax.maxVal >= threshold) {
results.push({
score: minMax.maxVal,
rect: {
x: minMax.maxLoc.x,
y: minMax.maxLoc.y,
width: partialImg.cols,
height: partialImg.rows
}
});
}
if (_.isEmpty(results)) {
// Below error message, `Cannot find any occurrences` is referenced in find by image
throw new Error(`Cannot find any occurrences of the partial image in the full ` +
`image above the threshold of ${threshold}. Highest match value ` +
throw new Error(`Match threshold: ${threshold}. Highest match value ` +
`found was ${minMax.maxVal}`);
}
result.rect = {
x: minMax.maxLoc.x,
y: minMax.maxLoc.y,
width: partialImg.cols,
height: partialImg.rows
};
} catch (e) {
// Below error message, `Cannot find any occurrences` is referenced in find by image
throw new Error(`Cannot find any occurrences of the partial image in the full image. ` +
`Original error: ${e}`);
`Original error: ${e.message}`);
}
if (visualize) {
highlightRegion(fullImg, result.rect);
result.visualization = await cv.imencodeAsync('.png', fullImg);
const fullHighlightedImage = fullImg.copy();
for (const result of results) {
const singleHighlightedImage = fullImg.copy();
highlightRegion(singleHighlightedImage, result.rect);
highlightRegion(fullHighlightedImage, result.rect);
result.visualization = await cv.imencodeAsync('.png', singleHighlightedImage);
}
visualization = await cv.imencodeAsync('.png', fullHighlightedImage);
}
return result;
return {
rect: results[0].rect,
score: results[0].score,
visualization,
multiple: results
};
}
/**
* Filter out match results which have a matched neighbour
*
* @param {Array<Point>} nonZeroMatchResults matrix of image match results
* @param {number} matchNeighbourThreshold The pixel distance within which we
* consider an element being a neighbour of an existing match
* @return {Array<Point>} the filtered array of matched points
*/
function filterNearMatches (nonZeroMatchResults, matchNeighbourThreshold) {
return nonZeroMatchResults.reduce((acc, element) => {
if (!acc.some((match) => distance(match, element) <= matchNeighbourThreshold)) {
acc.push(element);
}
return acc;
}, []);
}
/**
* Find the distance between two points
*
* @param {Point} point1 The first point
* @param {Point} point2 The second point
* @return {number} the distance
*/
function distance (point1, point2) {
const a2 = Math.pow((point1.x - point2.x), 2);
const b2 = Math.pow((point1.y - point2.y), 2);
return Math.sqrt(a2 + b2);
}
/**
* Crop the image by given rectangle (use base64 string as input and output)

@@ -479,0 +557,0 @@ *

@@ -7,3 +7,3 @@ {

],
"version": "2.49.0",
"version": "2.50.0",
"author": "appium",

@@ -35,3 +35,3 @@ "license": "Apache-2.0",

"archiver": "^5.0.0",
"axios": "^0.20.0",
"axios": "^0.21.1",
"base64-stream": "^1.0.0",

@@ -87,4 +87,3 @@ "bluebird": "^3.5.1",

"devDependencies": {
"ajv": "^6.5.3",
"appium-gulp-plugins": "^5.2.1",
"appium-gulp-plugins": "^5.4.0",
"asyncbox": "^2.3.1",

@@ -91,0 +90,0 @@ "chai": "^4.1.2",

# appium-support
[![Coverage Status](https://coveralls.io/repos/appium/appium-support/badge.svg?branch=master&service=github)](https://coveralls.io/github/appium/appium-support?branch=master)
Utility functions used to support libs used across appium packages.

@@ -6,0 +4,0 @@

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc