New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

redibox-hook-job

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

redibox-hook-job - npm Package Compare versions

Comparing version 1.2.12 to 1.2.13

4

lib/job.js

@@ -151,3 +151,3 @@ 'use strict';

/* eslint no-console: 0 */
const jobData = JSON.stringify(this.data.data);
const jobData = JSON.stringify(this.data.data || {});
console.log(JSON.stringify({

@@ -391,2 +391,2 @@ level: 'verbose',

// }
//# sourceMappingURL=data:application/json;base64,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QW9CLE9BQXBCLENBQTRCLFNBQVUsTUFBRyxLQUFLLFNBQVUsTUFBRyxHQUFJLEdBQXpFO0FBQ0Q7O0FBN1JPLEMsQ0FqQ1Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQWtVZSxHOztBQUVmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiam9iLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1IFNhbGFrYXJcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICpcbiAqL1xuXG5pbXBvcnQgY3VpZCBmcm9tICdjdWlkJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IG5vb3AsIHNoYTFzdW0sIHRyeUpTT05TdHJpbmdpZnksIHRyeUpTT05QYXJzZSB9IGZyb20gJ3JlZGlib3gnO1xuXG4vKipcbiAqIEBjbGFzcyBKb2JcbiAqL1xuY2xhc3MgSm9iIHtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvcmVcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBxdWV1ZU5hbWVcbiAgICogQHBhcmFtIGlzTmV3XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29yZSwgaWQsIGRhdGEgPSB7fSwgb3B0aW9ucyA9IHtcbiAgICB1bmlxdWU6IGZhbHNlLFxuICAgIHRpbWVvdXQ6IDYwMDAwLCAvLyAxIG1pbnV0ZSBkZWZhdWx0IHRpbWVvdXRcbiAgfSwgcXVldWVOYW1lLCBpc05ldykge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmNvcmUgPSBjb3JlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5fc2F2ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RhdHVzID0gJ2NyZWF0ZWQnO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMuaWdub3JlUHJveHkgPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXVlTmFtZSA9IHF1ZXVlTmFtZTtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnJ1bnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLnJ1bnMpID8gJ3JlbGF5JyA6ICdzaW5nbGUnO1xuXG4gICAgLy8gcGFyZW50IHJlbGF5IGpvYiB0aW1lb3V0IHNob3VsZCBjb3ZlciBhbGwgY2hpbGQgam9iIHRpbWVvdXRzXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3JlbGF5JykgdGhpcy5vcHRpb25zLnRpbWVvdXQgPSB0aGlzLm9wdGlvbnMudGltZW91dCAqIGRhdGEucnVucy5sZW5ndGg7XG5cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIC8vIHRoaXMgUHJveHkgYWxsb3dzIGNoYWluaW5nIG1ldGhvZHMgd2hpbGUgc3RpbGwga2VlcGluZyB0aGVcbiAgICAgIC8vIHNhdmUoKSBwcm9taXNlIHZhbGlkXG4gICAgICB0aGlzLnByb3h5ID0gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgbmFtZSkge1xuICAgICAgICAgIGlmIChuYW1lIGluIHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBoYXh4b3JzXG4gICAgICAgICAgaWYgKCF0YXJnZXQuaWdub3JlUHJveHkgJiYgbmFtZSA9PT0gJ3RoZW4nKSB7XG4gICAgICAgICAgICB0YXJnZXQucHJvbWlzZSA9IHRhcmdldC5zYXZlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnByb21pc2UudGhlbi5iaW5kKHRhcmdldC5wcm9taXNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnByb3h5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgam9iIGluc3RhbmNlIHdpdGggbm8gcHJveHlcbiAgICogQHJldHVybnMge0pvYn1cbiAgICovXG4gIHdpdGhvdXRQcm94eSgpIHtcbiAgICB0aGlzLmlnbm9yZVByb3h5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSByZWRpcyBmb3IgdGhlIHNwZWNpZmllZCBqb2IgaWQgYW5kIGNvbnZlcnRzIGl0IHRvIGEgbmV3IGluc3RhbmNlIG9mIEpvYi5cbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0gcXVldWVcbiAgICogQHBhcmFtIGlkXG4gICAqL1xuICBzdGF0aWMgZnJvbUlkKHF1ZXVlLCBpZCkge1xuICAgIHJldHVybiBxdWV1ZS5jbGllbnQuaGdldChxdWV1ZS50b0tleSgnam9icycpLCBpZCkudGhlbigoZGF0YSkgPT5cbiAgICAgIEpvYi5mcm9tRGF0YShxdWV1ZSwgaWQsIGRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEpTT04gc3RyaW5nIG9mIGEgam9iJ3MgZGF0YSB0byBhIG5ldyBpbnN0YW5jZSBvZiBKb2JcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0gcXVldWVcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIHtKb2IgfCBudWxsfVxuICAgKi9cbiAgc3RhdGljIGZyb21EYXRhKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBvYmogPSB0cnlKU09OUGFyc2UoYXJnc1syXSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGpvYiA9IG5ldyBKb2IoYXJnc1swXS5jb3JlLCBhcmdzWzFdLCBvYmouZGF0YSwgb2JqLm9wdGlvbnMsIGFyZ3NbMF0ubmFtZSk7XG4gICAgam9iLnN0YXR1cyA9IG9iai5kYXRhLnN0YXR1cztcbiAgICByZXR1cm4gam9iO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhpcyBKb2IgaW5zdGFuY2UgdG8gYSBqc29uIHN0cmluZy5cbiAgICovXG4gIHRvRGF0YSgpIHtcbiAgICByZXR1cm4gdHJ5SlNPTlN0cmluZ2lmeSh7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0b09iamVjdChleGNsdWRlRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGRhdGE6IGV4Y2x1ZGVEYXRhID8gJ2hpZGRlbicgOiB0aGlzLmRhdGEsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgc2F2ZSB0aGF0IHB1c2hlcyB0byByZWRpcy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zYXZlKCkge1xuICAgIHRoaXMuY29yZS5sb2cudmVyYm9zZShgU2F2aW5nIG5ldyBqb2IgJHt0aGlzLmlkfSBmb3IgJHt0aGlzLnF1ZXVlTmFtZX1gKTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmNsaWVudC5hZGRqb2IoXG4gICAgICB0aGlzLl90b1F1ZXVlS2V5KCdqb2JzJyksXG4gICAgICB0aGlzLl90b1F1ZXVlS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLl90b1F1ZXVlS2V5KCdpZCcpLFxuICAgICAgdGhpcy50b0RhdGEoKSxcbiAgICAgICEhdGhpcy5vcHRpb25zLnVuaXF1ZSxcbiAgICAgIHRoaXMuaWQpLnRoZW4oKGlkKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudW5pcXVlICYmIGlkID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSAnZHVwbGljYXRlJztcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBFUlJfRFVQTElDQVRFOiBKb2IgJHt0aGlzLmlkfSBhbHJlYWR5IGV4aXN0cywgc2F2ZSBoYXMgYmVlbiBhYm9ydGVkLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1BPUlQgfHwgcHJvY2Vzcy5lbnYuS1VCRVJORVRFU19TRVJWSUNFX0hPU1QpIHtcbiAgICAgICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuICAgICAgICAgIGNvbnN0IGpvYkRhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEuZGF0YSk7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbGV2ZWw6ICd2ZXJib3NlJyxcbiAgICAgICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9jcmVhdGVkJyxcbiAgICAgICAgICAgIGpvYjoge1xuICAgICAgICAgICAgICBpZDogdGhpcy5pZC50b1N0cmluZyA/IHRoaXMuaWQudG9TdHJpbmcoKSA6IHRoaXMuaWQsXG4gICAgICAgICAgICAgIHJ1bnM6IHRoaXMuZGF0YS5ydW5zLFxuICAgICAgICAgICAgICBxdWV1ZTogdGhpcy5xdWV1ZU5hbWUsXG4gICAgICAgICAgICAgIHN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgICAgICAgICBkYXRhOiBqb2JEYXRhLmxlbmd0aCA+IDQwMDAgPyAnPCEgam9iIGRhdGEgdG9vIGxhcmdlIHRvIGRpc3BsYXkgIT4nIDogdGhpcy5kYXRhLmRhdGEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29yZS5sb2cudmVyYm9zZShgU2F2ZWQgam9iIGZvciAke3RoaXMucXVldWVOYW1lfWApO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gJ3NhdmVkJztcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRvT2JqZWN0KHRydWUpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhpcyBpbnN0YW5jZSBvZiBKb2IgdG8gcmVkaXMuIEFueSBhY3RpdmUgcXVldWVzIHdpbGwgcGljayBpdCB1cFxuICAgKiBpbW1lZGlhdGVseSBmb3IgcHJvY2Vzc2luZy5cbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBzYXZlKGF1dG8pIHtcbiAgICBpZiAoIWF1dG8gJiYgdGhpcy5fc2F2ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8vIGxvY2sgaXQgc28gYXV0b1NhdmUgZG9lc24ndCBwaWNrIGl0IHVwIGJ1dCBvbmx5IGRlbGV0ZXMgaXQgZnJvbSBxdWV1ZVxuICAgIHRoaXMuX3NhdmVkID0gdHJ1ZTtcblxuICAgIHRoaXMuaWQgPSBgJHt0aGlzLnF1ZXVlTmFtZX0tJHsodGhpcy5vcHRpb25zLnVuaXF1ZSA/IHNoYTFzdW0odGhpcy5kYXRhKSA6IGN1aWQoKSl9YDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm90aWZ5U3VjY2Vzcykge1xuICAgICAgdGhpcy5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MgPSBgam9iOiR7dGhpcy5pZH06c3VjY2Vzc2A7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChgam9iOiR7dGhpcy5pZH06c3VjY2Vzc2ApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgdGhpcy5vcHRpb25zLm5vdGlmeUZhaWx1cmUgPSBgam9iOiR7dGhpcy5pZH06ZmFpbHVyZWA7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChgam9iOiR7dGhpcy5pZH06ZmFpbHVyZWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm90aWZ5U3VjY2VzcyB8fCB0aGlzLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgaWYgKCF0aGlzLmNvcmUucHVic3ViLm9wdGlvbnMuc3Vic2NyaWJlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKCdDYW5ub3Qgc3Vic2NyaWJlIHRvIGpvYiBldmVudHMgd2hlbiBSZWRpQm94LnB1YnN1YiBcXCdzdWJzY3JpYmVyXFwnIGNvbmZpZyBpcyBzZXQgdG8gZGlzYWJsZWQuJylcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29yZS5wdWJzdWIuc3Vic2NyaWJlT25jZU9mKFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMsXG4gICAgICAgIChtZXNzYWdlKSA9PiB7IC8vIG9uIG1lc3NhZ2UgcmVjZWl2ZWRcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHB1YnN1YiBkYXRhXG4gICAgICAgICAgaWYgKCFtZXNzYWdlLmRhdGEpIG1lc3NhZ2UuZGF0YSA9IHt9O1xuXG4gICAgICAgICAgLy8gaWYgdGhlcmUncyBhbiBlcnJvciB0aGVuIGFzc3VtZSBmYWlsZWQuXG4gICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YS5lcnJvcikgcmV0dXJuIHRoaXMub25GYWlsdXJlQ2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcblxuICAgICAgICAgIC8vIGlzIGl0IGZyb20gdGhlIHN1Y2Nlc3MgY2hhbm5lbC5cbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zWzBdID09PSBtZXNzYWdlLmNoYW5uZWwpIHJldHVybiB0aGlzLm9uU3VjY2Vzc0NhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5vbkZhaWx1cmVDYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICB0aGlzLm9wdGlvbnMudGltZW91dCArIDEwMDBcbiAgICAgICkudGhlbigoKSA9PiAgLy8gc3Vic2NyaWJlZCBjYWxsYmFja1xuICAgICAgICB0aGlzLl9zYXZlKClcbiAgICAgICkuY2F0Y2goZXJyb3IgPT5cbiAgICAgICAgdGhpcy5vbkZhaWx1cmVDYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogJ2pvYicsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignRXJyb3Igd2hpbGUgc3Vic2NyaWJpbmcgdG8gam9iIGV2ZW50cywgaG93ZXZlciB0aGlzIGpvYiB3aWxsIHN0aWxsIGJlIHF1ZXVlZCAtICcgK1xuICAgICAgICAgICAgJ3lvdSBtYXkgYmUgdW5hYmxlIHRvIHJlY2VpdmUgb25TdWNjZXNzIC8gb25GYWlsdXJlIGV2ZW50cyBmb3IgdGhpcyBqb2IuJyksXG4gICAgICAgICAgZXJyb3JfYWN0dWFsOiBlcnJvcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NhdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGpvYiB3aWxsIHJldHJ5IG9uIGZhaWx1cmVcbiAgICogQHBhcmFtIG5cbiAgICogQHJldHVybnMge0pvYn1cbiAgICovXG4gIHJldHJpZXMobikge1xuICAgIGlmIChuIDwgMCkgdGhyb3cgRXJyb3IoJ1JldHJpZXMgY2Fubm90IGJlIG5lZ2F0aXZlJyk7XG4gICAgdGhpcy5vcHRpb25zLnJldHJpZXMgPSBuIC0gMTtcbiAgICByZXR1cm4gdGhpcy5wcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG9uU3VjY2VzcyBjYWxsYmFjayBhbmQgbm90aWZ5IG9wdGlvblxuICAgKiBAcGFyYW0gbm90aWZ5XG4gICAqIEByZXR1cm5zIHtKb2J9XG4gICAqL1xuICBvblN1Y2Nlc3Mobm90aWZ5KSB7XG4gICAgdGhpcy5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRoaXMub25TdWNjZXNzQ2FsbGJhY2sgPSBub3RpZnk7XG4gICAgaWYgKCF0aGlzLm9uRmFpbHVyZUNhbGxiYWNrKSB0aGlzLm9uRmFpbHVyZUNhbGxiYWNrID0gbm9vcDtcbiAgICByZXR1cm4gdGhpcy5wcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG9uRmFpbHVyZSBjYWxsYmFjayBhbmQgbm90aWZ5IG9wdGlvblxuICAgKiBAcGFyYW0gbm90aWZ5XG4gICAqIEByZXR1cm5zIHtKb2J9XG4gICAqL1xuICBvbkZhaWx1cmUobm90aWZ5KSB7XG4gICAgdGhpcy5vcHRpb25zLm5vdGlmeUZhaWx1cmUgPSB0cnVlO1xuICAgIHRoaXMub25GYWlsdXJlQ2FsbGJhY2sgPSBub3RpZnk7XG4gICAgaWYgKCF0aGlzLm9uU3VjY2Vzc0NhbGxiYWNrKSB0aGlzLm9uU3VjY2Vzc0NhbGxiYWNrID0gbm9vcDtcbiAgICByZXR1cm4gdGhpcy5wcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYm9vbFxuICAgKiBAcmV0dXJucyB7Sm9ifVxuICAgKi9cbiAgdW5pcXVlKGJvb2wpIHtcbiAgICB0aGlzLm9wdGlvbnMudW5pcXVlID0gYm9vbDtcbiAgICByZXR1cm4gdGhpcy5wcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaG93IGxvbmcgdGhpcyBqb2IgY2FuIHJlbWFpbiBydW5uaW5nIGZvciBiZWZvcmUgaXQgdGltZXMgb3V0LlxuICAgKiBAcGFyYW0gbXNcbiAgICogQHJldHVybnMge0pvYn1cbiAgICovXG4gIHRpbWVvdXQobXMpIHtcbiAgICB0aGlzLm9wdGlvbnMudGltZW91dCA9IG1zO1xuICAgIHJldHVybiB0aGlzLnByb3h5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHF1ZXVlIHByZWZpeGVkIGtleSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc3RyaW5nLlxuICAgKiBAcGFyYW0gc3RyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdG9RdWV1ZUtleShzdHIpIHtcbiAgICBpZiAodGhpcy5jb3JlLmNsdXN0ZXIuaXNDbHVzdGVyKCkpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvcmUuaG9va3Muam9iLm9wdGlvbnMua2V5UHJlZml4fTp7JHt0aGlzLnF1ZXVlTmFtZX19OiR7c3RyfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmNvcmUuaG9va3Muam9iLm9wdGlvbnMua2V5UHJlZml4fToke3RoaXMucXVldWVOYW1lfToke3N0cn1gO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgSm9iO1xuXG4vLyBFeHBlcmltZW50YWwgY29kZSBiZWxvdyBpcyBUT0RPXG5cbi8vIC8qKlxuLy8gICpcbi8vICAqIEByZXR1cm5zIHtKb2IuaW5pdGlhbEpvYnwqfVxuLy8gICovXG4vLyBpbml0aWFsSm9iKCkge1xuLy8gICByZXR1cm4gdGhpcy5faW50ZXJuYWxEYXRhLmluaXRpYWxKb2I7XG4vLyB9XG4vL1xuLy8gLyoqXG4vLyAgKlxuLy8gICogQHJldHVybnMge0pvYi5pbml0aWFsUXVldWV8Kn1cbi8vICAqL1xuLy8gaW5pdGlhbFF1ZXVlKCkge1xuLy8gICByZXR1cm4gdGhpcy5faW50ZXJuYWxEYXRhLmluaXRpYWxRdWV1ZTtcbi8vIH1cblxuLyoqXG4gKlxuICogQHBhcmFtIGpvYklkXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuLy8gZ2V0Sm9iKGpvYklkKSB7XG4vLyAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4vLyAgICAgaWYgKGpvYklkIGluIHRoaXMuam9icykge1xuLy8gICAgICAgLy8gd2UgaGF2ZSB0aGUgam9iIGxvY2FsbHlcbi8vICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuam9ic1tqb2JJZF0pO1xuLy8gICAgIH1cbi8vICAgICAvLyBub3QgbG9jYWwgc28gZ2F0aGVyIGZyb20gcmVkaXNcbi8vICAgICBKb2IuZnJvbUlkKHRoaXMsIGpvYklkKVxuLy8gICAgICAgIC50aGVuKGpvYiA9PiB7XG4vLyAgICAgICAgICB0aGlzLmpvYnNbam9iSWRdID0gam9iO1xuLy8gICAgICAgICAgcmV0dXJuIHJlc29sdmUoam9iKTtcbi8vICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuLy8gICB9KTtcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqIFJlbW92ZSB0aGlzIGpvYiBmcm9tIGFsbCBzZXRzLlxuLy8gICogQHBhcmFtIGNiXG4vLyAgKi9cbi8vIHJlbW92ZShjYiA9IG5vb3ApIHtcbi8vICAgdGhpcy5jb3JlLmNsaWVudC5yZW1vdmVqb2IoXG4vLyAgICAgdGhpcy5fdG9RdWV1ZUtleSgnc3VjY2VlZGVkJyksIHRoaXMuX3RvUXVldWVLZXkoJ2ZhaWxlZCcpLCB0aGlzLl90b1F1ZXVlS2V5KCd3YWl0aW5nJyksXG4vLyAgICAgdGhpcy5fdG9RdWV1ZUtleSgnYWN0aXZlJyksIHRoaXMuX3RvUXVldWVLZXkoJ3N0YWxsaW5nJyksIHRoaXMuX3RvUXVldWVLZXkoJ2pvYnMnKSxcbi8vICAgICB0aGlzLmlkLCBjYik7XG4vLyB9XG4vL1xuLy8gLyoqXG4vLyAgKiBSZS1zYXZlIHRoaXMgam9iIGZvciB0aGUgcHVycG9zZSBvZiByZXRyeWluZyBpdC5cbi8vICAqIEBwYXJhbSBjYlxuLy8gICovXG4vLyByZXRyeShjYiA9IG5vb3ApIHtcbi8vICAgdGhpcy5jb3JlLmNsaWVudC5tdWx0aSgpXG4vLyAgICAgICAuc3JlbSh0aGlzLl90b1F1ZXVlS2V5KCdmYWlsZWQnKSwgdGhpcy5pZClcbi8vICAgICAgIC5scHVzaCh0aGlzLl90b1F1ZXVlS2V5KCd3YWl0aW5nJyksIHRoaXMuaWQpXG4vLyAgICAgICAuZXhlYyhjYik7XG4vLyB9XG4vL1xuLy8gLyoqXG4vLyAgKiBDYWxsYmFja3MgdHJ1ZSBvZiBmYWxzZSBpZiB0aGlzIGpvYiBleGlzdHMgaW4gdGhlIHNwZWNpZmllZCBzZXQuXG4vLyAgKiBAcGFyYW0gc2V0XG4vLyAgKiBAcGFyYW0gY2Jcbi8vICAqL1xuLy8gaXNJblNldChzZXQsIGNiID0gbm9vcCkge1xuLy8gICB0aGlzLmNvcmUuY2xpZW50LnNpc21lbWJlcih0aGlzLl90b1F1ZXVlS2V5KHNldCksIHRoaXMuaWQsIChlcnIsIHJlc3VsdCkgPT4ge1xuLy8gICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuLy8gICAgIHJldHVybiBjYihudWxsLCByZXN1bHQgPT09IDEpO1xuLy8gICB9KTtcbi8vIH1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,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Z0IsR0FBaEIsQ0FBb0IsT0FBcEIsQ0FBNEIsU0FBVSxNQUFHLEtBQUssU0FBVSxNQUFHLEdBQUksR0FBekU7QUFDRDs7QUE3Uk8sQyxDQWpDVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBa1VlLEc7O0FBRWY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqb2IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgU2FsYWthclxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKlxuICovXG5cbmltcG9ydCBjdWlkIGZyb20gJ2N1aWQnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgbm9vcCwgc2hhMXN1bSwgdHJ5SlNPTlN0cmluZ2lmeSwgdHJ5SlNPTlBhcnNlIH0gZnJvbSAncmVkaWJveCc7XG5cbi8qKlxuICogQGNsYXNzIEpvYlxuICovXG5jbGFzcyBKb2Ige1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29yZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHBhcmFtIHF1ZXVlTmFtZVxuICAgKiBAcGFyYW0gaXNOZXdcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb3JlLCBpZCwgZGF0YSA9IHt9LCBvcHRpb25zID0ge1xuICAgIHVuaXF1ZTogZmFsc2UsXG4gICAgdGltZW91dDogNjAwMDAsIC8vIDEgbWludXRlIGRlZmF1bHQgdGltZW91dFxuICB9LCBxdWV1ZU5hbWUsIGlzTmV3KSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuY29yZSA9IGNvcmU7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLl9zYXZlZCA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0dXMgPSAnY3JlYXRlZCc7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy5pZ25vcmVQcm94eSA9IGZhbHNlO1xuICAgIHRoaXMucXVldWVOYW1lID0gcXVldWVOYW1lO1xuICAgIHRoaXMudHlwZSA9IGRhdGEucnVucyAmJiBBcnJheS5pc0FycmF5KGRhdGEucnVucykgPyAncmVsYXknIDogJ3NpbmdsZSc7XG5cbiAgICAvLyBwYXJlbnQgcmVsYXkgam9iIHRpbWVvdXQgc2hvdWxkIGNvdmVyIGFsbCBjaGlsZCBqb2IgdGltZW91dHNcbiAgICBpZiAodGhpcy50eXBlID09PSAncmVsYXknKSB0aGlzLm9wdGlvbnMudGltZW91dCA9IHRoaXMub3B0aW9ucy50aW1lb3V0ICogZGF0YS5ydW5zLmxlbmd0aDtcblxuICAgIGlmIChpc05ldykge1xuICAgICAgLy8gdGhpcyBQcm94eSBhbGxvd3MgY2hhaW5pbmcgbWV0aG9kcyB3aGlsZSBzdGlsbCBrZWVwaW5nIHRoZVxuICAgICAgLy8gc2F2ZSgpIHByb21pc2UgdmFsaWRcbiAgICAgIHRoaXMucHJveHkgPSBuZXcgUHJveHkodGhpcywge1xuICAgICAgICBnZXQodGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgICAgaWYgKG5hbWUgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGhheHhvcnNcbiAgICAgICAgICBpZiAoIXRhcmdldC5pZ25vcmVQcm94eSAmJiBuYW1lID09PSAndGhlbicpIHtcbiAgICAgICAgICAgIHRhcmdldC5wcm9taXNlID0gdGFyZ2V0LnNhdmUoKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQucHJvbWlzZS50aGVuLmJpbmQodGFyZ2V0LnByb21pc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMucHJveHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBqb2IgaW5zdGFuY2Ugd2l0aCBubyBwcm94eVxuICAgKiBAcmV0dXJucyB7Sm9ifVxuICAgKi9cbiAgd2l0aG91dFByb3h5KCkge1xuICAgIHRoaXMuaWdub3JlUHJveHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHJlZGlzIGZvciB0aGUgc3BlY2lmaWVkIGpvYiBpZCBhbmQgY29udmVydHMgaXQgdG8gYSBuZXcgaW5zdGFuY2Ugb2YgSm9iLlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSBxdWV1ZVxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIHN0YXRpYyBmcm9tSWQocXVldWUsIGlkKSB7XG4gICAgcmV0dXJuIHF1ZXVlLmNsaWVudC5oZ2V0KHF1ZXVlLnRvS2V5KCdqb2JzJyksIGlkKS50aGVuKChkYXRhKSA9PlxuICAgICAgSm9iLmZyb21EYXRhKHF1ZXVlLCBpZCwgZGF0YSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgSlNPTiBzdHJpbmcgb2YgYSBqb2IncyBkYXRhIHRvIGEgbmV3IGluc3RhbmNlIG9mIEpvYlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSBxdWV1ZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMge0pvYiB8IG51bGx9XG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGEoLi4uYXJncykge1xuICAgIGNvbnN0IG9iaiA9IHRyeUpTT05QYXJzZShhcmdzWzJdKTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgam9iID0gbmV3IEpvYihhcmdzWzBdLmNvcmUsIGFyZ3NbMV0sIG9iai5kYXRhLCBvYmoub3B0aW9ucywgYXJnc1swXS5uYW1lKTtcbiAgICBqb2Iuc3RhdHVzID0gb2JqLmRhdGEuc3RhdHVzO1xuICAgIHJldHVybiBqb2I7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIEpvYiBpbnN0YW5jZSB0byBhIGpzb24gc3RyaW5nLlxuICAgKi9cbiAgdG9EYXRhKCkge1xuICAgIHJldHVybiB0cnlKU09OU3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHRvT2JqZWN0KGV4Y2x1ZGVEYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgZGF0YTogZXhjbHVkZURhdGEgPyAnaGlkZGVuJyA6IHRoaXMuZGF0YSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBzYXZlIHRoYXQgcHVzaGVzIHRvIHJlZGlzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy5jb3JlLmxvZy52ZXJib3NlKGBTYXZpbmcgbmV3IGpvYiAke3RoaXMuaWR9IGZvciAke3RoaXMucXVldWVOYW1lfWApO1xuICAgIHJldHVybiB0aGlzLmNvcmUuY2xpZW50LmFkZGpvYihcbiAgICAgIHRoaXMuX3RvUXVldWVLZXkoJ2pvYnMnKSxcbiAgICAgIHRoaXMuX3RvUXVldWVLZXkoJ3dhaXRpbmcnKSxcbiAgICAgIHRoaXMuX3RvUXVldWVLZXkoJ2lkJyksXG4gICAgICB0aGlzLnRvRGF0YSgpLFxuICAgICAgISF0aGlzLm9wdGlvbnMudW5pcXVlLFxuICAgICAgdGhpcy5pZCkudGhlbigoaWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51bmlxdWUgJiYgaWQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdkdXBsaWNhdGUnO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEVSUl9EVVBMSUNBVEU6IEpvYiAke3RoaXMuaWR9IGFscmVhZHkgZXhpc3RzLCBzYXZlIGhhcyBiZWVuIGFib3J0ZWQuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgICAgIC8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG4gICAgICAgICAgY29uc3Qgam9iRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YS5kYXRhIHx8IHt9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgICAgICAgdHlwZTogJ3JlZGlib3hfam9iX2NyZWF0ZWQnLFxuICAgICAgICAgICAgam9iOiB7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLmlkLnRvU3RyaW5nID8gdGhpcy5pZC50b1N0cmluZygpIDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgcnVuczogdGhpcy5kYXRhLnJ1bnMsXG4gICAgICAgICAgICAgIHF1ZXVlOiB0aGlzLnF1ZXVlTmFtZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAncGVuZGluZycsXG4gICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEubGVuZ3RoID4gNDAwMCA/ICc8ISBqb2IgZGF0YSB0b28gbGFyZ2UgdG8gZGlzcGxheSAhPicgOiB0aGlzLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb3JlLmxvZy52ZXJib3NlKGBTYXZlZCBqb2IgZm9yICR7dGhpcy5xdWV1ZU5hbWV9YCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAnc2F2ZWQnO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudG9PYmplY3QodHJ1ZSkpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGlzIGluc3RhbmNlIG9mIEpvYiB0byByZWRpcy4gQW55IGFjdGl2ZSBxdWV1ZXMgd2lsbCBwaWNrIGl0IHVwXG4gICAqIGltbWVkaWF0ZWx5IGZvciBwcm9jZXNzaW5nLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHNhdmUoYXV0bykge1xuICAgIGlmICghYXV0byAmJiB0aGlzLl9zYXZlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gbG9jayBpdCBzbyBhdXRvU2F2ZSBkb2Vzbid0IHBpY2sgaXQgdXAgYnV0IG9ubHkgZGVsZXRlcyBpdCBmcm9tIHF1ZXVlXG4gICAgdGhpcy5fc2F2ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5pZCA9IGAke3RoaXMucXVldWVOYW1lfS0keyh0aGlzLm9wdGlvbnMudW5pcXVlID8gc2hhMXN1bSh0aGlzLmRhdGEpIDogY3VpZCgpKX1gO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub3RpZnlTdWNjZXNzKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubm90aWZ5U3VjY2VzcyA9IGBqb2I6JHt0aGlzLmlkfTpzdWNjZXNzYDtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGBqb2I6JHt0aGlzLmlkfTpzdWNjZXNzYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub3RpZnlGYWlsdXJlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubm90aWZ5RmFpbHVyZSA9IGBqb2I6JHt0aGlzLmlkfTpmYWlsdXJlYDtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGBqb2I6JHt0aGlzLmlkfTpmYWlsdXJlYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub3RpZnlTdWNjZXNzIHx8IHRoaXMub3B0aW9ucy5ub3RpZnlGYWlsdXJlKSB7XG4gICAgICBpZiAoIXRoaXMuY29yZS5wdWJzdWIub3B0aW9ucy5zdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoJ0Nhbm5vdCBzdWJzY3JpYmUgdG8gam9iIGV2ZW50cyB3aGVuIFJlZGlCb3gucHVic3ViIFxcJ3N1YnNjcmliZXJcXCcgY29uZmlnIGlzIHNldCB0byBkaXNhYmxlZC4nKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb3JlLnB1YnN1Yi5zdWJzY3JpYmVPbmNlT2YoXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyxcbiAgICAgICAgKG1lc3NhZ2UpID0+IHsgLy8gb24gbWVzc2FnZSByZWNlaXZlZFxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcHVic3ViIGRhdGFcbiAgICAgICAgICBpZiAoIW1lc3NhZ2UuZGF0YSkgbWVzc2FnZS5kYXRhID0ge307XG5cbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIGFuIGVycm9yIHRoZW4gYXNzdW1lIGZhaWxlZC5cbiAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhLmVycm9yKSByZXR1cm4gdGhpcy5vbkZhaWx1cmVDYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuXG4gICAgICAgICAgLy8gaXMgaXQgZnJvbSB0aGUgc3VjY2VzcyBjaGFubmVsLlxuICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnNbMF0gPT09IG1lc3NhZ2UuY2hhbm5lbCkgcmV0dXJuIHRoaXMub25TdWNjZXNzQ2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLm9uRmFpbHVyZUNhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMub3B0aW9ucy50aW1lb3V0ICsgMTAwMFxuICAgICAgKS50aGVuKCgpID0+ICAvLyBzdWJzY3JpYmVkIGNhbGxiYWNrXG4gICAgICAgIHRoaXMuX3NhdmUoKVxuICAgICAgKS5jYXRjaChlcnJvciA9PlxuICAgICAgICB0aGlzLm9uRmFpbHVyZUNhbGxiYWNrKHtcbiAgICAgICAgICB0eXBlOiAnam9iJyxcbiAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdFcnJvciB3aGlsZSBzdWJzY3JpYmluZyB0byBqb2IgZXZlbnRzLCBob3dldmVyIHRoaXMgam9iIHdpbGwgc3RpbGwgYmUgcXVldWVkIC0gJyArXG4gICAgICAgICAgICAneW91IG1heSBiZSB1bmFibGUgdG8gcmVjZWl2ZSBvblN1Y2Nlc3MgLyBvbkZhaWx1cmUgZXZlbnRzIGZvciB0aGlzIGpvYi4nKSxcbiAgICAgICAgICBlcnJvcl9hY3R1YWw6IGVycm9yLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2F2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgam9iIHdpbGwgcmV0cnkgb24gZmFpbHVyZVxuICAgKiBAcGFyYW0gblxuICAgKiBAcmV0dXJucyB7Sm9ifVxuICAgKi9cbiAgcmV0cmllcyhuKSB7XG4gICAgaWYgKG4gPCAwKSB0aHJvdyBFcnJvcignUmV0cmllcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcbiAgICB0aGlzLm9wdGlvbnMucmV0cmllcyA9IG4gLSAxO1xuICAgIHJldHVybiB0aGlzLnByb3h5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgb25TdWNjZXNzIGNhbGxiYWNrIGFuZCBub3RpZnkgb3B0aW9uXG4gICAqIEBwYXJhbSBub3RpZnlcbiAgICogQHJldHVybnMge0pvYn1cbiAgICovXG4gIG9uU3VjY2Vzcyhub3RpZnkpIHtcbiAgICB0aGlzLm9wdGlvbnMubm90aWZ5U3VjY2VzcyA9IHRydWU7XG4gICAgdGhpcy5vblN1Y2Nlc3NDYWxsYmFjayA9IG5vdGlmeTtcbiAgICBpZiAoIXRoaXMub25GYWlsdXJlQ2FsbGJhY2spIHRoaXMub25GYWlsdXJlQ2FsbGJhY2sgPSBub29wO1xuICAgIHJldHVybiB0aGlzLnByb3h5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgb25GYWlsdXJlIGNhbGxiYWNrIGFuZCBub3RpZnkgb3B0aW9uXG4gICAqIEBwYXJhbSBub3RpZnlcbiAgICogQHJldHVybnMge0pvYn1cbiAgICovXG4gIG9uRmFpbHVyZShub3RpZnkpIHtcbiAgICB0aGlzLm9wdGlvbnMubm90aWZ5RmFpbHVyZSA9IHRydWU7XG4gICAgdGhpcy5vbkZhaWx1cmVDYWxsYmFjayA9IG5vdGlmeTtcbiAgICBpZiAoIXRoaXMub25TdWNjZXNzQ2FsbGJhY2spIHRoaXMub25TdWNjZXNzQ2FsbGJhY2sgPSBub29wO1xuICAgIHJldHVybiB0aGlzLnByb3h5O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBib29sXG4gICAqIEByZXR1cm5zIHtKb2J9XG4gICAqL1xuICB1bmlxdWUoYm9vbCkge1xuICAgIHRoaXMub3B0aW9ucy51bmlxdWUgPSBib29sO1xuICAgIHJldHVybiB0aGlzLnByb3h5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBob3cgbG9uZyB0aGlzIGpvYiBjYW4gcmVtYWluIHJ1bm5pbmcgZm9yIGJlZm9yZSBpdCB0aW1lcyBvdXQuXG4gICAqIEBwYXJhbSBtc1xuICAgKiBAcmV0dXJucyB7Sm9ifVxuICAgKi9cbiAgdGltZW91dChtcykge1xuICAgIHRoaXMub3B0aW9ucy50aW1lb3V0ID0gbXM7XG4gICAgcmV0dXJuIHRoaXMucHJveHk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgcXVldWUgcHJlZml4ZWQga2V5IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzdHJpbmcuXG4gICAqIEBwYXJhbSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90b1F1ZXVlS2V5KHN0cikge1xuICAgIGlmICh0aGlzLmNvcmUuY2x1c3Rlci5pc0NsdXN0ZXIoKSkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuY29yZS5ob29rcy5qb2Iub3B0aW9ucy5rZXlQcmVmaXh9Onske3RoaXMucXVldWVOYW1lfX06JHtzdHJ9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuY29yZS5ob29rcy5qb2Iub3B0aW9ucy5rZXlQcmVmaXh9OiR7dGhpcy5xdWV1ZU5hbWV9OiR7c3RyfWA7XG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBKb2I7XG5cbi8vIEV4cGVyaW1lbnRhbCBjb2RlIGJlbG93IGlzIFRPRE9cblxuLy8gLyoqXG4vLyAgKlxuLy8gICogQHJldHVybnMge0pvYi5pbml0aWFsSm9ifCp9XG4vLyAgKi9cbi8vIGluaXRpYWxKb2IoKSB7XG4vLyAgIHJldHVybiB0aGlzLl9pbnRlcm5hbERhdGEuaW5pdGlhbEpvYjtcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqXG4vLyAgKiBAcmV0dXJucyB7Sm9iLmluaXRpYWxRdWV1ZXwqfVxuLy8gICovXG4vLyBpbml0aWFsUXVldWUoKSB7XG4vLyAgIHJldHVybiB0aGlzLl9pbnRlcm5hbERhdGEuaW5pdGlhbFF1ZXVlO1xuLy8gfVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gam9iSWRcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG4vLyBnZXRKb2Ioam9iSWQpIHtcbi8vICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbi8vICAgICBpZiAoam9iSWQgaW4gdGhpcy5qb2JzKSB7XG4vLyAgICAgICAvLyB3ZSBoYXZlIHRoZSBqb2IgbG9jYWxseVxuLy8gICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5qb2JzW2pvYklkXSk7XG4vLyAgICAgfVxuLy8gICAgIC8vIG5vdCBsb2NhbCBzbyBnYXRoZXIgZnJvbSByZWRpc1xuLy8gICAgIEpvYi5mcm9tSWQodGhpcywgam9iSWQpXG4vLyAgICAgICAgLnRoZW4oam9iID0+IHtcbi8vICAgICAgICAgIHRoaXMuam9ic1tqb2JJZF0gPSBqb2I7XG4vLyAgICAgICAgICByZXR1cm4gcmVzb2x2ZShqb2IpO1xuLy8gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4vLyAgIH0pO1xuLy8gfVxuLy9cbi8vIC8qKlxuLy8gICogUmVtb3ZlIHRoaXMgam9iIGZyb20gYWxsIHNldHMuXG4vLyAgKiBAcGFyYW0gY2Jcbi8vICAqL1xuLy8gcmVtb3ZlKGNiID0gbm9vcCkge1xuLy8gICB0aGlzLmNvcmUuY2xpZW50LnJlbW92ZWpvYihcbi8vICAgICB0aGlzLl90b1F1ZXVlS2V5KCdzdWNjZWVkZWQnKSwgdGhpcy5fdG9RdWV1ZUtleSgnZmFpbGVkJyksIHRoaXMuX3RvUXVldWVLZXkoJ3dhaXRpbmcnKSxcbi8vICAgICB0aGlzLl90b1F1ZXVlS2V5KCdhY3RpdmUnKSwgdGhpcy5fdG9RdWV1ZUtleSgnc3RhbGxpbmcnKSwgdGhpcy5fdG9RdWV1ZUtleSgnam9icycpLFxuLy8gICAgIHRoaXMuaWQsIGNiKTtcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqIFJlLXNhdmUgdGhpcyBqb2IgZm9yIHRoZSBwdXJwb3NlIG9mIHJldHJ5aW5nIGl0LlxuLy8gICogQHBhcmFtIGNiXG4vLyAgKi9cbi8vIHJldHJ5KGNiID0gbm9vcCkge1xuLy8gICB0aGlzLmNvcmUuY2xpZW50Lm11bHRpKClcbi8vICAgICAgIC5zcmVtKHRoaXMuX3RvUXVldWVLZXkoJ2ZhaWxlZCcpLCB0aGlzLmlkKVxuLy8gICAgICAgLmxwdXNoKHRoaXMuX3RvUXVldWVLZXkoJ3dhaXRpbmcnKSwgdGhpcy5pZClcbi8vICAgICAgIC5leGVjKGNiKTtcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqIENhbGxiYWNrcyB0cnVlIG9mIGZhbHNlIGlmIHRoaXMgam9iIGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIHNldC5cbi8vICAqIEBwYXJhbSBzZXRcbi8vICAqIEBwYXJhbSBjYlxuLy8gICovXG4vLyBpc0luU2V0KHNldCwgY2IgPSBub29wKSB7XG4vLyAgIHRoaXMuY29yZS5jbGllbnQuc2lzbWVtYmVyKHRoaXMuX3RvUXVldWVLZXkoc2V0KSwgdGhpcy5pZCwgKGVyciwgcmVzdWx0KSA9PiB7XG4vLyAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycik7XG4vLyAgICAgcmV0dXJuIGNiKG51bGwsIHJlc3VsdCA9PT0gMSk7XG4vLyAgIH0pO1xuLy8gfVxuIl19

@@ -189,3 +189,3 @@ 'use strict';

/* eslint no-console: 0 */
const jobData = JSON.stringify(job.data.data);
const jobData = JSON.stringify(job.data.data || {});
console.log(JSON.stringify({

@@ -363,3 +363,3 @@ level: 'error',

/* eslint no-console: 0 */
const jobData = JSON.stringify(job.data.data);
const jobData = JSON.stringify(job.data.data || {});
console.log(JSON.stringify({

@@ -559,2 +559,2 @@ level: 'verbose',

exports.default = Queue;
//# sourceMappingURL=data:application/json;base64,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Q2QsQ0FIRDs7QUFLQSxXQUFPLEtBQUssVUFBTCxFQUFQO0FBQ0Q7O0FBRUQ7Ozs7QUFJQSxxQkFBbUI7QUFDakIsU0FBSyxHQUFMLENBQVMsT0FBVCxDQUFrQixJQUFFLEtBQUssSUFBSyxxQkFBOUI7QUFDQSxXQUFPLEtBQUssTUFBTCxDQUFZLGdCQUFaLENBQ0wsS0FBSyxLQUFMLENBQVcsV0FBWCxDQURLLEVBRUwsS0FBSyxLQUFMLENBQVcsVUFBWCxDQUZLLEVBR0wsS0FBSyxLQUFMLENBQVcsU0FBWCxDQUhLLEVBSUwsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUpLLEVBS0wsNEJBTEssRUFNTCxLQUFLLE9BQUwsQ0FBYSxhQU5SLEVBT0wsSUFQSyxDQU9BLE1BQU07QUFDWCxVQUFJLENBQUMsS0FBSyxPQUFMLENBQWEsT0FBZCxJQUF5QixLQUFLLE1BQWxDLEVBQTBDLE9BQU8sbUJBQVEsT0FBUixFQUFQO0FBQzFDLGFBQU8sbUJBQVEsS0FBUixDQUFjLEtBQUssT0FBTCxDQUFhLGFBQTNCLEVBQTBDLElBQTFDLENBQWlELEtBQUssZ0JBQXRELE1BQWlELElBQWpELEVBQVA7QUFDRCxLQVZNLENBQVA7QUFXRDs7QUFFRDs7Ozs7QUFLQSxRQUFNLEdBQU4sRUFBVztBQUNULFFBQUksS0FBSyxJQUFMLENBQVUsT0FBVixDQUFrQixTQUFsQixFQUFKLEVBQW1DO0FBQ2pDLGFBQVEsSUFBRSxLQUFLLE9BQUwsQ0FBYSxTQUFVLE9BQUksS0FBSyxJQUFLLE9BQUksR0FBSSxHQUF2RDtBQUNEO0FBQ0QsV0FBUSxJQUFFLEtBQUssT0FBTCxDQUFhLFNBQVUsTUFBRyxLQUFLLElBQUssTUFBRyxHQUFJLEdBQXJEO0FBQ0Q7O0FBRUQ7Ozs7O0FBeGY4QztrQkFBM0IsSyIsImZpbGUiOiJxdWV1ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBKb2IgZnJvbSAnLi9qb2InO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCB7IGRlZXBHZXQsIGlzT2JqZWN0LCBnZXRUaW1lU3RhbXAsIHRyeUpTT05QYXJzZSB9IGZyb20gJ3JlZGlib3gnO1xuXG4vKipcbiAqIFRPRE8gbW92ZSB0byBoZWxwZXJzXG4gKiBAcGFyYW0gZXJyb3JTdGFja1xuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0cmltU3RhY2soZXJyb3JTdGFjaykge1xuICBjb25zdCBvbGRTdGFjayA9IGVycm9yU3RhY2suc3BsaXQoJ1xcbicpO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBmb3IgKGxldCBpID0gMCwgaUxlbiA9IG9sZFN0YWNrLmxlbmd0aCB8fCBzdGFjay5sZW5ndGggPiAxOTsgaSA8IGlMZW47IGkrKykge1xuICAgIGNvbnN0IHJvdyA9IG9sZFN0YWNrW2ldO1xuXG4gICAgLy8gaW5jbHVkZSBwcml2YXRlIG1vZHVsZXNcbiAgICBpZiAocm93LmluY2x1ZGVzKCdAJykpIHtcbiAgICAgIHN0YWNrLnB1c2gocm93KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGV4Y2x1ZGUgam9iIG1vZHVsZVxuICAgIGlmIChyb3cuaW5jbHVkZXMoJ3JlZGlib3gtaG9vay1qb2InKSB8fCByb3cuaW5jbHVkZXMoJ3JlZGlib3gvam9iL2xpYicpKSBjb250aW51ZTtcblxuICAgIC8vIGV4Y2x1ZGUgYmx1ZWJpcmRcbiAgICBpZiAocm93LmluY2x1ZGVzKCdibHVlYmlyZCcpKSBjb250aW51ZTtcblxuICAgIC8vIGV4Y2x1ZGUgd2F0ZXJsaW5lXG4gICAgaWYgKHJvdy5pbmNsdWRlcygnd2F0ZXJsaW5lL2xpYicpKSBjb250aW51ZTtcblxuICAgIC8vIGV4Y2x1ZGUgd2F0ZXJsaW5lXG4gICAgaWYgKHJvdy5pbmNsdWRlcygnYXN5bmMvbGliJykpIGNvbnRpbnVlO1xuXG4gICAgLy8gZXhjbHVkZSB0aW1lcnMuanNcbiAgICBpZiAocm93LmluY2x1ZGVzKCd0aW1lcnMuanM6JykpIGNvbnRpbnVlO1xuXG4gICAgc3RhY2sucHVzaChyb3cpO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBjb3JlXG4gICAqIEByZXR1cm5zIHtRdWV1ZX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvcmUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29yZSA9IGNvcmU7XG4gICAgdGhpcy5jbGllbnQgPSBjb3JlLmNsaWVudDtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgdGhpcy5sb2cgPSB0aGlzLmNvcmUubG9nO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBvcHRpb25zLmhhbmRsZXIgfHwgbnVsbDtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cy5xdWV1ZSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5jb3JlLmNyZWF0ZUNsaWVudCgnYmxvY2snLCB0aGlzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYEJsb2NraW5nIGNsaWVudCBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScgaXMgcmVhZHkuIFN0YXJ0aW5nIHF1ZXVlIHByb2Nlc3Nvci5gKTtcbiAgICAgIHRoaXMuYmVnaW5Xb3JraW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAnaWQnLCAnam9icycsICdzdGFsbFRpbWUnLCAnc3RhbGxpbmcnLCAnd2FpdGluZycsICdhY3RpdmUnLCAnc3VjY2VlZGVkJywgJ2ZhaWxlZCcsXG4gICAgXS5tYXAoa2V5ID0+IHRoaXMudG9LZXkoa2V5KSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbCguLi5rZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNoZWNrSGVhbHRoKCkge1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuY2xpZW50Lm11bHRpKClcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSlcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ2FjdGl2ZScpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpKVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7IC8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FpdGluZzogcmVzdWx0c1swXVsxXSxcbiAgICAgICAgICBhY3RpdmU6IHJlc3VsdHNbMV1bMV0sXG4gICAgICAgICAgc3VjY2VlZGVkOiByZXN1bHRzWzJdWzFdLFxuICAgICAgICAgIGZhaWxlZDogcmVzdWx0c1szXVsxXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2dldE5leHRKb2IoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZShgR2V0dGluZyBuZXh0IGpvYiBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScuYCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50cy5ibG9jay5icnBvcGxwdXNoKFxuICAgICAgdGhpcy50b0tleSgnd2FpdGluZycpLFxuICAgICAgdGhpcy50b0tleSgnYWN0aXZlJyksIDBcbiAgICApLnRoZW4oam9iSWQgPT5cbiAgICAgIEpvYi5mcm9tSWQodGhpcywgam9iSWQpLnRoZW4oam9iID0+IHtcbiAgICAgICAgcmV0dXJuIGpvYjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gam9iXG4gICAqIEBwYXJhbSBqb2JFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2xvZ0pvYkZhaWx1cmUoam9iLCBqb2JFcnJvcikge1xuICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIGpvYkVycm9yID09PSAnc3RyaW5nJyA/IG5ldyBFcnJvcihqb2JFcnJvcikgOiBqb2JFcnJvcjtcbiAgICBjb25zdCBzdGFjayA9IHRyaW1TdGFjayhlcnJvci5zdGFjayk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuS1VCRVJORVRFU19QT1JUIHx8IHByb2Nlc3MuZW52LktVQkVSTkVURVNfU0VSVklDRV9IT1NUKSB7XG4gICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuICAgICAgY29uc3Qgam9iRGF0YSA9IEpTT04uc3RyaW5naWZ5KGpvYi5kYXRhLmRhdGEpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgdHlwZTogJ3JlZGlib3hfam9iX2ZhaWx1cmUnLFxuICAgICAgICBqb2I6IHtcbiAgICAgICAgICBpZDogam9iLmlkLnRvU3RyaW5nID8gam9iLmlkLnRvU3RyaW5nKCkgOiBqb2IuaWQsXG4gICAgICAgICAgcnVuczogam9iLmRhdGEucnVucyxcbiAgICAgICAgICBxdWV1ZTogdGhpcy5uYW1lLFxuICAgICAgICAgIGRhdGE6IGpvYkRhdGEubGVuZ3RoID4gNDAwMCA/ICc8ISBqb2IgZGF0YSB0b28gbGFyZ2UgdG8gZGlzcGxheSAhPicgOiBqb2IuZGF0YS5kYXRhLFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignJyk7XG4gICAgICB0aGlzLmxvZy5lcnJvcignLS0tLS0tLS0tLS0tLS0tIFJEQiBKT0IgRVJST1IvRkFJTFVSRSAtLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBKb2I6ICR7am9iLmRhdGEucnVuc31gIHx8IHRoaXMubmFtZSk7XG4gICAgICBlcnJvci5zdGFjayA9IHN0YWNrLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX3J1bkpvYihqb2IpIHtcbiAgICBpZiAoIWpvYiB8fCAham9iLmRhdGEpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBjb25zdCBydW5zID0gam9iLmRhdGEgJiYgam9iLmRhdGEucnVucyAmJiBBcnJheS5pc0FycmF5KGpvYi5kYXRhLnJ1bnMpID8gam9iLmRhdGEucnVuc1swXSA6IGpvYi5kYXRhLnJ1bnM7XG4gICAgY29uc3QgaGFuZGxlciA9ICh0eXBlb2YgdGhpcy5oYW5kbGVyID09PSAnc3RyaW5nJyA/XG4gICAgICAgIGRlZXBHZXQoZ2xvYmFsLCB0aGlzLmhhbmRsZXIpIDogdGhpcy5oYW5kbGVyKSB8fCBkZWVwR2V0KGdsb2JhbCwgcnVucyk7XG5cbiAgICBsZXQgcHJldmVudFN0YWxsaW5nVGltZW91dDtcbiAgICBsZXQgaGFuZGxlZCA9IGZhbHNlO1xuICAgIGxldCBwcm9taXNlT3JSZXM7XG5cbiAgICAvLyBIYW5kbGUgYW4gXCJPS1wiIHJlc3BvbnNlIGZyb20gdGhlIHByb21pc2VcbiAgICBjb25zdCBoYW5kbGVPSyA9IGRhdGEgPT4ge1xuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHJldHVybiB2b2lkIDA7XG5cbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcbiAgICAgIGhhbmRsZWQgPSB0cnVlO1xuXG4gICAgICAvLyBzZXQgdGhlIGRhdGEgYmFjayB0byBpbnRlcm5hbCBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSByZWxheSB0byBuZXh0IGpvYiBpZiB1c2VyIGRpZCBub3QgcmVzb2x2ZSAnZmFsc2UnIG9uIGN1cnJlbnQgam9iXG4gICAgICBpZiAoam9iLnR5cGUgPT09ICdyZWxheScgJiYgZGF0YSAhPT0gZmFsc2UpIHJldHVybiB0aGlzLl9maW5pc2hSZWxheUpvYihudWxsLCBkYXRhLCBqb2IpO1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFNpbmdsZUpvYihudWxsLCBkYXRhLCBqb2IpO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgYW55IGVycm9ycyByZXR1cm5lZFxuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gam9iRXJyb3IgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHByZXZlbnRTdGFsbGluZ1RpbWVvdXQpO1xuXG4gICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYW55IG11bHRpcGxlIGNhbGxzXG4gICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgam9iIGRhdGFcbiAgICAgIGlmIChqb2IuX2ludGVybmFsRGF0YSkge1xuICAgICAgICBqb2IuZGF0YSA9IGpvYi5faW50ZXJuYWxEYXRhO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dKb2JGYWlsdXJlKGpvYiwgam9iRXJyb3IpO1xuXG4gICAgICBpZiAoam9iLnR5cGUgPT09ICdyZWxheScpIHJldHVybiB0aGlzLl9maW5pc2hSZWxheUpvYihqb2JFcnJvciwgbnVsbCwgam9iKTtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hTaW5nbGVKb2Ioam9iRXJyb3IsIG51bGwsIGpvYik7XG4gICAgfTtcblxuICAgIGNvbnN0IHByZXZlbnRTdGFsbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuY2xpZW50LnNyZW0odGhpcy50b0tleSgnc3RhbGxpbmcnKSwgam9iLmlkLCAoKSA9PiB7XG4gICAgICAgIGlmICghaGFuZGxlZCkge1xuICAgICAgICAgIHByZXZlbnRTdGFsbGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KHByZXZlbnRTdGFsbGluZywgdGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWwgLyAyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFwiJHtqb2IuZGF0YS5ydW5zIHx8ICdObyBKb2IgSGFuZGxlciBTcGVjaWZpZWQnfVwiIHdhcyBub3QgZm91bmQuIFNraXBwaW5nIGpvYi4gVG8gZml4IHRoaXNcbiAgICAgICAgICAgICB5b3UgbXVzdCBlaXRoZXIgc3BlY2lmeSBhIGhhbmRsZXIgZnVuY3Rpb24gdmlhIHF1ZXVlLnByb2Nlc3MoKSBvciBwcm92aWRlIGEgdmFsaWQgaGFuZGxlclxuICAgICAgICAgICAgIG5vZGUgZ2xvYmFsIHBhdGggaW4geW91ciBqb2Igb3B0aW9ucyAnaGFuZGxlcicsIGUuZy4gaWYgeW91IGhhZCBhIGdsb2JhbCBmdW5jdGlvbiBpblxuICAgICAgICAgICAgJ2dsb2JhbC5zYWlscy5zZXJ2aWNlcy5teXNlcnZpY2UnIHlvdSdkIHNwZWNpZnkgdGhlIGhhbmRsZXIgYXMgJ3NhaWxzLnNlcnZpY2VzLm15c2VydmljZS5teUhhbmRsZXInLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcmV2ZW50U3RhbGxpbmcoKTsgLy8gc3RhcnQgc3RhbGxpbmcgbW9uaXRvclxuXG4gICAgam9iLl9pbnRlcm5hbERhdGEgPSBqb2IuZGF0YTtcbiAgICBqb2IuZGF0YSA9IGpvYi5kYXRhLmRhdGEgfHwgam9iLmRhdGE7XG5cbiAgICBpZiAoam9iLm9wdGlvbnMudGltZW91dCkge1xuICAgICAgc2V0VGltZW91dChoYW5kbGVFcnJvci5iaW5kKG51bGwsIEVycm9yKGBKb2IgJHtqb2IuaWR9IHRpbWVkIG91dCAoJHtqb2Iub3B0aW9ucy50aW1lb3V0fW1zKWApKSwgam9iLm9wdGlvbnMudGltZW91dCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChqb2Iub3B0aW9ucy5ub0JpbmQgfHwgdGhpcy5vcHRpb25zLm5vQmluZCkge1xuICAgICAgICBwcm9taXNlT3JSZXMgPSBoYW5kbGVyKGpvYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlT3JSZXMgPSBoYW5kbGVyLmJpbmQoam9iLCBqb2IpKGpvYik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKGUpO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlT3JSZXMudGhlbiAmJiB0eXBlb2YgcHJvbWlzZU9yUmVzLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwcm9taXNlT3JSZXMudGhlbihoYW5kbGVPSywgaGFuZGxlRXJyb3IpLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlT0socHJvbWlzZU9yUmVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7e2pvYjoge2lkOiAqLCB3b3JrZXJfaWQ6ICgqfFN0cmluZ3xzdHJpbmcpLCBzdGF0dXM6IHN0cmluZ30sIGVycm9yOiAqLCBvdXRwdXQ6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgam9iOiB7XG4gICAgICAgIGlkOiBqb2IuaWQsXG4gICAgICAgIHdvcmtlcl9pZDogdGhpcy5jb3JlLmlkLFxuICAgICAgICBzdGF0dXM6IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJyxcbiAgICAgICAgLi4uam9iLmRhdGEsXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBvdXRwdXQ6IGRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcGFyYW0gbXVsdGlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG5cbiAgICBtdWx0aS5scmVtKHRoaXMudG9LZXkoJ2FjdGl2ZScpLCAwLCBqb2IuaWQpO1xuICAgIG11bHRpLnNyZW0odGhpcy50b0tleSgnc3RhbGxpbmcnKSwgam9iLmlkKTtcblxuICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICBpZiAoam9iLm9wdGlvbnMucmV0cmllcyA+IDApIHtcbiAgICAgICAgam9iLm9wdGlvbnMucmV0cmllcyA9IGpvYi5vcHRpb25zLnJldHJpZXMgLSAxO1xuICAgICAgICBqb2Iuc3RhdHVzID0gJ3JldHJ5aW5nJztcbiAgICAgICAgbXVsdGkuaHNldCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCwgam9iLnRvRGF0YSgpKTtcbiAgICAgICAgbXVsdGkubHB1c2godGhpcy50b0tleSgnd2FpdGluZycpLCBqb2IuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgICAgLy8gVE9ETyB0cmFjayBmYWlsdXJlcyBhbmQgdGhlaXIgZGF0YSBzb21ld2hlcmUgZWxzZSBmb3IgcmV2aWV3aW5nXG4gICAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIC8vIG11bHRpLnNhZGQodGhpcy50b0tleSgnZmFpbGVkJyksIGpvYi5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGpvYi5zdGF0dXMgPSAnc3VjY2VlZGVkJztcbiAgICAgIG11bHRpLmhkZWwodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQpO1xuICAgICAgLy8gVE9ETyB0cmFjayBzdWNjZXNzZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgLy8gbXVsdGkuaHNldCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCwgam9iLnRvRGF0YSgpKTtcbiAgICAgIC8vIG11bHRpLnNhZGQodGhpcy50b0tleSgnc3VjY2VlZGVkJyksIGpvYi5pZCk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuS1VCRVJORVRFU19QT1JUIHx8IHByb2Nlc3MuZW52LktVQkVSTkVURVNfU0VSVklDRV9IT1NUKSB7XG4gICAgICAgIC8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG4gICAgICAgIGNvbnN0IGpvYkRhdGEgPSBKU09OLnN0cmluZ2lmeShqb2IuZGF0YS5kYXRhKTtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGxldmVsOiAndmVyYm9zZScsXG4gICAgICAgICAgdHlwZTogJ3JlZGlib3hfam9iX2NvbXBsZXRlZCcsXG4gICAgICAgICAgam9iOiB7XG4gICAgICAgICAgICBpZDogam9iLmlkLnRvU3RyaW5nID8gam9iLmlkLnRvU3RyaW5nKCkgOiBqb2IuaWQsXG4gICAgICAgICAgICBydW5zOiBqb2IuZGF0YS5ydW5zLFxuICAgICAgICAgICAgcXVldWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIHN0YXR1czogam9iLnN0YXR1cyxcbiAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEubGVuZ3RoID4gNDAwMCA/ICc8ISBqb2IgZGF0YSB0b28gbGFyZ2UgdG8gZGlzcGxheSAhPicgOiBqb2IuZGF0YS5kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBfZmluaXNoU2luZ2xlSm9iKGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICBjb25zdCBtdWx0aSA9IHRoaXMuY2xpZW50Lm11bHRpKCk7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuICAgIHRoaXMuX3VwZGF0ZUpvYlN0YXR1cyhlcnJvciwgZGF0YSwgam9iLCBtdWx0aSk7XG5cbiAgICAvLyBlbWl0IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBldmVudCBpZiB3ZSBoYXZlIGxpc3RlbmVyc1xuICAgIGlmIChlcnJvciAmJiBqb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSwgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH0gZWxzZSBpZiAoam9iLm9wdGlvbnMubm90aWZ5U3VjY2Vzcykge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MsIHRoaXMuX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgIGlmIChlcnJNdWx0aSkgcmV0dXJuIHJlamVjdChlcnJNdWx0aSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgYSBtdWx0aSBqb2Igb3IgY29udGludWVzIHRvIHRoZSBuZXh0IHN0YWdlLlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maW5pc2hSZWxheUpvYihlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgbGV0IG5leHRRdWV1ZSA9IHRoaXMubmFtZTtcbiAgICBjb25zdCBuZXh0Sm9iID0gam9iLmRhdGEucnVuc1swXTtcbiAgICBjb25zdCBtdWx0aSA9IHRoaXMuY2xpZW50Lm11bHRpKCk7XG4gICAgY29uc3QgY3VycmVudEpvYiA9IGpvYi5kYXRhLnJ1bnMuc2hpZnQoKTtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG5cbiAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBmaXJzdCBqb2IgaW4gdGhpcyByZWxheSBpbnN0YW5jZVxuICAgIGlmICgham9iLmRhdGEuaW5pdGlhbEpvYikge1xuICAgICAgam9iLmRhdGEuaW5pdGlhbEpvYiA9IHRyeUpTT05QYXJzZShqb2IudG9EYXRhKCkpO1xuICAgIH1cblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2YgdGhlIGZpcnN0IHF1ZXVlIGluIHRoaXMgcmVsYXkgaW5zdGFuY2VcbiAgICBpZiAoIWpvYi5kYXRhLmluaXRpYWxRdWV1ZSkge1xuICAgICAgam9iLmRhdGEuaW5pdGlhbFF1ZXVlID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUpvYlN0YXR1cyhlcnJvciwgZGF0YSwgam9iLCBtdWx0aSk7XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHJlbGF5IHRvIGFub3RoZXIgam9iXG4gICAgaWYgKCEoam9iLmRhdGEucnVucy5sZW5ndGggPT09IDAgfHwgISFlcnJvcikpIHtcbiAgICAgIGlmIChpc09iamVjdChuZXh0Sm9iKSkge1xuICAgICAgICBuZXh0UXVldWUgPSBuZXh0Sm9iLnF1ZXVlO1xuICAgICAgICBqb2IuZGF0YS5ydW5zWzBdID0gbmV4dEpvYi5ydW5zO1xuICAgICAgfSBlbHNlIGlmIChqb2IuZGF0YS5pbml0aWFsUXVldWUpIHtcbiAgICAgICAgbmV4dFF1ZXVlID0gam9iLmRhdGEuaW5pdGlhbFF1ZXVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgc29tZSBkZWJ1ZyBkYXRhIGZvciB0aGUgbmV4dCBqb2JcbiAgICAgIC8vIHNvIGl0IGNhbiB0ZWxsIHdoZXJlIHRoZSByZWxheSBvcmlnaW5hdGVkIGZyb21cbiAgICAgIGpvYi5kYXRhLmZyb21fam9iID0gY3VycmVudEpvYjtcbiAgICAgIGpvYi5kYXRhLmZyb21fcXVldWUgPSB0aGlzLm5hbWU7XG4gICAgICBqb2IuZGF0YS5mcm9tX3RpbWVzdGFtcCA9IGdldFRpbWVTdGFtcCgpO1xuICAgICAgLy8gcmVsYXkgcmVzb2x2ZWQgZGF0YVxuICAgICAgam9iLmRhdGEuZGF0YSA9IGRhdGE7XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcmUuaG9va3Muam9iLmNyZWF0ZShuZXh0UXVldWUsIGpvYi5kYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJNdWx0aSkgcmV0dXJuIHJlamVjdChlcnJNdWx0aSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHN0YXR1cywgcmVzdWx0OiBlcnJvciB8fCBkYXRhIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHdlJ3ZlIGp1c3QgZmluaXNoZWQgdGhlIGxhc3Qgam9iIGluIHRoZSByZWxheVxuICAgIC8vIGVtaXQgc3VjY2VzcyBvciBmYWlsdXJlIGV2ZW50IGlmIHdlIGhhdmUgbGlzdGVuZXJzXG4gICAgaWYgKGVycm9yICYmIGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUsIHRoaXMuX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpKTtcbiAgICB9IGVsc2UgaWYgKGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MsIHRoaXMuX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmV0dXJuIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICBpZiAoZXJyTXVsdGkpIHJldHVybiByZWplY3QoZXJyTXVsdGkpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHN0YXR1cywgcmVzdWx0OiBlcnJvciB8fCBkYXRhIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbkxvY2FsVGlja0NvbXBsZXRlID0gKCkgPT4ge1xuICAgIHRoaXMucnVubmluZy0tO1xuICAgIHRoaXMucXVldWVkLS07XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudGhyb3R0bGUpIHJldHVybiBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcblxuICAgIHJldHVybiB0aGlzLmNsaWVudC50aHJvdHRsZShcbiAgICAgIHRoaXMudG9LZXkoJ3Rocm90dGxlJyksXG4gICAgICB0aGlzLm9wdGlvbnMudGhyb3R0bGUubGltaXQsXG4gICAgICB0aGlzLm9wdGlvbnMudGhyb3R0bGUuc2Vjb25kc1xuICAgICkudGhlbih0aHJvdHRsZSA9PiB7XG4gICAgICBjb25zdCBzaG91bGRUaHJvdHRsZSA9IHRocm90dGxlWzBdID09PSAxO1xuICAgICAgaWYgKCFzaG91bGRUaHJvdHRsZSkge1xuICAgICAgICB0aGlzLnRocm90dGxlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGhyb3R0bGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRpbWVSZW1haW5pbmcgPSAodGhyb3R0bGVbMl0gPT09IDAgPyAxIDogdGhyb3R0bGVbMl0pO1xuICAgICAgdGhpcy5sb2cudmVyYm9zZShgJyR7dGhpcy5uYW1lfScgcXVldWUgIHJlYWNoZWQgaXQncyB0aHJvdHRsZSBsaW1pdCwgcmVzdW1pbmcgaW4gJHt0aW1lUmVtYWluaW5nfSBzZWNvbmRzLmApO1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQodGhpcy5fcXVldWVUaWNrLCB0aW1lUmVtYWluaW5nICogMTAwMCk7XG4gICAgfSkuY2F0Y2godGhpcy5fcXVldWVUaWNrKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Mb2NhbFRpY2tFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMucXVldWVkLS07XG4gICAgdGhpcy5sb2cuZXJyb3IoZXJyb3IpO1xuICAgIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9xdWV1ZVRpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucGF1c2VkIHx8ICF0aGlzLm9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZWQrKztcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLl9nZXROZXh0Sm9iKClcbiAgICAgIC50aGVuKGpvYiA9PiB7XG4gICAgICAgIHRoaXMucnVubmluZysrO1xuICAgICAgICAvLyBxdWV1ZSBtb3JlIGpvYnMgaWYgd2l0aGluIGxpbWl0XG4gICAgICAgIGlmICgodGhpcy5ydW5uaW5nICsgdGhpcy5xdWV1ZWQpIDwgdGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgYSBsaXR0bGUgcG9pbnRsZXNzIHJpZ2h0IG5vdyBpZiB3ZSdyZSB0aHJvdHRsaW5nIGpvYnNcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdHRsZSkgc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fcnVuSm9iKGpvYikudGhlbih0aGlzLl9vbkxvY2FsVGlja0NvbXBsZXRlKS5jYXRjaCh0aGlzLl9vbkxvY2FsVGlja0NvbXBsZXRlKTtcbiAgICAgIH0pLmNhdGNoKHRoaXMuX29uTG9jYWxUaWNrRXJyb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RhcnRQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdyZWFkeScsIHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBxdWV1ZS5cbiAgICovXG4gIGJlZ2luV29ya2luZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkIHx8ICF0aGlzLm9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgUXVldWUgJHt0aGlzLm5hbWV9IGlzIGN1cnJlbnRseSBkaXNhYmxlZC5gKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdGhpcy5xdWV1ZWQgPSAwO1xuICAgIHRoaXMucnVubmluZyA9IDA7XG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcblxuICAgIHRoaXMubG9nLnZlcmJvc2UoYFF1ZXVlICcke3RoaXMubmFtZX0nIC0gc3RhcnRlZCB3aXRoIGEgY29uY3VycmVuY3kgb2YgJHt0aGlzLm9wdGlvbnMuY29uY3VycmVuY3l9LmApO1xuXG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ2Vycm9yJywgdGhpcy5fcmVzdGFydFByb2Nlc3NpbmcpO1xuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdjbG9zZScsIHRoaXMuX3Jlc3RhcnRQcm9jZXNzaW5nKTtcblxuICAgIHRoaXMuY2hlY2tTdGFsbGVkSm9icygpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZSgnY2hlY2tTdGFsbGVkSm9icyBjb21wbGV0ZWQnKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcXVldWVUaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBjaGVja1N0YWxsZWRKb2JzKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoYCR7dGhpcy5uYW1lfTogY2hlY2tTdGFsbGVkSm9ic2ApO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5jaGVja3N0YWxsZWRqb2JzKFxuICAgICAgdGhpcy50b0tleSgnc3RhbGxUaW1lJyksXG4gICAgICB0aGlzLnRvS2V5KCdzdGFsbGluZycpLFxuICAgICAgdGhpcy50b0tleSgnd2FpdGluZycpLFxuICAgICAgdGhpcy50b0tleSgnYWN0aXZlJyksXG4gICAgICBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsXG4gICAgKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5wYXVzZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmRlbGF5KHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsKS50aGVuKDo6dGhpcy5jaGVja1N0YWxsZWRKb2JzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gc3RyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgdG9LZXkoc3RyKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jbHVzdGVyLmlzQ2x1c3RlcigpKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zLmtleVByZWZpeH06eyR7dGhpcy5uYW1lfX06JHtzdHJ9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMub3B0aW9ucy5rZXlQcmVmaXh9OiR7dGhpcy5uYW1lfToke3N0cn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZXZlbnRQcmVmaXggdG8gYW4gZXZlbnQgbmFtZVxuICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0V2ZW50TmFtZSA9IGV2ZW50TmFtZSA9PiBgcXVldWU6JHt0aGlzLm5hbWV9OiR7ZXZlbnROYW1lfWA7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,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RUFFRyxLQUZILENBRVMsTUFBTSxDQUNkLENBSEQ7O0FBS0EsV0FBTyxLQUFLLFVBQUwsRUFBUDtBQUNEOztBQUVEOzs7O0FBSUEscUJBQW1CO0FBQ2pCLFNBQUssR0FBTCxDQUFTLE9BQVQsQ0FBa0IsSUFBRSxLQUFLLElBQUsscUJBQTlCO0FBQ0EsV0FBTyxLQUFLLE1BQUwsQ0FBWSxnQkFBWixDQUNMLEtBQUssS0FBTCxDQUFXLFdBQVgsQ0FESyxFQUVMLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FGSyxFQUdMLEtBQUssS0FBTCxDQUFXLFNBQVgsQ0FISyxFQUlMLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FKSyxFQUtMLDRCQUxLLEVBTUwsS0FBSyxPQUFMLENBQWEsYUFOUixFQU9MLElBUEssQ0FPQSxNQUFNO0FBQ1gsVUFBSSxDQUFDLEtBQUssT0FBTCxDQUFhLE9BQWQsSUFBeUIsS0FBSyxNQUFsQyxFQUEwQyxPQUFPLG1CQUFRLE9BQVIsRUFBUDtBQUMxQyxhQUFPLG1CQUFRLEtBQVIsQ0FBYyxLQUFLLE9BQUwsQ0FBYSxhQUEzQixFQUEwQyxJQUExQyxDQUFpRCxLQUFLLGdCQUF0RCxNQUFpRCxJQUFqRCxFQUFQO0FBQ0QsS0FWTSxDQUFQO0FBV0Q7O0FBRUQ7Ozs7O0FBS0EsUUFBTSxHQUFOLEVBQVc7QUFDVCxRQUFJLEtBQUssSUFBTCxDQUFVLE9BQVYsQ0FBa0IsU0FBbEIsRUFBSixFQUFtQztBQUNqQyxhQUFRLElBQUUsS0FBSyxPQUFMLENBQWEsU0FBVSxPQUFJLEtBQUssSUFBSyxPQUFJLEdBQUksR0FBdkQ7QUFDRDtBQUNELFdBQVEsSUFBRSxLQUFLLE9BQUwsQ0FBYSxTQUFVLE1BQUcsS0FBSyxJQUFLLE1BQUcsR0FBSSxHQUFyRDtBQUNEOztBQUVEOzs7OztBQXhmOEM7a0JBQTNCLEsiLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSm9iIGZyb20gJy4vam9iJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzJztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgeyBkZWVwR2V0LCBpc09iamVjdCwgZ2V0VGltZVN0YW1wLCB0cnlKU09OUGFyc2UgfSBmcm9tICdyZWRpYm94JztcblxuLyoqXG4gKiBUT0RPIG1vdmUgdG8gaGVscGVyc1xuICogQHBhcmFtIGVycm9yU3RhY2tcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdHJpbVN0YWNrKGVycm9yU3RhY2spIHtcbiAgY29uc3Qgb2xkU3RhY2sgPSBlcnJvclN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDAsIGlMZW4gPSBvbGRTdGFjay5sZW5ndGggfHwgc3RhY2subGVuZ3RoID4gMTk7IGkgPCBpTGVuOyBpKyspIHtcbiAgICBjb25zdCByb3cgPSBvbGRTdGFja1tpXTtcblxuICAgIC8vIGluY2x1ZGUgcHJpdmF0ZSBtb2R1bGVzXG4gICAgaWYgKHJvdy5pbmNsdWRlcygnQCcpKSB7XG4gICAgICBzdGFjay5wdXNoKHJvdyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBleGNsdWRlIGpvYiBtb2R1bGVcbiAgICBpZiAocm93LmluY2x1ZGVzKCdyZWRpYm94LWhvb2stam9iJykgfHwgcm93LmluY2x1ZGVzKCdyZWRpYm94L2pvYi9saWInKSkgY29udGludWU7XG5cbiAgICAvLyBleGNsdWRlIGJsdWViaXJkXG4gICAgaWYgKHJvdy5pbmNsdWRlcygnYmx1ZWJpcmQnKSkgY29udGludWU7XG5cbiAgICAvLyBleGNsdWRlIHdhdGVybGluZVxuICAgIGlmIChyb3cuaW5jbHVkZXMoJ3dhdGVybGluZS9saWInKSkgY29udGludWU7XG5cbiAgICAvLyBleGNsdWRlIHdhdGVybGluZVxuICAgIGlmIChyb3cuaW5jbHVkZXMoJ2FzeW5jL2xpYicpKSBjb250aW51ZTtcblxuICAgIC8vIGV4Y2x1ZGUgdGltZXJzLmpzXG4gICAgaWYgKHJvdy5pbmNsdWRlcygndGltZXJzLmpzOicpKSBjb250aW51ZTtcblxuICAgIHN0YWNrLnB1c2gocm93KTtcbiAgfVxuXG4gIHJldHVybiBzdGFjaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVldWUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcGFyYW0gY29yZVxuICAgKiBAcmV0dXJucyB7UXVldWV9XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb3JlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvcmUgPSBjb3JlO1xuICAgIHRoaXMuY2xpZW50ID0gY29yZS5jbGllbnQ7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRocm90dGxlZCA9IGZhbHNlO1xuICAgIHRoaXMubG9nID0gdGhpcy5jb3JlLmxvZztcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5oYW5kbGVyID0gb3B0aW9ucy5oYW5kbGVyIHx8IG51bGw7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMucXVldWUsIG9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMuY29yZS5jcmVhdGVDbGllbnQoJ2Jsb2NrJywgdGhpcykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGBCbG9ja2luZyBjbGllbnQgZm9yIHF1ZXVlICcke3RoaXMubmFtZX0nIGlzIHJlYWR5LiBTdGFydGluZyBxdWV1ZSBwcm9jZXNzb3IuYCk7XG4gICAgICB0aGlzLmJlZ2luV29ya2luZygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBrZXlzID0gW1xuICAgICAgJ2lkJywgJ2pvYnMnLCAnc3RhbGxUaW1lJywgJ3N0YWxsaW5nJywgJ3dhaXRpbmcnLCAnYWN0aXZlJywgJ3N1Y2NlZWRlZCcsICdmYWlsZWQnLFxuICAgIF0ubWFwKGtleSA9PiB0aGlzLnRvS2V5KGtleSkpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWwoLi4ua2V5cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBjaGVja0hlYWx0aCgpIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmNsaWVudC5tdWx0aSgpXG4gICAgICAubGxlbih0aGlzLnRvS2V5KCd3YWl0aW5nJykpXG4gICAgICAubGxlbih0aGlzLnRvS2V5KCdhY3RpdmUnKSlcbiAgICAgIC5zY2FyZCh0aGlzLnRvS2V5KCdzdWNjZWVkZWQnKSlcbiAgICAgIC5zY2FyZCh0aGlzLnRvS2V5KCdmYWlsZWQnKSlcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4geyAvKiBlc2xpbnQgYXJyb3ctYm9keS1zdHlsZTogMCAqL1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhaXRpbmc6IHJlc3VsdHNbMF1bMV0sXG4gICAgICAgICAgYWN0aXZlOiByZXN1bHRzWzFdWzFdLFxuICAgICAgICAgIHN1Y2NlZWRlZDogcmVzdWx0c1syXVsxXSxcbiAgICAgICAgICBmYWlsZWQ6IHJlc3VsdHNbM11bMV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9nZXROZXh0Sm9iKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoYEdldHRpbmcgbmV4dCBqb2IgZm9yIHF1ZXVlICcke3RoaXMubmFtZX0nLmApO1xuICAgIHJldHVybiB0aGlzLmNsaWVudHMuYmxvY2suYnJwb3BscHVzaChcbiAgICAgIHRoaXMudG9LZXkoJ3dhaXRpbmcnKSxcbiAgICAgIHRoaXMudG9LZXkoJ2FjdGl2ZScpLCAwXG4gICAgKS50aGVuKGpvYklkID0+XG4gICAgICBKb2IuZnJvbUlkKHRoaXMsIGpvYklkKS50aGVuKGpvYiA9PiB7XG4gICAgICAgIHJldHVybiBqb2I7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcGFyYW0gam9iRXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2dKb2JGYWlsdXJlKGpvYiwgam9iRXJyb3IpIHtcbiAgICBjb25zdCBlcnJvciA9IHR5cGVvZiBqb2JFcnJvciA9PT0gJ3N0cmluZycgPyBuZXcgRXJyb3Ioam9iRXJyb3IpIDogam9iRXJyb3I7XG4gICAgY29uc3Qgc3RhY2sgPSB0cmltU3RhY2soZXJyb3Iuc3RhY2spO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbiAgICAgIGNvbnN0IGpvYkRhdGEgPSBKU09OLnN0cmluZ2lmeShqb2IuZGF0YS5kYXRhIHx8IHt9KTtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9mYWlsdXJlJyxcbiAgICAgICAgam9iOiB7XG4gICAgICAgICAgaWQ6IGpvYi5pZC50b1N0cmluZyA/IGpvYi5pZC50b1N0cmluZygpIDogam9iLmlkLFxuICAgICAgICAgIHJ1bnM6IGpvYi5kYXRhLnJ1bnMsXG4gICAgICAgICAgcXVldWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBkYXRhOiBqb2JEYXRhLmxlbmd0aCA+IDQwMDAgPyAnPCEgam9iIGRhdGEgdG9vIGxhcmdlIHRvIGRpc3BsYXkgIT4nIDogam9iLmRhdGEuZGF0YSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJycpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJy0tLS0tLS0tLS0tLS0tLSBSREIgSk9CIEVSUk9SL0ZBSUxVUkUgLS0tLS0tLS0tLS0tLS0tJyk7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgSm9iOiAke2pvYi5kYXRhLnJ1bnN9YCB8fCB0aGlzLm5hbWUpO1xuICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFjay5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9ydW5Kb2Ioam9iKSB7XG4gICAgaWYgKCFqb2IgfHwgIWpvYi5kYXRhKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgcnVucyA9IGpvYi5kYXRhICYmIGpvYi5kYXRhLnJ1bnMgJiYgQXJyYXkuaXNBcnJheShqb2IuZGF0YS5ydW5zKSA/IGpvYi5kYXRhLnJ1bnNbMF0gOiBqb2IuZGF0YS5ydW5zO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAodHlwZW9mIHRoaXMuaGFuZGxlciA9PT0gJ3N0cmluZycgP1xuICAgICAgICBkZWVwR2V0KGdsb2JhbCwgdGhpcy5oYW5kbGVyKSA6IHRoaXMuaGFuZGxlcikgfHwgZGVlcEdldChnbG9iYWwsIHJ1bnMpO1xuXG4gICAgbGV0IHByZXZlbnRTdGFsbGluZ1RpbWVvdXQ7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcbiAgICBsZXQgcHJvbWlzZU9yUmVzO1xuXG4gICAgLy8gSGFuZGxlIGFuIFwiT0tcIiByZXNwb25zZSBmcm9tIHRoZSBwcm9taXNlXG4gICAgY29uc3QgaGFuZGxlT0sgPSBkYXRhID0+IHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhbnkgbXVsdGlwbGUgY2FsbHNcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm4gdm9pZCAwO1xuXG4gICAgICBjbGVhclRpbWVvdXQocHJldmVudFN0YWxsaW5nVGltZW91dCk7XG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgZGF0YVxuICAgICAgaWYgKGpvYi5faW50ZXJuYWxEYXRhKSB7XG4gICAgICAgIGpvYi5kYXRhID0gam9iLl9pbnRlcm5hbERhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmVsYXkgdG8gbmV4dCBqb2IgaWYgdXNlciBkaWQgbm90IHJlc29sdmUgJ2ZhbHNlJyBvbiBjdXJyZW50IGpvYlxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknICYmIGRhdGEgIT09IGZhbHNlKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hTaW5nbGVKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgcmV0dXJuZWRcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGpvYkVycm9yID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcblxuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlZCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCB0aGUgZGF0YSBiYWNrIHRvIGludGVybmFsIGpvYiBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKTtcblxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2Ioam9iRXJyb3IsIG51bGwsIGpvYik7XG4gICAgICByZXR1cm4gdGhpcy5fZmluaXNoU2luZ2xlSm9iKGpvYkVycm9yLCBudWxsLCBqb2IpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmV2ZW50U3RhbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNsaWVudC5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCwgKCkgPT4ge1xuICAgICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgICBwcmV2ZW50U3RhbGxpbmdUaW1lb3V0ID0gc2V0VGltZW91dChwcmV2ZW50U3RhbGxpbmcsIHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBcIiR7am9iLmRhdGEucnVucyB8fCAnTm8gSm9iIEhhbmRsZXIgU3BlY2lmaWVkJ31cIiB3YXMgbm90IGZvdW5kLiBTa2lwcGluZyBqb2IuIFRvIGZpeCB0aGlzXG4gICAgICAgICAgICAgeW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBoYW5kbGVyIGZ1bmN0aW9uIHZpYSBxdWV1ZS5wcm9jZXNzKCkgb3IgcHJvdmlkZSBhIHZhbGlkIGhhbmRsZXJcbiAgICAgICAgICAgICBub2RlIGdsb2JhbCBwYXRoIGluIHlvdXIgam9iIG9wdGlvbnMgJ2hhbmRsZXInLCBlLmcuIGlmIHlvdSBoYWQgYSBnbG9iYWwgZnVuY3Rpb24gaW5cbiAgICAgICAgICAgICdnbG9iYWwuc2FpbHMuc2VydmljZXMubXlzZXJ2aWNlJyB5b3UnZCBzcGVjaWZ5IHRoZSBoYW5kbGVyIGFzICdzYWlscy5zZXJ2aWNlcy5teXNlcnZpY2UubXlIYW5kbGVyJy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJldmVudFN0YWxsaW5nKCk7IC8vIHN0YXJ0IHN0YWxsaW5nIG1vbml0b3JcblxuICAgIGpvYi5faW50ZXJuYWxEYXRhID0gam9iLmRhdGE7XG4gICAgam9iLmRhdGEgPSBqb2IuZGF0YS5kYXRhIHx8IGpvYi5kYXRhO1xuXG4gICAgaWYgKGpvYi5vcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoaGFuZGxlRXJyb3IuYmluZChudWxsLCBFcnJvcihgSm9iICR7am9iLmlkfSB0aW1lZCBvdXQgKCR7am9iLm9wdGlvbnMudGltZW91dH1tcylgKSksIGpvYi5vcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoam9iLm9wdGlvbnMubm9CaW5kIHx8IHRoaXMub3B0aW9ucy5ub0JpbmQpIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlcihqb2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlci5iaW5kKGpvYiwgam9iKShqb2IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZU9yUmVzLnRoZW4gJiYgdHlwZW9mIHByb21pc2VPclJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZU9yUmVzLnRoZW4oaGFuZGxlT0ssIGhhbmRsZUVycm9yKS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZU9LKHByb21pc2VPclJlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge3tqb2I6IHtpZDogKiwgd29ya2VyX2lkOiAoKnxTdHJpbmd8c3RyaW5nKSwgc3RhdHVzOiBzdHJpbmd9LCBlcnJvcjogKiwgb3V0cHV0OiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBpZDogam9iLmlkLFxuICAgICAgICB3b3JrZXJfaWQ6IHRoaXMuY29yZS5pZCxcbiAgICAgICAgc3RhdHVzOiBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIC4uLmpvYi5kYXRhLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgb3V0cHV0OiBkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIG11bHRpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgbXVsdGkubHJlbSh0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMCwgam9iLmlkKTtcbiAgICBtdWx0aS5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCk7XG5cbiAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgaWYgKGpvYi5vcHRpb25zLnJldHJpZXMgPiAwKSB7XG4gICAgICAgIGpvYi5vcHRpb25zLnJldHJpZXMgPSBqb2Iub3B0aW9ucy5yZXRyaWVzIC0gMTtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdyZXRyeWluZyc7XG4gICAgICAgIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIG11bHRpLmxwdXNoKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSwgam9iLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvYi5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgbXVsdGkuaGRlbCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCk7XG4gICAgICAgIC8vIFRPRE8gdHJhY2sgZmFpbHVyZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgICAvLyBtdWx0aS5oc2V0KHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkLCBqb2IudG9EYXRhKCkpO1xuICAgICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpLCBqb2IuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBqb2Iuc3RhdHVzID0gJ3N1Y2NlZWRlZCc7XG4gICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgIC8vIFRPRE8gdHJhY2sgc3VjY2Vzc2VzIGFuZCB0aGVpciBkYXRhIHNvbWV3aGVyZSBlbHNlIGZvciByZXZpZXdpbmdcbiAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpLCBqb2IuaWQpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuICAgICAgICBjb25zdCBqb2JEYXRhID0gSlNPTi5zdHJpbmdpZnkoam9iLmRhdGEuZGF0YSB8fCB7fSk7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9jb21wbGV0ZWQnLFxuICAgICAgICAgIGpvYjoge1xuICAgICAgICAgICAgaWQ6IGpvYi5pZC50b1N0cmluZyA/IGpvYi5pZC50b1N0cmluZygpIDogam9iLmlkLFxuICAgICAgICAgICAgcnVuczogam9iLmRhdGEucnVucyxcbiAgICAgICAgICAgIHF1ZXVlOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBzdGF0dXM6IGpvYi5zdGF0dXMsXG4gICAgICAgICAgICBkYXRhOiBqb2JEYXRhLmxlbmd0aCA+IDQwMDAgPyAnPCEgam9iIGRhdGEgdG9vIGxhcmdlIHRvIGRpc3BsYXkgIT4nIDogam9iLmRhdGEuZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2ZpbmlzaFNpbmdsZUpvYihlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgY29uc3QgbXVsdGkgPSB0aGlzLmNsaWVudC5tdWx0aSgpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJztcbiAgICB0aGlzLl91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpO1xuXG4gICAgLy8gZW1pdCBzdWNjZXNzIG9yIGZhaWx1cmUgZXZlbnQgaWYgd2UgaGF2ZSBsaXN0ZW5lcnNcbiAgICBpZiAoZXJyb3IgJiYgam9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUsIHRoaXMuX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpKTtcbiAgICB9IGVsc2UgaWYgKGpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICBpZiAoZXJyTXVsdGkpIHJldHVybiByZWplY3QoZXJyTXVsdGkpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHN0YXR1cywgcmVzdWx0OiBlcnJvciB8fCBkYXRhIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGVzIGEgbXVsdGkgam9iIG9yIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzdGFnZS5cbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoUmVsYXlKb2IoZXJyb3IsIGRhdGEsIGpvYikge1xuICAgIGxldCBuZXh0UXVldWUgPSB0aGlzLm5hbWU7XG4gICAgY29uc3QgbmV4dEpvYiA9IGpvYi5kYXRhLnJ1bnNbMF07XG4gICAgY29uc3QgbXVsdGkgPSB0aGlzLmNsaWVudC5tdWx0aSgpO1xuICAgIGNvbnN0IGN1cnJlbnRKb2IgPSBqb2IuZGF0YS5ydW5zLnNoaWZ0KCk7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgZmlyc3Qgam9iIGluIHRoaXMgcmVsYXkgaW5zdGFuY2VcbiAgICBpZiAoIWpvYi5kYXRhLmluaXRpYWxKb2IpIHtcbiAgICAgIGpvYi5kYXRhLmluaXRpYWxKb2IgPSB0cnlKU09OUGFyc2Uoam9iLnRvRGF0YSgpKTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBmaXJzdCBxdWV1ZSBpbiB0aGlzIHJlbGF5IGluc3RhbmNlXG4gICAgaWYgKCFqb2IuZGF0YS5pbml0aWFsUXVldWUpIHtcbiAgICAgIGpvYi5kYXRhLmluaXRpYWxRdWV1ZSA9IHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byByZWxheSB0byBhbm90aGVyIGpvYlxuICAgIGlmICghKGpvYi5kYXRhLnJ1bnMubGVuZ3RoID09PSAwIHx8ICEhZXJyb3IpKSB7XG4gICAgICBpZiAoaXNPYmplY3QobmV4dEpvYikpIHtcbiAgICAgICAgbmV4dFF1ZXVlID0gbmV4dEpvYi5xdWV1ZTtcbiAgICAgICAgam9iLmRhdGEucnVuc1swXSA9IG5leHRKb2IucnVucztcbiAgICAgIH0gZWxzZSBpZiAoam9iLmRhdGEuaW5pdGlhbFF1ZXVlKSB7XG4gICAgICAgIG5leHRRdWV1ZSA9IGpvYi5kYXRhLmluaXRpYWxRdWV1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHNvbWUgZGVidWcgZGF0YSBmb3IgdGhlIG5leHQgam9iXG4gICAgICAvLyBzbyBpdCBjYW4gdGVsbCB3aGVyZSB0aGUgcmVsYXkgb3JpZ2luYXRlZCBmcm9tXG4gICAgICBqb2IuZGF0YS5mcm9tX2pvYiA9IGN1cnJlbnRKb2I7XG4gICAgICBqb2IuZGF0YS5mcm9tX3F1ZXVlID0gdGhpcy5uYW1lO1xuICAgICAgam9iLmRhdGEuZnJvbV90aW1lc3RhbXAgPSBnZXRUaW1lU3RhbXAoKTtcbiAgICAgIC8vIHJlbGF5IHJlc29sdmVkIGRhdGFcbiAgICAgIGpvYi5kYXRhLmRhdGEgPSBkYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmhvb2tzLmpvYi5jcmVhdGUobmV4dFF1ZXVlLCBqb2IuZGF0YSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyTXVsdGkpIHJldHVybiByZWplY3QoZXJyTXVsdGkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB3ZSd2ZSBqdXN0IGZpbmlzaGVkIHRoZSBsYXN0IGpvYiBpbiB0aGUgcmVsYXlcbiAgICAvLyBlbWl0IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBldmVudCBpZiB3ZSBoYXZlIGxpc3RlbmVyc1xuICAgIGlmIChlcnJvciAmJiBqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfSBlbHNlIGlmIChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5U3VjY2Vzcykge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJldHVybiBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Mb2NhbFRpY2tDb21wbGV0ZSA9ICgpID0+IHtcbiAgICB0aGlzLnJ1bm5pbmctLTtcbiAgICB0aGlzLnF1ZXVlZC0tO1xuICAgIGlmICghdGhpcy5vcHRpb25zLnRocm90dGxlKSByZXR1cm4gc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG5cbiAgICByZXR1cm4gdGhpcy5jbGllbnQudGhyb3R0bGUoXG4gICAgICB0aGlzLnRvS2V5KCd0aHJvdHRsZScpLFxuICAgICAgdGhpcy5vcHRpb25zLnRocm90dGxlLmxpbWl0LFxuICAgICAgdGhpcy5vcHRpb25zLnRocm90dGxlLnNlY29uZHNcbiAgICApLnRoZW4odGhyb3R0bGUgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkVGhyb3R0bGUgPSB0aHJvdHRsZVswXSA9PT0gMTtcbiAgICAgIGlmICghc2hvdWxkVGhyb3R0bGUpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRocm90dGxlZCA9IHRydWU7XG4gICAgICBjb25zdCB0aW1lUmVtYWluaW5nID0gKHRocm90dGxlWzJdID09PSAwID8gMSA6IHRocm90dGxlWzJdKTtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYCcke3RoaXMubmFtZX0nIHF1ZXVlICByZWFjaGVkIGl0J3MgdGhyb3R0bGUgbGltaXQsIHJlc3VtaW5nIGluICR7dGltZVJlbWFpbmluZ30gc2Vjb25kcy5gKTtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KHRoaXMuX3F1ZXVlVGljaywgdGltZVJlbWFpbmluZyAqIDEwMDApO1xuICAgIH0pLmNhdGNoKHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uTG9jYWxUaWNrRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLnF1ZXVlZC0tO1xuICAgIHRoaXMubG9nLmVycm9yKGVycm9yKTtcbiAgICBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcXVldWVUaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnBhdXNlZCB8fCAhdGhpcy5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHRoaXMucXVldWVkKys7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5fZ2V0TmV4dEpvYigpXG4gICAgICAudGhlbihqb2IgPT4ge1xuICAgICAgICB0aGlzLnJ1bm5pbmcrKztcbiAgICAgICAgLy8gcXVldWUgbW9yZSBqb2JzIGlmIHdpdGhpbiBsaW1pdFxuICAgICAgICBpZiAoKHRoaXMucnVubmluZyArIHRoaXMucXVldWVkKSA8IHRoaXMub3B0aW9ucy5jb25jdXJyZW5jeSkge1xuICAgICAgICAgIC8vIGNvbmN1cnJlbmN5IGlzIGEgbGl0dGxlIHBvaW50bGVzcyByaWdodCBub3cgaWYgd2UncmUgdGhyb3R0bGluZyBqb2JzXG4gICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudGhyb3R0bGUpIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkpvYihqb2IpLnRoZW4odGhpcy5fb25Mb2NhbFRpY2tDb21wbGV0ZSkuY2F0Y2godGhpcy5fb25Mb2NhbFRpY2tDb21wbGV0ZSk7XG4gICAgICB9KS5jYXRjaCh0aGlzLl9vbkxvY2FsVGlja0Vycm9yKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0YXJ0UHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgncmVhZHknLCB0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgcXVldWUuXG4gICAqL1xuICBiZWdpbldvcmtpbmcoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCB8fCAhdGhpcy5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFF1ZXVlICR7dGhpcy5uYW1lfSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuYCk7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkID0gMDtcbiAgICB0aGlzLnJ1bm5pbmcgPSAwO1xuICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG5cbiAgICB0aGlzLmxvZy52ZXJib3NlKGBRdWV1ZSAnJHt0aGlzLm5hbWV9JyAtIHN0YXJ0ZWQgd2l0aCBhIGNvbmN1cnJlbmN5IG9mICR7dGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5fS5gKTtcblxuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdlcnJvcicsIHRoaXMuX3Jlc3RhcnRQcm9jZXNzaW5nKTtcbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgnY2xvc2UnLCB0aGlzLl9yZXN0YXJ0UHJvY2Vzc2luZyk7XG5cbiAgICB0aGlzLmNoZWNrU3RhbGxlZEpvYnMoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ2NoZWNrU3RhbGxlZEpvYnMgY29tcGxldGVkJyk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlVGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2hlY2tTdGFsbGVkSm9icygpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKGAke3RoaXMubmFtZX06IGNoZWNrU3RhbGxlZEpvYnNgKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuY2hlY2tzdGFsbGVkam9icyhcbiAgICAgIHRoaXMudG9LZXkoJ3N0YWxsVGltZScpLFxuICAgICAgdGhpcy50b0tleSgnc3RhbGxpbmcnKSxcbiAgICAgIHRoaXMudG9LZXkoJ3dhaXRpbmcnKSxcbiAgICAgIHRoaXMudG9LZXkoJ2FjdGl2ZScpLFxuICAgICAgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhbGxJbnRlcnZhbFxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVkIHx8IHRoaXMucGF1c2VkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5kZWxheSh0aGlzLm9wdGlvbnMuc3RhbGxJbnRlcnZhbCkudGhlbig6OnRoaXMuY2hlY2tTdGFsbGVkSm9icyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHN0clxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHRvS2V5KHN0cikge1xuICAgIGlmICh0aGlzLmNvcmUuY2x1c3Rlci5pc0NsdXN0ZXIoKSkge1xuICAgICAgcmV0dXJuIGAke3RoaXMub3B0aW9ucy5rZXlQcmVmaXh9Onske3RoaXMubmFtZX19OiR7c3RyfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnMua2V5UHJlZml4fToke3RoaXMubmFtZX06JHtzdHJ9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGV2ZW50UHJlZml4IHRvIGFuIGV2ZW50IG5hbWVcbiAgICogQHBhcmFtIGV2ZW50TmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdG9FdmVudE5hbWUgPSBldmVudE5hbWUgPT4gYHF1ZXVlOiR7dGhpcy5uYW1lfToke2V2ZW50TmFtZX1gO1xufVxuIl19
{
"name": "redibox-hook-job",
"description": "Advanced redibox powered jobs and queues",
"version": "1.2.12",
"version": "1.2.13",
"main": "lib/index.js",

@@ -6,0 +6,0 @@ "author": "Mike Diarmid",

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