Socket
Socket
Sign inDemoInstall

@aws-cdk/cdk

Package Overview
Dependencies
Maintainers
4
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/cdk - npm Package Compare versions

Comparing version 0.9.2 to 0.10.0

10

lib/app.js

@@ -88,4 +88,4 @@ "use strict";

if (errors.length > 0) {
const errorList = errors.map(e => `[${e.source.path}] ${e.message}`).join('\n ');
throw new Error(`Stack validation failed with the following errors:\n ${errorList}`);
const errorList = errors.map(e => `[${e.source.path}] ${e.message}`).join('\n ');
throw new Error(`Stack validation failed with the following errors:\n ${errorList}`);
}

@@ -231,3 +231,3 @@ let environment;

* @returns the NPM module infos (aka ``package.json`` contents), or
* ``undefined`` if the lookup was unsuccessful.
* ``undefined`` if the lookup was unsuccessful.
*/

@@ -247,3 +247,3 @@ function findNpmPackage(fileName) {

* @returns ``s`` with any terminating ``/node_modules``
* (or ``\\node_modules``) stripped off.)
* (or ``\\node_modules``) stripped off.)
*/

@@ -258,2 +258,2 @@ function stripNodeModules(s) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLHNDQUF1QztBQUN2QyxrREFBK0M7QUFDL0MsZ0RBQTRFO0FBQzVFLDBDQUF3QztBQUV4Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO0FBRXpDOztHQUVHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsZ0JBQUk7SUFJekIsWUFBWSxJQUFlO1FBQ3ZCLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNsQixxR0FBcUc7WUFDckcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQixJQUFJO2dCQUNBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN0RTtZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFRCxJQUFZLE1BQU07UUFDZCxNQUFNLEdB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TkQsa0JBNE5DO0FBRUQsTUFBYSxPQUFRLFNBQVEsR0FBRztJQUM1QixZQUFZLElBQWU7UUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQUxELDBCQUtDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBZ0I7SUFDcEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLElBQUk7UUFDQSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDeEI7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsZ0JBQWdCLENBQUMsQ0FBUztRQUMvQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzdELGlDQUFpQztZQUNqQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQganNCYXNlNjQgPSByZXF1aXJlKCdqcy1iYXNlNjQnKTtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjayc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE1ldGFkYXRhRW50cnksIFBBVEhfU0VQLCBSb290IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi9jb3JlL3Rva2Vucyc7XG5cbi8qKlxuICogQ2xvdWQgRXhlY3V0YWJsZSBpbnRlcmZhY2UgdmVyc2lvbi5cbiAqL1xuY29uc3QgQ1hfVkVSU0lPTiA9ICdDbG91ZEV4ZWN1dGFibGUvMS4wJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ0RLIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBSb290IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2duYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdD86IGN4YXBpLkNYUmVxdWVzdDtcblxuICAgIGNvbnN0cnVjdG9yKGFyZ3Y/OiBzdHJpbmdbXSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGFyZ3YgPSBhcmd2IHx8IFtdO1xuXG4gICAgICAgIGlmIChhcmd2Lmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZW5kcyB3aXRoIFwiL25vZGVcIiBvciBcIm5vZGUuZXhlXCIsIHNraXAgaXQgKHRoaXMgaXMgYXJndlswXSBpbiBub2RlIHByb2dyYW1zKS5cbiAgICAgICAgICAgIGlmICgvW1xcL1xcXFxdbm9kZSg/OlxcLmV4ZSk/JC8udGVzdChhcmd2WzBdKSkge1xuICAgICAgICAgICAgICAgIGFyZ3YgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnByb2duYW1lID0gYXJndlswXS5zcGxpdCgnLycpLnBvcCgpITtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5wYXJzZVJlcXVlc3QoYXJndlsxXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgcmVxdWVzdCAnJHthcmd2WzFdfSc6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgc3RhY2tzKCkge1xuICAgICAgICBjb25zdCBvdXQ6IHsgW25hbWU6IHN0cmluZ106IFN0YWNrIH0gPSB7IH07XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBTdGFjaykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjaGlsZCAke2NoaWxkLnRvU3RyaW5nKCl9IG9mIFByb2dyYW0gbXVzdCBiZSBhIFN0YWNrYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dFtjaGlsZC5pZF0gPSBjaGlsZCBhcyBTdGFjaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIHByb2dyYW1cbiAgICAgKiBAcmV0dXJucyBTVERPVVRcbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIG5vIGFyZ3VtZW50cyAtIHByaW50IHVzYWdlIGFuZCBleGl0IHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3QgfHwgIXRoaXMucmVxdWVzdC50eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucnVuQ29tbWFuZCgpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0LCB1bmRlZmluZWQsIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBhcHAucnVuKCkuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGV4ZWMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdHMgYWxsIHN0YWNrcyBpbiB0aGlzIGFwcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFN0YWNrcygpOiBjeGFwaS5TdGFja0luZm9bXSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykubWFwKG5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSB0aGlzLnN0YWNrc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLmVudi5yZWdpb247XG4gICAgICAgICAgICBjb25zdCBhY2NvdW50ID0gc3RhY2suZW52LmFjY291bnQ7XG4gICAgICAgICAgICBsZXQgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGFjY291bnQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgPSB7IG5hbWU6IGAke2FjY291bnR9LyR7cmVnaW9ufWAsIGFjY291bnQsIHJlZ2lvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgZW52aXJvbm1lbnQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3ludGhlc2l6ZSBhbmQgdmFsaWRhdGUgYSBzaW5nbGUgc3RhY2tcbiAgICAgKiBAcGFyYW0gc3RhY2tOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byBzeW50aGVzaXplXG4gICAgICovXG4gICAgcHVibGljIHN5bnRoZXNpemVTdGFjayhzdGFja05hbWU6IHN0cmluZyk6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2sge1xuICAgICAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0U3RhY2soc3RhY2tOYW1lKTtcblxuICAgICAgICAvLyBmaXJzdCwgdmFsaWRhdGUgdGhpcyBzdGFjayBhbmQgc3RvcCBpZiB0aGVyZSBhcmUgZXJyb3JzLlxuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdGFjay52YWxpZGF0ZVRyZWUoKTtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckxpc3QgPSBlcnJvcnMubWFwKGUgPT4gYFske2Uuc291cmNlLnBhdGh9XSAke2UubWVzc2FnZX1gKS5qb2luKCdcXG4gICAgJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIHZhbGlkYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcnM6XFxuICAgICR7ZXJyb3JMaXN0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YWNrLmVudi5hY2NvdW50ICYmIHN0YWNrLmVudi5yZWdpb24pIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGAke3N0YWNrLmVudi5hY2NvdW50fS8ke3N0YWNrLmVudi5yZWdpb259YCxcbiAgICAgICAgICAgICAgICBhY2NvdW50OiBzdGFjay5lbnYuYWNjb3VudCxcbiAgICAgICAgICAgICAgICByZWdpb246IHN0YWNrLmVudi5yZWdpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogc3RhY2suaWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1pc3Npbmc6IE9iamVjdC5rZXlzKHN0YWNrLm1pc3NpbmdDb250ZXh0KS5sZW5ndGggPyBzdGFjay5taXNzaW5nQ29udGV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksXG4gICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5jb2xsZWN0TWV0YWRhdGEoc3RhY2spXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3ludGhlc2l6ZXMgbXVsdGlwbGUgc3RhY2tzXG4gICAgICovXG4gICAgcHVibGljIHN5bnRoZXNpemVTdGFja3Moc3RhY2tOYW1lczogc3RyaW5nW10pOiBjeGFwaS5TeW50aGVzaXplZFN0YWNrW10ge1xuICAgICAgICBjb25zdCByZXQ6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2tbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrTmFtZSBvZiBzdGFja05hbWVzKSB7XG4gICAgICAgICAgICByZXQucHVzaCh0aGlzLnN5bnRoZXNpemVTdGFjayhzdGFja05hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbWV0YWRhdGEgZm9yIGFsbCBjb25zdHJ1Y3RzIGluIHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29sbGVjdE1ldGFkYXRhKHN0YWNrOiBTdGFjaykge1xuICAgICAgICBjb25zdCBvdXRwdXQ6IHsgW2lkOiBzdHJpbmddOiBNZXRhZGF0YUVudHJ5W10gfSA9IHsgfTtcblxuICAgICAgICB2aXNpdChzdGFjayk7XG5cbiAgICAgICAgLy8gYWRkIGFwcC1sZXZlbCBtZXRhZGF0YSB1bmRlciBcIi5cIlxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvdXRwdXRbUEFUSF9TRVBdID0gdGhpcy5tZXRhZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXQobm9kZTogQ29uc3RydWN0KSB7XG4gICAgICAgICAgICBpZiAobm9kZS5tZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgcGF0aCBhYnNvbHV0ZVxuICAgICAgICAgICAgICAgIG91dHB1dFtQQVRIX1NFUCArIG5vZGUucGF0aF0gPSBub2RlLm1ldGFkYXRhLm1hcChtZCA9PiByZXNvbHZlKG1kKSBhcyBNZXRhZGF0YUVudHJ5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdmlzaXQoY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0UnVudGltZUluZm9ybWF0aW9uKCk6IGN4YXBpLkFwcFJ1bnRpbWUge1xuICAgICAgICBjb25zdCBsaWJyYXJpZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlKSkge1xuICAgICAgICAgICAgY29uc3QgcGtnID0gZmluZE5wbVBhY2thZ2UoZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKHBrZyAmJiAhcGtnLnByaXZhdGUpIHtcbiAgICAgICAgICAgICAgICBsaWJyYXJpZXNbcGtnLm5hbWVdID0gcGtnLnZlcnNpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBsaWJyYXJpZXMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YWNrKHN0YWNrbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGFja25hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBuYW1lIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSB0aGlzLnN0YWNrc1tzdGFja25hbWVdO1xuICAgICAgICBpZiAoIXN0YWNrKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHN0YWNrICR7c3RhY2tuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFjaztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1bkNvbW1hbmQoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5yZXF1ZXN0IS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGFja3M6IHRoaXMubGlzdFN0YWNrcygpXG4gICAgICAgICAgICAgICAgfSBhcyBjeGFwaS5MaXN0U3RhY2tzUmVzcG9uc2U7XG5cbiAgICAgICAgICAgIGNhc2UgJ3N5bnRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGFja3M6IHRoaXMuc3ludGhlc2l6ZVN0YWNrcygodGhpcy5yZXF1ZXN0IGFzIGN4YXBpLlN5bnRoZXNpemVSZXF1ZXN0KS5zdGFja3MpLFxuICAgICAgICAgICAgICAgICAgICBydW50aW1lOiB0aGlzLmNvbGxlY3RSdW50aW1lSW5mb3JtYXRpb24oKVxuICAgICAgICAgICAgICAgIH0gYXMgY3hhcGkuU3ludGhlc2l6ZVJlc3BvbnNlO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucmVxdWVzdCEudHlwZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHVzYWdlKCkge1xuICAgICAgICBjb25zdCBwcm9nbmFtZSA9IHRoaXMucHJvZ25hbWUgPyB0aGlzLnByb2duYW1lICsgJyAnIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIGAke0NYX1ZFUlNJT059XG5cblVzYWdlOlxuICAke3Byb2duYW1lfVJFUVVFU1RcblxuUkVRVUVTVCBpcyBhIEpTT04tZW5jb2RlZCByZXF1ZXN0IG9iamVjdC5cbmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQ29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9ICh0aGlzLnJlcXVlc3QgJiYgdGhpcy5yZXF1ZXN0LmNvbnRleHQpIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb250ZXh0KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250ZXh0KGtleSwgY29udGV4dFtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VSZXF1ZXN0KHJlcTogc3RyaW5nKTogY3hhcGkuQ1hSZXF1ZXN0IHtcbiAgICAgICAgLy8gYWxsb3cgdG9vbGtpdCB0byBzZW5kIHJlcXVlc3QgaW4gYmFzZTY0IGlmIHRoZXkgYmVnaW4gd2l0aCBcImJhc2U2NDpcIlxuICAgICAgICAvLyB0aGlzIGlzIGluIG9yZGVyIHRvIGF2b2lkIHNoZWxsIGVzY2FwaW5nIGlzc3VlcyB3aGVuIGRlZmluaW5nIFwiLS1hcHBcIlxuICAgICAgICAvLyBpbiB0aGUgdG9vbGtpdC5cbiAgICAgICAgaWYgKHJlcS5zdGFydHNXaXRoKGN4YXBpLkJBU0U2NF9SRVFfUFJFRklYKSkge1xuICAgICAgICAgICAgcmVxID0ganNCYXNlNjQuQmFzZTY0LmZyb21CYXNlNjQocmVxLnNsaWNlKGN4YXBpLkJBU0U2NF9SRVFfUFJFRklYLmxlbmd0aCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFyc2UgYXMgSlNPTlxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBBcHAge1xuICAgIGNvbnN0cnVjdG9yKGFyZ3Y/OiBzdHJpbmdbXSkge1xuICAgICAgICBzdXBlcihhcmd2KTtcbiAgICAgICAgdGhpcy5hZGRXYXJuaW5nKCdcIlByb2dyYW1cIiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIFwiQXBwXCInKTtcbiAgICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCBOUE0gbW9kdWxlIGEgZ2l2ZW4gbG9hZGVkIGphdmFzY3JpcHQgZmlsZSBpcyBmcm9tLlxuICpcbiAqIFRoZSBvbmx5IGluZnJvbWF0aW9uIHRoYXQgaXMgYXZhaWxhYmxlIGxvY2FsbHkgaXMgYSBsaXN0IG9mIEphdmFzY3JpcHQgZmlsZXMsXG4gKiBhbmQgZXZlcnkgc291cmNlIGZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc2VhcmNoIHBhdGggdG8gcmVzb2x2ZSB0aGUgZnVydGhlclxuICogYGByZXF1aXJlYGAgY2FsbHMgbWFkZSBmcm9tIHRoZXJlLCB3aGljaCBpbmNsdWRlcyBpdHMgb3duIGRpcmVjdG9yeSBvbiBkaXNrLFxuICogYW5kIHBhcmVudCBkaXJlY3RvcmllcyAtIGZvciBleGFtcGxlOlxuICpcbiAqIFsgJy4uLnJlcG8vcGFja2FnZXMvYXdzLWNkay1yZXNvdXJjZXMvbGliL2Nmbi9ub2RlX21vZHVsZXMnLFxuICogICAnLi4ucmVwby9wYWNrYWdlcy9hd3MtY2RrLXJlc291cmNlcy9saWIvbm9kZV9tb2R1bGVzJyxcbiAqICAgJy4uLnJlcG8vcGFja2FnZXMvYXdzLWNkay1yZXNvdXJjZXMvbm9kZV9tb2R1bGVzJyxcbiAqICAgJy4uLnJlcG8vcGFja2FnZXMvbm9kZV9tb2R1bGVzJyxcbiAqICAgLy8gZXRjLi4uXG4gKiBdXG4gKlxuICogV2UgYXJlIGxvb2tpbmcgZm9yIGBgcGFja2FnZS5qc29uYGAgdGhhdCBpcyBhbnl3aGVyZSBpbiB0aGUgdHJlZSwgZXhjZXB0IGl0J3NcbiAqIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LCBub3QgaW4gdGhlIGBgbm9kZV9tb2R1bGVzYGAgZGlyZWN0b3J5LiBGb3IgdGhpc1xuICogcmVhc29uLCB3ZSBzdHJpcCB0aGUgYGAvbm9kZV9tb2R1bGVzYGAgc3VmZml4IG9mZiBlYWNoIHBhdGggYW5kIHVzZSByZWd1bGFyXG4gKiBtb2R1bGUgcmVzb2x1dGlvbiB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYGBwYWNrYWdlLmpzb25gYC5cbiAqXG4gKiBAcGFyYW0gZmlsZU5hbWUgYSBqYXZhc2NyaXB0IGZpbGUgbmFtZS5cbiAqIEByZXR1cm5zIHRoZSBOUE0gbW9kdWxlIGluZm9zIChha2EgYGBwYWNrYWdlLmpzb25gYCBjb250ZW50cyksIG9yXG4gKiAgICAgICAgICBgYHVuZGVmaW5lZGBgIGlmIHRoZSBsb29rdXAgd2FzIHVuc3VjY2Vzc2Z1bC5cbiAqL1xuZnVuY3Rpb24gZmluZE5wbVBhY2thZ2UoZmlsZU5hbWU6IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHByaXZhdGU/OiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZU5hbWVdO1xuICAgIGNvbnN0IHBhdGhzID0gbW9kLnBhdGhzLm1hcChzdHJpcE5vZGVNb2R1bGVzKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3BhY2thZ2UuanNvbicsIHsgcGF0aHMgfSk7XG4gICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcyBhIHBhdGguXG4gICAgICogQHJldHVybnMgYGBzYGAgd2l0aCBhbnkgdGVybWluYXRpbmcgYGAvbm9kZV9tb2R1bGVzYGBcbiAgICAgKiAgICAgICAgICAob3IgYGBcXFxcbm9kZV9tb2R1bGVzYGApIHN0cmlwcGVkIG9mZi4pXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RyaXBOb2RlTW9kdWxlcyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAocy5lbmRzV2l0aCgnL25vZGVfbW9kdWxlcycpIHx8IHMuZW5kc1dpdGgoJ1xcXFxub2RlX21vZHVsZXMnKSkge1xuICAgICAgICAgICAgLy8gL25vZGVfbW9kdWxlcyBpcyAxMyBjaGFyYWN0ZXJzXG4gICAgICAgICAgICByZXR1cm4gcy5zdWJzdHIoMCwgcy5sZW5ndGggLSAxMyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLHNDQUF1QztBQUN2QyxrREFBK0M7QUFDL0MsZ0RBQTRFO0FBQzVFLDBDQUF3QztBQUV4Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO0FBRXpDOztHQUVHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsZ0JBQUk7SUFJM0IsWUFBWSxJQUFlO1FBQ3pCLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQixxR0FBcUc7WUFDckcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFJO2dCQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNwRTtZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsTUFBTSxH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TkQsa0JBNE5DO0FBRUQsTUFBYSxPQUFRLFNBQVEsR0FBRztJQUM5QixZQUFZLElBQWU7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRjtBQUxELDBCQUtDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBZ0I7SUFDdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLElBQUk7UUFDRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEI7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsZ0JBQWdCLENBQUMsQ0FBUztRQUNqQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQy9ELGlDQUFpQztZQUNqQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQganNCYXNlNjQgPSByZXF1aXJlKCdqcy1iYXNlNjQnKTtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjayc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE1ldGFkYXRhRW50cnksIFBBVEhfU0VQLCBSb290IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi9jb3JlL3Rva2Vucyc7XG5cbi8qKlxuICogQ2xvdWQgRXhlY3V0YWJsZSBpbnRlcmZhY2UgdmVyc2lvbi5cbiAqL1xuY29uc3QgQ1hfVkVSU0lPTiA9ICdDbG91ZEV4ZWN1dGFibGUvMS4wJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ0RLIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBSb290IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9nbmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0PzogY3hhcGkuQ1hSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKGFyZ3Y/OiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBhcmd2ID0gYXJndiB8fCBbXTtcblxuICAgIGlmIChhcmd2Lmxlbmd0aCA+PSAxKSB7XG4gICAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZW5kcyB3aXRoIFwiL25vZGVcIiBvciBcIm5vZGUuZXhlXCIsIHNraXAgaXQgKHRoaXMgaXMgYXJndlswXSBpbiBub2RlIHByb2dyYW1zKS5cbiAgICAgIGlmICgvW1xcL1xcXFxdbm9kZSg/OlxcLmV4ZSk/JC8udGVzdChhcmd2WzBdKSkge1xuICAgICAgICBhcmd2ID0gYXJndi5zbGljZSgxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9nbmFtZSA9IGFyZ3ZbMF0uc3BsaXQoJy8nKS5wb3AoKSE7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YubGVuZ3RoID4gMSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5wYXJzZVJlcXVlc3QoYXJndlsxXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHJlcXVlc3QgJyR7YXJndlsxXX0nOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZENvbnRleHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBzdGFja3MoKSB7XG4gICAgY29uc3Qgb3V0OiB7IFtuYW1lOiBzdHJpbmddOiBTdGFjayB9ID0geyB9O1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBTdGFjaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY2hpbGQgJHtjaGlsZC50b1N0cmluZygpfSBvZiBQcm9ncmFtIG11c3QgYmUgYSBTdGFja2ApO1xuICAgICAgfVxuXG4gICAgICBvdXRbY2hpbGQuaWRdID0gY2hpbGQgYXMgU3RhY2s7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgcHJvZ3JhbVxuICAgKiBAcmV0dXJucyBTVERPVVRcbiAgICovXG4gIHB1YmxpYyBydW4oKTogc3RyaW5nIHtcbiAgICAvLyBubyBhcmd1bWVudHMgLSBwcmludCB1c2FnZSBhbmQgZXhpdCBzdWNjZXNzZnVsbHkuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QgfHwgIXRoaXMucmVxdWVzdC50eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy51c2FnZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJ1bkNvbW1hbmQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0LCB1bmRlZmluZWQsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhcHAucnVuKCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlYygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnJ1bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCBzdGFja3MgaW4gdGhpcyBhcHAuXG4gICAqL1xuICBwdWJsaWMgbGlzdFN0YWNrcygpOiBjeGFwaS5TdGFja0luZm9bXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc3RhY2tzKS5tYXAobmFtZSA9PiB7XG4gICAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2tzW25hbWVdO1xuICAgICAgY29uc3QgcmVnaW9uID0gc3RhY2suZW52LnJlZ2lvbjtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBzdGFjay5lbnYuYWNjb3VudDtcbiAgICAgIGxldCBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoYWNjb3VudCAmJiByZWdpb24pIHtcbiAgICAgICAgZW52aXJvbm1lbnQgPSB7IG5hbWU6IGAke2FjY291bnR9LyR7cmVnaW9ufWAsIGFjY291bnQsIHJlZ2lvbiB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgbmFtZSwgZW52aXJvbm1lbnQgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplIGFuZCB2YWxpZGF0ZSBhIHNpbmdsZSBzdGFja1xuICAgKiBAcGFyYW0gc3RhY2tOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byBzeW50aGVzaXplXG4gICAqL1xuICBwdWJsaWMgc3ludGhlc2l6ZVN0YWNrKHN0YWNrTmFtZTogc3RyaW5nKTogY3hhcGkuU3ludGhlc2l6ZWRTdGFjayB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmdldFN0YWNrKHN0YWNrTmFtZSk7XG5cbiAgICAvLyBmaXJzdCwgdmFsaWRhdGUgdGhpcyBzdGFjayBhbmQgc3RvcCBpZiB0aGVyZSBhcmUgZXJyb3JzLlxuICAgIGNvbnN0IGVycm9ycyA9IHN0YWNrLnZhbGlkYXRlVHJlZSgpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JMaXN0ID0gZXJyb3JzLm1hcChlID0+IGBbJHtlLnNvdXJjZS5wYXRofV0gJHtlLm1lc3NhZ2V9YCkuam9pbignXFxuICAnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgdmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fWApO1xuICAgIH1cblxuICAgIGxldCBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YWNrLmVudi5hY2NvdW50ICYmIHN0YWNrLmVudi5yZWdpb24pIHtcbiAgICAgIGVudmlyb25tZW50ID0ge1xuICAgICAgICBuYW1lOiBgJHtzdGFjay5lbnYuYWNjb3VudH0vJHtzdGFjay5lbnYucmVnaW9ufWAsXG4gICAgICAgIGFjY291bnQ6IHN0YWNrLmVudi5hY2NvdW50LFxuICAgICAgICByZWdpb246IHN0YWNrLmVudi5yZWdpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN0YWNrLmlkLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBtaXNzaW5nOiBPYmplY3Qua2V5cyhzdGFjay5taXNzaW5nQ29udGV4dCkubGVuZ3RoID8gc3RhY2subWlzc2luZ0NvbnRleHQgOiB1bmRlZmluZWQsXG4gICAgICB0ZW1wbGF0ZTogc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLFxuICAgICAgbWV0YWRhdGE6IHRoaXMuY29sbGVjdE1ldGFkYXRhKHN0YWNrKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgbXVsdGlwbGUgc3RhY2tzXG4gICAqL1xuICBwdWJsaWMgc3ludGhlc2l6ZVN0YWNrcyhzdGFja05hbWVzOiBzdHJpbmdbXSk6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2tbXSB7XG4gICAgY29uc3QgcmV0OiBjeGFwaS5TeW50aGVzaXplZFN0YWNrW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHN0YWNrTmFtZSBvZiBzdGFja05hbWVzKSB7XG4gICAgICByZXQucHVzaCh0aGlzLnN5bnRoZXNpemVTdGFjayhzdGFja05hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1ldGFkYXRhIGZvciBhbGwgY29uc3RydWN0cyBpbiB0aGUgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdE1ldGFkYXRhKHN0YWNrOiBTdGFjaykge1xuICAgIGNvbnN0IG91dHB1dDogeyBbaWQ6IHN0cmluZ106IE1ldGFkYXRhRW50cnlbXSB9ID0geyB9O1xuXG4gICAgdmlzaXQoc3RhY2spO1xuXG4gICAgLy8gYWRkIGFwcC1sZXZlbCBtZXRhZGF0YSB1bmRlciBcIi5cIlxuICAgIGlmICh0aGlzLm1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIG91dHB1dFtQQVRIX1NFUF0gPSB0aGlzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG5cbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBDb25zdHJ1Y3QpIHtcbiAgICAgIGlmIChub2RlLm1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTWFrZSB0aGUgcGF0aCBhYnNvbHV0ZVxuICAgICAgICBvdXRwdXRbUEFUSF9TRVAgKyBub2RlLnBhdGhdID0gbm9kZS5tZXRhZGF0YS5tYXAobWQgPT4gcmVzb2x2ZShtZCkgYXMgTWV0YWRhdGFFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0UnVudGltZUluZm9ybWF0aW9uKCk6IGN4YXBpLkFwcFJ1bnRpbWUge1xuICAgIGNvbnN0IGxpYnJhcmllczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSkpIHtcbiAgICAgIGNvbnN0IHBrZyA9IGZpbmROcG1QYWNrYWdlKGZpbGVOYW1lKTtcbiAgICAgIGlmIChwa2cgJiYgIXBrZy5wcml2YXRlKSB7XG4gICAgICAgIGxpYnJhcmllc1twa2cubmFtZV0gPSBwa2cudmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBsaWJyYXJpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhY2soc3RhY2tuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoc3RhY2tuYW1lID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RhY2sgbmFtZSBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2tzW3N0YWNrbmFtZV07XG4gICAgaWYgKCFzdGFjaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBzdGFjayAke3N0YWNrbmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5Db21tYW5kKCkge1xuICAgIHN3aXRjaCAodGhpcy5yZXF1ZXN0IS50eXBlKSB7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFja3M6IHRoaXMubGlzdFN0YWNrcygpXG4gICAgICAgIH0gYXMgY3hhcGkuTGlzdFN0YWNrc1Jlc3BvbnNlO1xuXG4gICAgICBjYXNlICdzeW50aCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhY2tzOiB0aGlzLnN5bnRoZXNpemVTdGFja3MoKHRoaXMucmVxdWVzdCBhcyBjeGFwaS5TeW50aGVzaXplUmVxdWVzdCkuc3RhY2tzKSxcbiAgICAgICAgICBydW50aW1lOiB0aGlzLmNvbGxlY3RSdW50aW1lSW5mb3JtYXRpb24oKVxuICAgICAgICB9IGFzIGN4YXBpLlN5bnRoZXNpemVSZXNwb25zZTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5yZXF1ZXN0IS50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHVzYWdlKCkge1xuICAgIGNvbnN0IHByb2duYW1lID0gdGhpcy5wcm9nbmFtZSA/IHRoaXMucHJvZ25hbWUgKyAnICcgOiAnJztcblxuICAgIHJldHVybiBgJHtDWF9WRVJTSU9OfVxuXG5Vc2FnZTpcbiAgJHtwcm9nbmFtZX1SRVFVRVNUXG5cblJFUVVFU1QgaXMgYSBKU09OLWVuY29kZWQgcmVxdWVzdCBvYmplY3QuXG5gO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gKHRoaXMucmVxdWVzdCAmJiB0aGlzLnJlcXVlc3QuY29udGV4dCkgfHwge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29udGV4dCkpIHtcbiAgICAgIHRoaXMuc2V0Q29udGV4dChrZXksIGNvbnRleHRba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3QocmVxOiBzdHJpbmcpOiBjeGFwaS5DWFJlcXVlc3Qge1xuICAgIC8vIGFsbG93IHRvb2xraXQgdG8gc2VuZCByZXF1ZXN0IGluIGJhc2U2NCBpZiB0aGV5IGJlZ2luIHdpdGggXCJiYXNlNjQ6XCJcbiAgICAvLyB0aGlzIGlzIGluIG9yZGVyIHRvIGF2b2lkIHNoZWxsIGVzY2FwaW5nIGlzc3VlcyB3aGVuIGRlZmluaW5nIFwiLS1hcHBcIlxuICAgIC8vIGluIHRoZSB0b29sa2l0LlxuICAgIGlmIChyZXEuc3RhcnRzV2l0aChjeGFwaS5CQVNFNjRfUkVRX1BSRUZJWCkpIHtcbiAgICAgIHJlcSA9IGpzQmFzZTY0LkJhc2U2NC5mcm9tQmFzZTY0KHJlcS5zbGljZShjeGFwaS5CQVNFNjRfUkVRX1BSRUZJWC5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBhcyBKU09OXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIEFwcCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3Y/OiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKGFyZ3YpO1xuICAgIHRoaXMuYWRkV2FybmluZygnXCJQcm9ncmFtXCIgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBcIkFwcFwiJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIE5QTSBtb2R1bGUgYSBnaXZlbiBsb2FkZWQgamF2YXNjcmlwdCBmaWxlIGlzIGZyb20uXG4gKlxuICogVGhlIG9ubHkgaW5mcm9tYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgbG9jYWxseSBpcyBhIGxpc3Qgb2YgSmF2YXNjcmlwdCBmaWxlcyxcbiAqIGFuZCBldmVyeSBzb3VyY2UgZmlsZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBzZWFyY2ggcGF0aCB0byByZXNvbHZlIHRoZSBmdXJ0aGVyXG4gKiBgYHJlcXVpcmVgYCBjYWxscyBtYWRlIGZyb20gdGhlcmUsIHdoaWNoIGluY2x1ZGVzIGl0cyBvd24gZGlyZWN0b3J5IG9uIGRpc2ssXG4gKiBhbmQgcGFyZW50IGRpcmVjdG9yaWVzIC0gZm9yIGV4YW1wbGU6XG4gKlxuICogWyAnLi4ucmVwby9wYWNrYWdlcy9hd3MtY2RrLXJlc291cmNlcy9saWIvY2ZuL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL2xpYi9ub2RlX21vZHVsZXMnLFxuICogICAnLi4ucmVwby9wYWNrYWdlcy9hd3MtY2RrLXJlc291cmNlcy9ub2RlX21vZHVsZXMnLFxuICogICAnLi4ucmVwby9wYWNrYWdlcy9ub2RlX21vZHVsZXMnLFxuICogICAvLyBldGMuLi5cbiAqIF1cbiAqXG4gKiBXZSBhcmUgbG9va2luZyBmb3IgYGBwYWNrYWdlLmpzb25gYCB0aGF0IGlzIGFueXdoZXJlIGluIHRoZSB0cmVlLCBleGNlcHQgaXQnc1xuICogaW4gdGhlIHBhcmVudCBkaXJlY3RvcnksIG5vdCBpbiB0aGUgYGBub2RlX21vZHVsZXNgYCBkaXJlY3RvcnkuIEZvciB0aGlzXG4gKiByZWFzb24sIHdlIHN0cmlwIHRoZSBgYC9ub2RlX21vZHVsZXNgYCBzdWZmaXggb2ZmIGVhY2ggcGF0aCBhbmQgdXNlIHJlZ3VsYXJcbiAqIG1vZHVsZSByZXNvbHV0aW9uIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byBgYHBhY2thZ2UuanNvbmBgLlxuICpcbiAqIEBwYXJhbSBmaWxlTmFtZSBhIGphdmFzY3JpcHQgZmlsZSBuYW1lLlxuICogQHJldHVybnMgdGhlIE5QTSBtb2R1bGUgaW5mb3MgKGFrYSBgYHBhY2thZ2UuanNvbmBgIGNvbnRlbnRzKSwgb3JcbiAqICAgICAgYGB1bmRlZmluZWRgYCBpZiB0aGUgbG9va3VwIHdhcyB1bnN1Y2Nlc3NmdWwuXG4gKi9cbmZ1bmN0aW9uIGZpbmROcG1QYWNrYWdlKGZpbGVOYW1lOiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBwcml2YXRlPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlTmFtZV07XG4gIGNvbnN0IHBhdGhzID0gbW9kLnBhdGhzLm1hcChzdHJpcE5vZGVNb2R1bGVzKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3BhY2thZ2UuanNvbicsIHsgcGF0aHMgfSk7XG4gICAgcmV0dXJuIHJlcXVpcmUocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzIGEgcGF0aC5cbiAgICogQHJldHVybnMgYGBzYGAgd2l0aCBhbnkgdGVybWluYXRpbmcgYGAvbm9kZV9tb2R1bGVzYGBcbiAgICogICAgICAob3IgYGBcXFxcbm9kZV9tb2R1bGVzYGApIHN0cmlwcGVkIG9mZi4pXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpcE5vZGVNb2R1bGVzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHMuZW5kc1dpdGgoJy9ub2RlX21vZHVsZXMnKSB8fCBzLmVuZHNXaXRoKCdcXFxcbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgIC8vIC9ub2RlX21vZHVsZXMgaXMgMTMgY2hhcmFjdGVyc1xuICAgICAgcmV0dXJuIHMuc3Vic3RyKDAsIHMubGVuZ3RoIC0gMTMpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxufVxuIl19

@@ -18,3 +18,3 @@ import { Token } from '..';

*
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
*

@@ -43,3 +43,3 @@ */

*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*

@@ -59,3 +59,3 @@ * After parsing the resourceName will not contain

* @returns an ArnComponents object which allows access to the various
* components of the ARN.
* components of the ARN.
*/

@@ -78,3 +78,3 @@ static parse(arn: string, sepIfToken?: string, hasName?: boolean): ArnComponents;

*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*

@@ -81,0 +81,0 @@ * After parsing the resourceName will not contain 'path/to/exampleobject.png'

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

*
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
*

@@ -68,3 +68,3 @@ */

*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*

@@ -84,3 +84,3 @@ * After parsing the resourceName will not contain

* @returns an ArnComponents object which allows access to the various
* components of the ARN.
* components of the ARN.
*/

@@ -165,3 +165,3 @@ static parse(arn, sepIfToken = '/', hasName = true) {

*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*

@@ -218,2 +218,2 @@ * After parsing the resourceName will not contain 'path/to/exampleobject.png'

exports.ArnUtils = ArnUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQTRFO0FBQzVFLDZDQUF5RDtBQUN6RCwyQ0FBNEM7QUFDNUMsaUVBQTZEO0FBRTdEOzs7R0FHRztBQUNILE1BQWEsUUFBUTtJQUNqQjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUF5QjtRQUNsRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDMUMsQ0FBQyxDQUFDLElBQUksZ0JBQVksRUFBRTtZQUNwQixDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDcEMsQ0FBQyxDQUFDLElBQUksYUFBUyxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSTtZQUN0QyxDQUFDLENBQUMsSUFBSSxnQkFBWSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRXpCLE1BQU0sTUFBTSxHQUFHLENBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFFLENBQUM7UUFFdkgsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDbEMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFB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cU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQWNjb3VudElkLCBBd3NQYXJ0aXRpb24sIEF3c1JlZ2lvbiwgRm5Db25jYXQsIFRva2VuIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgRm5TZWxlY3QsIEZuU3BsaXQgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbi9mbic7XG5pbXBvcnQgeyB1bnJlc29sdmVkIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuXG4vKipcbiAqIEFuIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvYXdzLWFybnMtYW5kLW5hbWVzcGFjZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgQXJuVXRpbHMge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gQVJOIGZyb20gY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIElmIGBwYXJ0aXRpb25gLCBgcmVnaW9uYCBvciBgYWNjb3VudGAgYXJlIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFjaydzXG4gICAgICogcGFydGl0aW9uLCByZWdpb24gYW5kIGFjY291bnQgd2lsbCBiZSB1c2VkLlxuICAgICAqXG4gICAgICogSWYgYW55IGNvbXBvbmVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSBpbnNlcnRlZFxuICAgICAqIGludG8gdGhlIGdlbmVyYXRlZCBBUk4gYXQgdGhlIGxvY2F0aW9uIHRoYXQgY29tcG9uZW50IGNvcnJlc3BvbmRzIHRvLlxuICAgICAqXG4gICAgICogVGhlIEFSTiB3aWxsIGJlIGZvcm1hdHRlZCBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogICAgIGFybjp7cGFydGl0aW9ufTp7c2VydmljZX06e3JlZ2lvbn06e2FjY291bnR9OntyZXNvdXJjZX17c2VwfX17cmVzb3VyY2UtbmFtZX1cbiAgICAgKlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudHMoY29tcG9uZW50czogQXJuQ29tcG9uZW50cyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IGNvbXBvbmVudHMucGFydGl0aW9uID09IG51bGxcbiAgICAgICAgICAgID8gbmV3IEF3c1BhcnRpdGlvbigpXG4gICAgICAgICAgICA6IGNvbXBvbmVudHMucGFydGl0aW9uO1xuICAgICAgICBjb25zdCByZWdpb24gPSBjb21wb25lbnRzLnJlZ2lvbiA9PSBudWxsXG4gICAgICAgICAgICA/IG5ldyBBd3NSZWdpb24oKVxuICAgICAgICAgICAgOiBjb21wb25lbnRzLnJlZ2lvbjtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IGNvbXBvbmVudHMuYWNjb3VudCA9PSBudWxsXG4gICAgICAgICAgICA/IG5ldyBBd3NBY2NvdW50SWQoKVxuICAgICAgICAgICAgOiBjb21wb25lbnRzLmFjY291bnQ7XG5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gWyAnYXJuJywgJzonLCBwYXJ0aXRpb24sICc6JywgY29tcG9uZW50cy5zZXJ2aWNlLCAnOicsIHJlZ2lvbiwgJzonLCBhY2NvdW50LCAnOicsIGNvbXBvbmVudHMucmVzb3VyY2UgXTtcblxuICAgICAgICBjb25zdCBzZXAgPSBjb21wb25lbnRzLnNlcCB8fCAnLyc7XG4gICAgICAgIGlmIChzZXAgIT09ICcvJyAmJiBzZXAgIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvdXJjZVBhdGhTZXAgbWF5IG9ubHkgYmUgXCI6XCIgb3IgXCIvXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wb25lbnRzLnJlc291cmNlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChzZXApO1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goY29tcG9uZW50cy5yZXNvdXJjZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGbkNvbmNhdCguLi52YWx1ZXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBBUk4gaXMgYSBjb25jcmV0ZSBzdHJpbmcsIGl0IHdpbGwgYmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuIFRoZVxuICAgICAqIHNlcGFyYXRvciAoYHNlcGApIHdpbGwgYmUgc2V0IHRvICcvJyBpZiB0aGUgNnRoIGNvbXBvbmVudCBpbmNsdWRlcyBhICcvJyxcbiAgICAgKiBpbiB3aGljaCBjYXNlLCBgcmVzb3VyY2VgIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBiZWZvcmUgdGhlICcvJyBhbmRcbiAgICAgKiBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHRoZSByZXN0LiBJbiBjYXNlIHRoZXJlIGlzIG5vICcvJywgYHJlc291cmNlYCB3aWxsXG4gICAgICogYmUgc2V0IHRvIHRoZSA2dGggY29tcG9uZW50cyBhbmQgYHJlc291cmNlTmFtZWAgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3RcbiAgICAgKiBvZiB0aGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogSWYgdGhlIEFSTiBpbmNsdWRlcyB0b2tlbnMgKG9yIGlzIGEgdG9rZW4pLCB0aGUgQVJOIGNhbm5vdCBiZSB2YWxpZGF0ZWQsXG4gICAgICogc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIHZhbHVlIHlldCBhdCB0aGUgdGltZSBvZiB0aGlzIGZ1bmN0aW9uXG4gICAgICogY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3IgYW5kIHRoZSB0eXBlIG9mIEFSTi4gVGhlXG4gICAgICogcmVzdWx0aW5nIGBBcm5Db21wb25lbnRzYCBvYmplY3Qgd2lsbCBjb250YWluIHRva2VucyBmb3IgdGhlXG4gICAgICogc3ViZXhwcmVzc2lvbnMgb2YgdGhlIEFSTiwgbm90IHN0cmluZyBsaXRlcmFscy4gSW4gdGhpcyBjYXNlIHRoaXNcbiAgICAgKiBmdW5jdGlvbiBjYW5ub3QgcHJvcGVybHkgcGFyc2UgdGhlIGNvbXBsZXRlIGZpbmFsIHJlc291cmNlTmFtZSAocGF0aCkgb3V0XG4gICAgICogb2YgQVJOcyB0aGF0IHVzZSAnLycgdG8gYm90aCBzZXBhcmF0ZSB0aGUgJ3Jlc291cmNlJyBmcm9tIHRoZVxuICAgICAqICdyZXNvdXJjZU5hbWUnIEFORCB0byBzdWJkaXZpZGUgdGhlIHJlc291cmNlTmFtZSBmdXJ0aGVyLiBGb3IgZXhhbXBsZSwgaW5cbiAgICAgKiBTMyBBUk5zOlxuICAgICAqXG4gICAgICogICAgICBhcm46YXdzOnMzOjo6bXlfY29ycG9yYXRlX2J1Y2tldC9wYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nXG4gICAgICpcbiAgICAgKiBBZnRlciBwYXJzaW5nIHRoZSByZXNvdXJjZU5hbWUgd2lsbCBub3QgY29udGFpblxuICAgICAqICdwYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nJyBidXQgc2ltcGx5ICdwYXRoJy4gVGhpcyBpcyBhIGxpbWl0YXRpb25cbiAgICAgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNsaWNpbmcgZnVuY3Rpb25hbGl0eSBpbiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VwIFRoZSBzZXBhcmF0b3IgdXNlZCB0byBzZXBhcmF0ZSByZXNvdXJjZSBmcm9tIHJlc291cmNlTmFtZVxuICAgICAqIEBwYXJhbSBoYXNOYW1lIFdoZXRoZXIgdGhlcmUgaXMgYSBuYW1lIGNvbXBvbmVudCBpbiB0aGUgQVJOIGF0IGFsbC4gRm9yXG4gICAgICogZXhhbXBsZSwgU05TIFRvcGljcyBBUk5zIGhhdmUgdGhlICdyZXNvdXJjZScgY29tcG9uZW50IGNvbnRhaW4gdGhlIHRvcGljXG4gICAgICogbmFtZSwgYW5kIG5vICdyZXNvdXJjZU5hbWUnIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIEFybkNvbXBvbmVudHMgb2JqZWN0IHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHZhcmlvdXNcbiAgICAgKiBjb21wb25lbnRzIG9mIHRoZSBBUk4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAgICogICAgICAgICAgY29tcG9uZW50cyBvZiB0aGUgQVJOLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2UoYXJuOiBzdHJpbmcsIHNlcElmVG9rZW46IHN0cmluZyA9ICcvJywgaGFzTmFtZTogYm9vbGVhbiA9IHRydWUpOiBBcm5Db21wb25lbnRzIHtcbiAgICAgICAgaWYgKHVucmVzb2x2ZWQoYXJuKSkge1xuICAgICAgICAgICAgcmV0dXJuIEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oYXJuKSwgc2VwSWZUb2tlbiwgaGFzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gYXJuLnNwbGl0KCc6JykgYXMgQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPCA2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBoYXZlIGF0IGxlYXN0IDYgY29tcG9uZW50czogJyArIGFybik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbIGFyblByZWZpeCwgcGFydGl0aW9uLCBzZXJ2aWNlLCByZWdpb24sIGFjY291bnQsIHNpeHRoLCAuLi5yZXN0IF0gPSBjb21wb25lbnRzO1xuXG4gICAgICAgIGlmIChhcm5QcmVmaXggIT09ICdhcm4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBzdGFydCB3aXRoIFwiYXJuOlwiOiAnICsgYXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHNlcnZpY2VgIGNvbXBvbmVudCAoM3JkIGNvbXBvbmVudCkgaXMgcmVxdWlyZWQ6ICcgKyBhcm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaXh0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHJlc291cmNlYCBjb21wb25lbnQgKDZ0aCBjb21wb25lbnQpIGlzIHJlcXVpcmVkOiAnICsgYXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNvdXJjZTogc3RyaW5nO1xuICAgICAgICBsZXQgcmVzb3VyY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzZXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgc2VwSW5kZXggPSBzaXh0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGlmIChzZXBJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNlcCA9ICcvJztcbiAgICAgICAgfSBlbHNlIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlcCA9ICc6JztcbiAgICAgICAgICAgIHNlcEluZGV4ID0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VwSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IHNpeHRoLnN1YnN0cigwLCBzZXBJbmRleCk7XG4gICAgICAgICAgICByZXNvdXJjZU5hbWUgPSBzaXh0aC5zdWJzdHIoc2VwSW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gc2l4dGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWUgKz0gJzonO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvdXJjZU5hbWUgKz0gcmVzdC5qb2luKCc6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEFybkNvbXBvbmVudHMgPSB7IHNlcnZpY2UsIHJlc291cmNlIH07XG4gICAgICAgIGlmIChwYXJ0aXRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnaW9uKSB7XG4gICAgICAgICAgICByZXN1bHQucmVnaW9uID0gcmVnaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hY2NvdW50ID0gYWNjb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZU5hbWUgPSByZXNvdXJjZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VwKSB7XG4gICAgICAgICAgICByZXN1bHQuc2VwID0gc2VwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIFRva2VuIGV2YWx1YXRpbmcgdG8gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIFRoZSBBUk4gY2Fubm90IGJlIHZhbGlkYXRlZCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIHZhbHVlIHlldFxuICAgICAqIGF0IHRoZSB0aW1lIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3JcbiAgICAgKiBhbmQgdGhlIHR5cGUgb2YgQVJOLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdGluZyBgQXJuQ29tcG9uZW50c2Agb2JqZWN0IHdpbGwgY29udGFpbiB0b2tlbnMgZm9yIHRoZVxuICAgICAqIHN1YmV4cHJlc3Npb25zIG9mIHRoZSBBUk4sIG5vdCBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBwcm9wZXJseSBwYXJzZSB0aGUgY29tcGxldGUgZmluYWxcbiAgICAgKiByZXNvdXJjZU5hbWUgKHBhdGgpIG91dCBvZiBBUk5zIHRoYXQgdXNlICcvJyB0byBib3RoIHNlcGFyYXRlIHRoZVxuICAgICAqICdyZXNvdXJjZScgZnJvbSB0aGUgJ3Jlc291cmNlTmFtZScgQU5EIHRvIHN1YmRpdmlkZSB0aGUgcmVzb3VyY2VOYW1lXG4gICAgICogZnVydGhlci4gRm9yIGV4YW1wbGUsIGluIFMzIEFSTnM6XG4gICAgICpcbiAgICAgKiAgICAgIGFybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0L3BhdGgvdG8vZXhhbXBsZW9iamVjdC5wbmdcbiAgICAgKlxuICAgICAqIEFmdGVyIHBhcnNpbmcgdGhlIHJlc291cmNlTmFtZSB3aWxsIG5vdCBjb250YWluICdwYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nJ1xuICAgICAqIGJ1dCBzaW1wbHkgJ3BhdGgnLiBUaGlzIGlzIGEgbGltaXRhdGlvbiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNsaWNpbmdcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGluIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcm4gVGhlIGlucHV0IHRva2VuIHRoYXQgY29udGFpbnMgYW4gQVJOXG4gICAgICogQHBhcmFtIHNlcCBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gc2VwYXJhdGUgcmVzb3VyY2UgZnJvbSByZXNvdXJjZU5hbWVcbiAgICAgKiBAcGFyYW0gaGFzTmFtZSBXaGV0aGVyIHRoZXJlIGlzIGEgbmFtZSBjb21wb25lbnQgaW4gdGhlIEFSTiBhdCBhbGwuXG4gICAgICogRm9yIGV4YW1wbGUsIFNOUyBUb3BpY3MgQVJOcyBoYXZlIHRoZSAncmVzb3VyY2UnIGNvbXBvbmVudCBjb250YWluIHRoZVxuICAgICAqIHRvcGljIG5hbWUsIGFuZCBubyAncmVzb3VyY2VOYW1lJyBjb21wb25lbnQuXG4gICAgICogQHJldHVybnMgYW4gQXJuQ29tcG9uZW50cyBvYmplY3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byB0aGUgdmFyaW91c1xuICAgICAqIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlVG9rZW4oYXJuOiBUb2tlbiwgc2VwOiBzdHJpbmcgPSAnLycsIGhhc05hbWU6IGJvb2xlYW4gPSB0cnVlKTogQXJuQ29tcG9uZW50cyB7XG4gICAgICAgIC8vIEFybiBBUk4gbG9va3MgbGlrZTpcbiAgICAgICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNlXG4gICAgICAgIC8vIGFybjpwYXJ0aXRpb246c2VydmljZTpyZWdpb246YWNjb3VudC1pZDpyZXNvdXJjZXR5cGUvcmVzb3VyY2VcbiAgICAgICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNldHlwZTpyZXNvdXJjZVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdGhlICdoYXNOYW1lJyBhcmd1bWVudCBiZWNhdXNlIHtGbjo6U2VsZWN0fWluZyBhIG5vbmV4aXN0ZW50IGZpZWxkXG4gICAgICAgIC8vIHRocm93cyBhbiBlcnJvci5cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gbmV3IEZuU3BsaXQoJzonLCBhcm4pO1xuXG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IG5ldyBGblNlbGVjdCgxLCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEZuU2VsZWN0KDIsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBGblNlbGVjdCgzLCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gbmV3IEZuU2VsZWN0KDQsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKHNlcCA9PT0gJzonKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBGblNlbGVjdCg1LCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gaGFzTmFtZSA/IG5ldyBGblNlbGVjdCg2LCBjb21wb25lbnRzKS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICByZXR1cm4geyBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgcmVzb3VyY2UsIHJlc291cmNlTmFtZSwgc2VwIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29tcG9uZW50cyA9IG5ldyBGblNwbGl0KHNlcCwgbmV3IEZuU2VsZWN0KDUsIGNvbXBvbmVudHMpKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgRm5TZWxlY3QoMCwgbGFzdENvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBoYXNOYW1lID8gbmV3IEZuU2VsZWN0KDEsIGxhc3RDb21wb25lbnRzKS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICByZXR1cm4geyBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgcmVzb3VyY2UsIHJlc291cmNlTmFtZSwgc2VwIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBUb2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc291cmNlIGNvbXBvbmVudCBvZiB0aGUgQVJOXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZXNvdXJjZUNvbXBvbmVudChhcm46IHN0cmluZywgc2VwOiBzdHJpbmcgPSAnLycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oYXJuKSwgc2VwKS5yZXNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBUb2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc291cmNlIE5hbWUgY29tcG9uZW50IG9mIHRoZSBBUk5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlc291cmNlTmFtZUNvbXBvbmVudChhcm46IHN0cmluZywgc2VwOiBzdHJpbmcgPSAnLycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oYXJuKSwgc2VwLCB0cnVlKS5yZXNvdXJjZU5hbWUhO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcm5Db21wb25lbnRzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFydGl0aW9uIHRoYXQgdGhlIHJlc291cmNlIGlzIGluLiBGb3Igc3RhbmRhcmQgQVdTIHJlZ2lvbnMsIHRoZVxuICAgICAqIHBhcnRpdGlvbiBpcyBhd3MuIElmIHlvdSBoYXZlIHJlc291cmNlcyBpbiBvdGhlciBwYXJ0aXRpb25zLCB0aGVcbiAgICAgKiBwYXJ0aXRpb24gaXMgYXdzLXBhcnRpdGlvbm5hbWUuIEZvciBleGFtcGxlLCB0aGUgcGFydGl0aW9uIGZvciByZXNvdXJjZXNcbiAgICAgKiBpbiB0aGUgQ2hpbmEgKEJlaWppbmcpIHJlZ2lvbiBpcyBhd3MtY24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgQVdTIHBhcnRpdGlvbiB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAgICovXG4gICAgcGFydGl0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlcnZpY2UgbmFtZXNwYWNlIHRoYXQgaWRlbnRpZmllcyB0aGUgQVdTIHByb2R1Y3QgKGZvciBleGFtcGxlLFxuICAgICAqICdzMycsICdpYW0nLCAnY29kZXBpcGxpbmUnKS5cbiAgICAgKi9cbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVnaW9uIHRoZSByZXNvdXJjZSByZXNpZGVzIGluLiBOb3RlIHRoYXQgdGhlIEFSTnMgZm9yIHNvbWUgcmVzb3VyY2VzXG4gICAgICogZG8gbm90IHJlcXVpcmUgYSByZWdpb24sIHNvIHRoaXMgY29tcG9uZW50IG1pZ2h0IGJlIG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgcmVnaW9uIHRoZSBzdGFjayBpcyBkZXBsb3llZCB0by5cbiAgICAgKi9cbiAgICByZWdpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIEFXUyBhY2NvdW50IHRoYXQgb3ducyB0aGUgcmVzb3VyY2UsIHdpdGhvdXQgdGhlIGh5cGhlbnMuXG4gICAgICogRm9yIGV4YW1wbGUsIDEyMzQ1Njc4OTAxMi4gTm90ZSB0aGF0IHRoZSBBUk5zIGZvciBzb21lIHJlc291cmNlcyBkb24ndFxuICAgICAqIHJlcXVpcmUgYW4gYWNjb3VudCBudW1iZXIsIHNvIHRoaXMgY29tcG9uZW50IG1pZ2h0IGJlIG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgYWNjb3VudCB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAgICovXG4gICAgYWNjb3VudD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIHR5cGUgKGUuZy4gXCJ0YWJsZVwiLCBcImF1dG9TY2FsaW5nR3JvdXBcIiwgXCJjZXJ0aWZpY2F0ZVwiKS5cbiAgICAgKiBGb3Igc29tZSByZXNvdXJjZSB0eXBlcywgZS5nLiBTMyBidWNrZXRzLCB0aGlzIGZpZWxkIGRlZmluZXMgdGhlIGJ1Y2tldCBuYW1lLlxuICAgICAqL1xuICAgIHJlc291cmNlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgYmV0d2VlbiByZXNvdXJjZSB0eXBlIGFuZCB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBDYW4gYmUgZWl0aGVyICcvJyBvciAnOicuIFdpbGwgb25seSBiZSB1c2VkIGlmIHBhdGggaXMgZGVmaW5lZC5cbiAgICAgKiBAZGVmYXVsdCAnLydcbiAgICAgKi9cbiAgICBzZXA/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBuYW1lIG9yIHBhdGggd2l0aGluIHRoZSByZXNvdXJjZSAoaS5lLiBTMyBidWNrZXQgb2JqZWN0IGtleSkgb3JcbiAgICAgKiBhIHdpbGRjYXJkIHN1Y2ggYXMgYGBcIipcImBgLiBUaGlzIGlzIHNlcnZpY2UtZGVwZW5kZW50LlxuICAgICAqL1xuICAgIHJlc291cmNlTmFtZT86IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQTRFO0FBQzVFLDZDQUF5RDtBQUN6RCwyQ0FBNEM7QUFDNUMsaUVBQTZEO0FBRTdEOzs7R0FHRztBQUNILE1BQWEsUUFBUTtJQUNuQjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUF5QjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDNUMsQ0FBQyxDQUFDLElBQUksZ0JBQVksRUFBRTtZQUNwQixDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDdEMsQ0FBQyxDQUFDLElBQUksYUFBUyxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSTtZQUN4QyxDQUFDLENBQUMsSUFBSSxnQkFBWSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRXZCLE1BQU0sTUFBTSxHQUFHLENBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFFLENBQUM7UUFFdkgsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDbEMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFB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QXFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF3c0FjY291bnRJZCwgQXdzUGFydGl0aW9uLCBBd3NSZWdpb24sIEZuQ29uY2F0LCBUb2tlbiB9IGZyb20gJy4uJztcbmltcG9ydCB7IEZuU2VsZWN0LCBGblNwbGl0IH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24vZm4nO1xuaW1wb3J0IHsgdW5yZXNvbHZlZCB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4gfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uLXRva2VuJztcblxuLyoqXG4gKiBBbiBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKS5cbiAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2F3cy1hcm5zLWFuZC1uYW1lc3BhY2VzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFyblV0aWxzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQVJOIGZyb20gY29tcG9uZW50cy5cbiAgICpcbiAgICogSWYgYHBhcnRpdGlvbmAsIGByZWdpb25gIG9yIGBhY2NvdW50YCBhcmUgbm90IHNwZWNpZmllZCwgdGhlIHN0YWNrJ3NcbiAgICogcGFydGl0aW9uLCByZWdpb24gYW5kIGFjY291bnQgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBJZiBhbnkgY29tcG9uZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IHN0cmluZyB3aWxsIGJlIGluc2VydGVkXG4gICAqIGludG8gdGhlIGdlbmVyYXRlZCBBUk4gYXQgdGhlIGxvY2F0aW9uIHRoYXQgY29tcG9uZW50IGNvcnJlc3BvbmRzIHRvLlxuICAgKlxuICAgKiBUaGUgQVJOIHdpbGwgYmUgZm9ybWF0dGVkIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgYXJuOntwYXJ0aXRpb259OntzZXJ2aWNlfTp7cmVnaW9ufTp7YWNjb3VudH06e3Jlc291cmNlfXtzZXB9fXtyZXNvdXJjZS1uYW1lfVxuICAgKlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50cyhjb21wb25lbnRzOiBBcm5Db21wb25lbnRzKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0aXRpb24gPSBjb21wb25lbnRzLnBhcnRpdGlvbiA9PSBudWxsXG4gICAgICA/IG5ldyBBd3NQYXJ0aXRpb24oKVxuICAgICAgOiBjb21wb25lbnRzLnBhcnRpdGlvbjtcbiAgICBjb25zdCByZWdpb24gPSBjb21wb25lbnRzLnJlZ2lvbiA9PSBudWxsXG4gICAgICA/IG5ldyBBd3NSZWdpb24oKVxuICAgICAgOiBjb21wb25lbnRzLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gY29tcG9uZW50cy5hY2NvdW50ID09IG51bGxcbiAgICAgID8gbmV3IEF3c0FjY291bnRJZCgpXG4gICAgICA6IGNvbXBvbmVudHMuYWNjb3VudDtcblxuICAgIGNvbnN0IHZhbHVlcyA9IFsgJ2FybicsICc6JywgcGFydGl0aW9uLCAnOicsIGNvbXBvbmVudHMuc2VydmljZSwgJzonLCByZWdpb24sICc6JywgYWNjb3VudCwgJzonLCBjb21wb25lbnRzLnJlc291cmNlIF07XG5cbiAgICBjb25zdCBzZXAgPSBjb21wb25lbnRzLnNlcCB8fCAnLyc7XG4gICAgaWYgKHNlcCAhPT0gJy8nICYmIHNlcCAhPT0gJzonKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc291cmNlUGF0aFNlcCBtYXkgb25seSBiZSBcIjpcIiBvciBcIi9cIicpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRzLnJlc291cmNlTmFtZSAhPSBudWxsKSB7XG4gICAgICB2YWx1ZXMucHVzaChzZXApO1xuICAgICAgdmFsdWVzLnB1c2goY29tcG9uZW50cy5yZXNvdXJjZU5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRm5Db25jYXQoLi4udmFsdWVzKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIEFSTiwgcGFyc2VzIGl0IGFuZCByZXR1cm5zIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIElmIHRoZSBBUk4gaXMgYSBjb25jcmV0ZSBzdHJpbmcsIGl0IHdpbGwgYmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuIFRoZVxuICAgKiBzZXBhcmF0b3IgKGBzZXBgKSB3aWxsIGJlIHNldCB0byAnLycgaWYgdGhlIDZ0aCBjb21wb25lbnQgaW5jbHVkZXMgYSAnLycsXG4gICAqIGluIHdoaWNoIGNhc2UsIGByZXNvdXJjZWAgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIGJlZm9yZSB0aGUgJy8nIGFuZFxuICAgKiBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHRoZSByZXN0LiBJbiBjYXNlIHRoZXJlIGlzIG5vICcvJywgYHJlc291cmNlYCB3aWxsXG4gICAqIGJlIHNldCB0byB0aGUgNnRoIGNvbXBvbmVudHMgYW5kIGByZXNvdXJjZU5hbWVgIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN0XG4gICAqIG9mIHRoZSBzdHJpbmcuXG4gICAqXG4gICAqIElmIHRoZSBBUk4gaW5jbHVkZXMgdG9rZW5zIChvciBpcyBhIHRva2VuKSwgdGhlIEFSTiBjYW5ub3QgYmUgdmFsaWRhdGVkLFxuICAgKiBzaW5jZSB3ZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgdmFsdWUgeWV0IGF0IHRoZSB0aW1lIG9mIHRoaXMgZnVuY3Rpb25cbiAgICogY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3IgYW5kIHRoZSB0eXBlIG9mIEFSTi4gVGhlXG4gICAqIHJlc3VsdGluZyBgQXJuQ29tcG9uZW50c2Agb2JqZWN0IHdpbGwgY29udGFpbiB0b2tlbnMgZm9yIHRoZVxuICAgKiBzdWJleHByZXNzaW9ucyBvZiB0aGUgQVJOLCBub3Qgc3RyaW5nIGxpdGVyYWxzLiBJbiB0aGlzIGNhc2UgdGhpc1xuICAgKiBmdW5jdGlvbiBjYW5ub3QgcHJvcGVybHkgcGFyc2UgdGhlIGNvbXBsZXRlIGZpbmFsIHJlc291cmNlTmFtZSAocGF0aCkgb3V0XG4gICAqIG9mIEFSTnMgdGhhdCB1c2UgJy8nIHRvIGJvdGggc2VwYXJhdGUgdGhlICdyZXNvdXJjZScgZnJvbSB0aGVcbiAgICogJ3Jlc291cmNlTmFtZScgQU5EIHRvIHN1YmRpdmlkZSB0aGUgcmVzb3VyY2VOYW1lIGZ1cnRoZXIuIEZvciBleGFtcGxlLCBpblxuICAgKiBTMyBBUk5zOlxuICAgKlxuICAgKiAgICBhcm46YXdzOnMzOjo6bXlfY29ycG9yYXRlX2J1Y2tldC9wYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nXG4gICAqXG4gICAqIEFmdGVyIHBhcnNpbmcgdGhlIHJlc291cmNlTmFtZSB3aWxsIG5vdCBjb250YWluXG4gICAqICdwYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nJyBidXQgc2ltcGx5ICdwYXRoJy4gVGhpcyBpcyBhIGxpbWl0YXRpb25cbiAgICogYmVjYXVzZSB0aGVyZSBpcyBubyBzbGljaW5nIGZ1bmN0aW9uYWxpdHkgaW4gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VwIFRoZSBzZXBhcmF0b3IgdXNlZCB0byBzZXBhcmF0ZSByZXNvdXJjZSBmcm9tIHJlc291cmNlTmFtZVxuICAgKiBAcGFyYW0gaGFzTmFtZSBXaGV0aGVyIHRoZXJlIGlzIGEgbmFtZSBjb21wb25lbnQgaW4gdGhlIEFSTiBhdCBhbGwuIEZvclxuICAgKiBleGFtcGxlLCBTTlMgVG9waWNzIEFSTnMgaGF2ZSB0aGUgJ3Jlc291cmNlJyBjb21wb25lbnQgY29udGFpbiB0aGUgdG9waWNcbiAgICogbmFtZSwgYW5kIG5vICdyZXNvdXJjZU5hbWUnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgYW4gQXJuQ29tcG9uZW50cyBvYmplY3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byB0aGUgdmFyaW91c1xuICAgKiBjb21wb25lbnRzIG9mIHRoZSBBUk4uXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIEFybkNvbXBvbmVudHMgb2JqZWN0IHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHZhcmlvdXNcbiAgICogICAgICBjb21wb25lbnRzIG9mIHRoZSBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlKGFybjogc3RyaW5nLCBzZXBJZlRva2VuOiBzdHJpbmcgPSAnLycsIGhhc05hbWU6IGJvb2xlYW4gPSB0cnVlKTogQXJuQ29tcG9uZW50cyB7XG4gICAgaWYgKHVucmVzb2x2ZWQoYXJuKSkge1xuICAgICAgcmV0dXJuIEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oYXJuKSwgc2VwSWZUb2tlbiwgaGFzTmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IGFybi5zcGxpdCgnOicpIGFzIEFycmF5PHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbiAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPCA2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBoYXZlIGF0IGxlYXN0IDYgY29tcG9uZW50czogJyArIGFybik7XG4gICAgfVxuXG4gICAgY29uc3QgWyBhcm5QcmVmaXgsIHBhcnRpdGlvbiwgc2VydmljZSwgcmVnaW9uLCBhY2NvdW50LCBzaXh0aCwgLi4ucmVzdCBdID0gY29tcG9uZW50cztcblxuICAgIGlmIChhcm5QcmVmaXggIT09ICdhcm4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBzdGFydCB3aXRoIFwiYXJuOlwiOiAnICsgYXJuKTtcbiAgICB9XG5cbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBzZXJ2aWNlYCBjb21wb25lbnQgKDNyZCBjb21wb25lbnQpIGlzIHJlcXVpcmVkOiAnICsgYXJuKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpeHRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgcmVzb3VyY2VgIGNvbXBvbmVudCAoNnRoIGNvbXBvbmVudCkgaXMgcmVxdWlyZWQ6ICcgKyBhcm4pO1xuICAgIH1cblxuICAgIGxldCByZXNvdXJjZTogc3RyaW5nO1xuICAgIGxldCByZXNvdXJjZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgc2VwOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBsZXQgc2VwSW5kZXggPSBzaXh0aC5pbmRleE9mKCcvJyk7XG4gICAgaWYgKHNlcEluZGV4ICE9PSAtMSkge1xuICAgICAgc2VwID0gJy8nO1xuICAgIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICBzZXAgPSAnOic7XG4gICAgICBzZXBJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIGlmIChzZXBJbmRleCAhPT0gLTEpIHtcbiAgICAgIHJlc291cmNlID0gc2l4dGguc3Vic3RyKDAsIHNlcEluZGV4KTtcbiAgICAgIHJlc291cmNlTmFtZSA9IHNpeHRoLnN1YnN0cihzZXBJbmRleCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZSA9IHNpeHRoO1xuICAgIH1cblxuICAgIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICAgIHJlc291cmNlTmFtZSA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb3VyY2VOYW1lICs9ICc6JztcbiAgICAgIH1cblxuICAgICAgcmVzb3VyY2VOYW1lICs9IHJlc3Quam9pbignOicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQXJuQ29tcG9uZW50cyA9IHsgc2VydmljZSwgcmVzb3VyY2UgfTtcbiAgICBpZiAocGFydGl0aW9uKSB7XG4gICAgICByZXN1bHQucGFydGl0aW9uID0gcGFydGl0aW9uO1xuICAgIH1cblxuICAgIGlmIChyZWdpb24pIHtcbiAgICAgIHJlc3VsdC5yZWdpb24gPSByZWdpb247XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQpIHtcbiAgICAgIHJlc3VsdC5hY2NvdW50ID0gYWNjb3VudDtcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VOYW1lKSB7XG4gICAgICByZXN1bHQucmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lO1xuICAgIH1cblxuICAgIGlmIChzZXApIHtcbiAgICAgIHJlc3VsdC5zZXAgPSBzZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIFRva2VuIGV2YWx1YXRpbmcgdG8gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICpcbiAgICogVGhlIEFSTiBjYW5ub3QgYmUgdmFsaWRhdGVkLCBzaW5jZSB3ZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgdmFsdWUgeWV0XG4gICAqIGF0IHRoZSB0aW1lIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3JcbiAgICogYW5kIHRoZSB0eXBlIG9mIEFSTi5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBgQXJuQ29tcG9uZW50c2Agb2JqZWN0IHdpbGwgY29udGFpbiB0b2tlbnMgZm9yIHRoZVxuICAgKiBzdWJleHByZXNzaW9ucyBvZiB0aGUgQVJOLCBub3Qgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBwcm9wZXJseSBwYXJzZSB0aGUgY29tcGxldGUgZmluYWxcbiAgICogcmVzb3VyY2VOYW1lIChwYXRoKSBvdXQgb2YgQVJOcyB0aGF0IHVzZSAnLycgdG8gYm90aCBzZXBhcmF0ZSB0aGVcbiAgICogJ3Jlc291cmNlJyBmcm9tIHRoZSAncmVzb3VyY2VOYW1lJyBBTkQgdG8gc3ViZGl2aWRlIHRoZSByZXNvdXJjZU5hbWVcbiAgICogZnVydGhlci4gRm9yIGV4YW1wbGUsIGluIFMzIEFSTnM6XG4gICAqXG4gICAqICAgIGFybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0L3BhdGgvdG8vZXhhbXBsZW9iamVjdC5wbmdcbiAgICpcbiAgICogQWZ0ZXIgcGFyc2luZyB0aGUgcmVzb3VyY2VOYW1lIHdpbGwgbm90IGNvbnRhaW4gJ3BhdGgvdG8vZXhhbXBsZW9iamVjdC5wbmcnXG4gICAqIGJ1dCBzaW1wbHkgJ3BhdGgnLiBUaGlzIGlzIGEgbGltaXRhdGlvbiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNsaWNpbmdcbiAgICogZnVuY3Rpb25hbGl0eSBpbiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBhcm4gVGhlIGlucHV0IHRva2VuIHRoYXQgY29udGFpbnMgYW4gQVJOXG4gICAqIEBwYXJhbSBzZXAgVGhlIHNlcGFyYXRvciB1c2VkIHRvIHNlcGFyYXRlIHJlc291cmNlIGZyb20gcmVzb3VyY2VOYW1lXG4gICAqIEBwYXJhbSBoYXNOYW1lIFdoZXRoZXIgdGhlcmUgaXMgYSBuYW1lIGNvbXBvbmVudCBpbiB0aGUgQVJOIGF0IGFsbC5cbiAgICogRm9yIGV4YW1wbGUsIFNOUyBUb3BpY3MgQVJOcyBoYXZlIHRoZSAncmVzb3VyY2UnIGNvbXBvbmVudCBjb250YWluIHRoZVxuICAgKiB0b3BpYyBuYW1lLCBhbmQgbm8gJ3Jlc291cmNlTmFtZScgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAqIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VUb2tlbihhcm46IFRva2VuLCBzZXA6IHN0cmluZyA9ICcvJywgaGFzTmFtZTogYm9vbGVhbiA9IHRydWUpOiBBcm5Db21wb25lbnRzIHtcbiAgICAvLyBBcm4gQVJOIGxvb2tzIGxpa2U6XG4gICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNlXG4gICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNldHlwZS9yZXNvdXJjZVxuICAgIC8vIGFybjpwYXJ0aXRpb246c2VydmljZTpyZWdpb246YWNjb3VudC1pZDpyZXNvdXJjZXR5cGU6cmVzb3VyY2VcblxuICAgIC8vIFdlIG5lZWQgdGhlICdoYXNOYW1lJyBhcmd1bWVudCBiZWNhdXNlIHtGbjo6U2VsZWN0fWluZyBhIG5vbmV4aXN0ZW50IGZpZWxkXG4gICAgLy8gdGhyb3dzIGFuIGVycm9yLlxuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IG5ldyBGblNwbGl0KCc6JywgYXJuKTtcblxuICAgIGNvbnN0IHBhcnRpdGlvbiA9IG5ldyBGblNlbGVjdCgxLCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgRm5TZWxlY3QoMiwgY29tcG9uZW50cykudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgRm5TZWxlY3QoMywgY29tcG9uZW50cykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBhY2NvdW50ID0gbmV3IEZuU2VsZWN0KDQsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoc2VwID09PSAnOicpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gbmV3IEZuU2VsZWN0KDUsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBoYXNOYW1lID8gbmV3IEZuU2VsZWN0KDYsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB7IHBhcnRpdGlvbiwgc2VydmljZSwgcmVnaW9uLCBhY2NvdW50LCByZXNvdXJjZSwgcmVzb3VyY2VOYW1lLCBzZXAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdENvbXBvbmVudHMgPSBuZXcgRm5TcGxpdChzZXAsIG5ldyBGblNlbGVjdCg1LCBjb21wb25lbnRzKSk7XG5cbiAgICAgIGNvbnN0IHJlc291cmNlID0gbmV3IEZuU2VsZWN0KDAsIGxhc3RDb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gaGFzTmFtZSA/IG5ldyBGblNlbGVjdCgxLCBsYXN0Q29tcG9uZW50cykudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHsgcGFydGl0aW9uLCBzZXJ2aWNlLCByZWdpb24sIGFjY291bnQsIHJlc291cmNlLCByZXNvdXJjZU5hbWUsIHNlcCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBUb2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc291cmNlIGNvbXBvbmVudCBvZiB0aGUgQVJOXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlc291cmNlQ29tcG9uZW50KGFybjogc3RyaW5nLCBzZXA6IHN0cmluZyA9ICcvJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IFRva2VuKGFybiksIHNlcCkucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgVG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSByZXNvdXJjZSBOYW1lIGNvbXBvbmVudCBvZiB0aGUgQVJOXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlc291cmNlTmFtZUNvbXBvbmVudChhcm46IHN0cmluZywgc2VwOiBzdHJpbmcgPSAnLycpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcm5VdGlscy5wYXJzZVRva2VuKG5ldyBUb2tlbihhcm4pLCBzZXAsIHRydWUpLnJlc291cmNlTmFtZSE7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcm5Db21wb25lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJ0aXRpb24gdGhhdCB0aGUgcmVzb3VyY2UgaXMgaW4uIEZvciBzdGFuZGFyZCBBV1MgcmVnaW9ucywgdGhlXG4gICAqIHBhcnRpdGlvbiBpcyBhd3MuIElmIHlvdSBoYXZlIHJlc291cmNlcyBpbiBvdGhlciBwYXJ0aXRpb25zLCB0aGVcbiAgICogcGFydGl0aW9uIGlzIGF3cy1wYXJ0aXRpb25uYW1lLiBGb3IgZXhhbXBsZSwgdGhlIHBhcnRpdGlvbiBmb3IgcmVzb3VyY2VzXG4gICAqIGluIHRoZSBDaGluYSAoQmVpamluZykgcmVnaW9uIGlzIGF3cy1jbi5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIEFXUyBwYXJ0aXRpb24gdGhlIHN0YWNrIGlzIGRlcGxveWVkIHRvLlxuICAgKi9cbiAgcGFydGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBuYW1lc3BhY2UgdGhhdCBpZGVudGlmaWVzIHRoZSBBV1MgcHJvZHVjdCAoZm9yIGV4YW1wbGUsXG4gICAqICdzMycsICdpYW0nLCAnY29kZXBpcGxpbmUnKS5cbiAgICovXG4gIHNlcnZpY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGUgcmVzb3VyY2UgcmVzaWRlcyBpbi4gTm90ZSB0aGF0IHRoZSBBUk5zIGZvciBzb21lIHJlc291cmNlc1xuICAgKiBkbyBub3QgcmVxdWlyZSBhIHJlZ2lvbiwgc28gdGhpcyBjb21wb25lbnQgbWlnaHQgYmUgb21pdHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIHJlZ2lvbiB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAqL1xuICByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSByZXNvdXJjZSwgd2l0aG91dCB0aGUgaHlwaGVucy5cbiAgICogRm9yIGV4YW1wbGUsIDEyMzQ1Njc4OTAxMi4gTm90ZSB0aGF0IHRoZSBBUk5zIGZvciBzb21lIHJlc291cmNlcyBkb24ndFxuICAgKiByZXF1aXJlIGFuIGFjY291bnQgbnVtYmVyLCBzbyB0aGlzIGNvbXBvbmVudCBtaWdodCBiZSBvbWl0dGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgYWNjb3VudCB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAqL1xuICBhY2NvdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlIChlLmcuIFwidGFibGVcIiwgXCJhdXRvU2NhbGluZ0dyb3VwXCIsIFwiY2VydGlmaWNhdGVcIikuXG4gICAqIEZvciBzb21lIHJlc291cmNlIHR5cGVzLCBlLmcuIFMzIGJ1Y2tldHMsIHRoaXMgZmllbGQgZGVmaW5lcyB0aGUgYnVja2V0IG5hbWUuXG4gICAqL1xuICByZXNvdXJjZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXBhcmF0b3IgYmV0d2VlbiByZXNvdXJjZSB0eXBlIGFuZCB0aGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIENhbiBiZSBlaXRoZXIgJy8nIG9yICc6Jy4gV2lsbCBvbmx5IGJlIHVzZWQgaWYgcGF0aCBpcyBkZWZpbmVkLlxuICAgKiBAZGVmYXVsdCAnLydcbiAgICovXG4gIHNlcD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgbmFtZSBvciBwYXRoIHdpdGhpbiB0aGUgcmVzb3VyY2UgKGkuZS4gUzMgYnVja2V0IG9iamVjdCBrZXkpIG9yXG4gICAqIGEgd2lsZGNhcmQgc3VjaCBhcyBgYFwiKlwiYGAuIFRoaXMgaXMgc2VydmljZS1kZXBlbmRlbnQuXG4gICAqL1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG59XG4iXX0=

@@ -89,2 +89,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkZm9ybWF0aW9uLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBZ0Q7QUFDaEQsaUVBQTBFO0FBRTFFOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDM0I7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFRO1FBQzVCLE9BQU8sSUFBSSxjQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2xCLHFFQUFxRTtZQUNyRSxnREFBZ0Q7WUFDaEQsRUFBRTtZQUNGLGdFQUFnRTtZQUNoRSxrRUFBa0U7WUFDbEUsMERBQTBEO1lBQzFELG9FQUFvRTtZQUNwRSxnRUFBZ0U7WUFDaEUsb0NBQW9DO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLGdCQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFOUIseUVBQXlFO1lBQ3pFLDhCQUE4QjtZQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxDQUFNO1lBQ2pDLElBQUksa0NBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0I7WUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDOUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUMxQzthQUNKO1lBRUQsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDO1FBRUQsU0FBUyxhQUFhLENBQUMsU0FBYztZQUNqQyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXRERCxnREFzREM7QUFFRDs7R0FFRztBQUNILE1BQU0sY0FBZSxTQUFRLDBDQUFtQjtJQUM1Qzs7T0FFRztJQUNJLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILFNBQVMsdUJBQXVCLENBQUMsQ0FBTTtJQUNuQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUN2QixnRUFBZ0U7UUFDaEUsMkNBQTJDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzNEO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztLQUNKO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSwgVG9rZW4gfSBmcm9tIFwiLi4vY29yZS90b2tlbnNcIjtcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4sIGlzSW50cmluc2ljIH0gZnJvbSBcIi4vY2xvdWRmb3JtYXRpb24tdG9rZW5cIjtcblxuLyoqXG4gKiBDbGFzcyBmb3IgSlNPTiByb3V0aW5lcyB0aGF0IGFyZSBmcmFtZXdvcmstYXdhcmVcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRm9ybWF0aW9uSlNPTiB7XG4gICAgLyoqXG4gICAgICogVHVybiBhbiBhcmJpdHJhcnkgc3RydWN0dXJlIHBvdGVudGlhbGx5IGNvbnRhaW5pbmcgVG9rZW5zIGludG8gYSBKU09OIHN0cmluZy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYSBUb2tlbiB3aGljaCB3aWxsIGV2YWx1YXRlIHRvIENsb3VkRm9ybWF0aW9uIGV4cHJlc3Npb24gdGhhdFxuICAgICAqIHdpbGwgYmUgZXZhbHVhdGVkIGJ5IENsb3VkRm9ybWF0aW9uIHRvIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgICAqIGlucHV0IHN0cnVjdHVyZS5cbiAgICAgKlxuICAgICAqIEFsbCBUb2tlbnMgc3Vic3RpdHV0ZWQgaW4gdGhpcyB3YXkgbXVzdCByZXR1cm4gc3RyaW5ncywgb3IgdGhlIGV2YWx1YXRpb25cbiAgICAgKiBpbiBDbG91ZEZvcm1hdGlvbiB3aWxsIGZhaWwuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzdHJpbmdpZnkob2JqOiBhbnkpOiBUb2tlbiB7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBpbm5lciB2YWx1ZSBmaXJzdCBzbyB0aGF0IGlmIHRoZXkgZXZhbHVhdGUgdG8gbGl0ZXJhbHMsIHdlXG4gICAgICAgICAgICAvLyBtYWludGFpbiB0aGUgdHlwZSAoYW5kIGRpc2NhcmQgJ3VuZGVmaW5lZCdzKS5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUaGVuIHJlcGxhY2UgaW50cmluc2ljcyB3aXRoIGEgc3BlY2lhbCBzdWJjbGFzcyBvZiBUb2tlbiB0aGF0XG4gICAgICAgICAgICAvLyBvdmVycmlkZXMgdG9KU09OKCkgdG8gdGhlIG1hcmtlciBzdHJpbmcsIHNvIGlmIHdlIHJlc29sdmUoKSB0aGVcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgYWdhaW4gaXQgZXZhbHVhdGVzIHRvIHRoZSByaWdodCBzdHJpbmcuIEl0IGFsc29cbiAgICAgICAgICAgIC8vIGRlZXAtZXNjYXBlcyBhbnkgc3RyaW5ncyBpbnNpZGUgdGhlIGludHJpbnNpYywgc28gdGhhdCBpZiBsaXRlcmFsXG4gICAgICAgICAgICAvLyBzdHJpbmdzIGFyZSB1c2VkIGluIHtGbjo6Sm9pbn0gb3Igc29tZXRoaW5nLCB0aGV5IHdpbGwgZW5kIHVwXG4gICAgICAgICAgICAvLyBlc2NhcGVkIGluIHRoZSBmaW5hbCBKU09OIG91dHB1dC5cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShvYmopO1xuXG4gICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBkaXJlY3RseSByZXR1cm4gdGhpcyB2YWx1ZSwgc2luY2UgcmVzb2x2ZSgpIHdpbGwgYmUgY2FsbGVkXG4gICAgICAgICAgICAvLyBvbiBvdXIgcmV0dXJuIHZhbHVlIGFueXdheS5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkZWVwUmVwbGFjZUludHJpbnNpY3MocmVzb2x2ZWQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlY3Vyc2UgaW50byBhIHN0cnVjdHVyZSwgcmVwbGFjZSBhbGwgaW50cmluc2ljcyB3aXRoIEludHJpbnNpY1Rva2Vucy5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRlZXBSZXBsYWNlSW50cmluc2ljcyh4OiBhbnkpOiBhbnkge1xuICAgICAgICAgICAgaWYgKGlzSW50cmluc2ljKHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBJbnRyaW5zaWMoeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgubWFwKGRlZXBSZXBsYWNlSW50cmluc2ljcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh4KSkge1xuICAgICAgICAgICAgICAgICAgICB4W2tleV0gPSBkZWVwUmVwbGFjZUludHJpbnNpY3MoeFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gd3JhcEludHJpbnNpYyhpbnRyaW5zaWM6IGFueSk6IEludHJpbnNpY1Rva2VuIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50cmluc2ljVG9rZW4oKCkgPT4gZGVlcFF1b3RlU3RyaW5nc0ZvckpTT04oaW50cmluc2ljKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogVG9rZW4gdGhhdCBhbHNvIHN0cmluZ2lmaWVzIGluIHRoZSB0b0pTT04oKSBvcGVyYXRpb24uXG4gKi9cbmNsYXNzIEludHJpbnNpY1Rva2VuIGV4dGVuZHMgQ2xvdWRGb3JtYXRpb25Ub2tlbiB7XG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBoYW5kbGVyIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBKU09OLnN0cmluZ2lmeSgpIGlzIHVzZWQuXG4gICAgICovXG4gICAgcHVibGljIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbi8qKlxuICogRGVlcCBlc2NhcGUgc3RyaW5ncyBmb3IgdXNlIGluIGEgSlNPTiBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGRlZXBRdW90ZVN0cmluZ3NGb3JKU09OKHg6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXaGVuZXZlciB3ZSBlc2NhcGUgYSBzdHJpbmcgd2Ugc3RyaXAgb2ZmIHRoZSBvdXRlcm1vc3QgcXVvdGVzXG4gICAgICAgIC8vIHNpbmNlIHdlJ3JlIGFscmVhZHkgaW4gYSBxdW90ZWQgY29udGV4dC5cbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh4KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkLnN1YnN0cmluZygxLCBzdHJpbmdpZmllZC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICByZXR1cm4geC5tYXAoZGVlcFF1b3RlU3RyaW5nc0ZvckpTT04pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoeCkpIHtcbiAgICAgICAgICAgIHhba2V5XSA9IGRlZXBRdW90ZVN0cmluZ3NGb3JKU09OKHhba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkZm9ybWF0aW9uLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBZ0Q7QUFDaEQsaUVBQTBFO0FBRTFFOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0I7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFRO1FBQzlCLE9BQU8sSUFBSSxjQUFLLENBQUMsR0FBRyxFQUFFO1lBQ3BCLHFFQUFxRTtZQUNyRSxnREFBZ0Q7WUFDaEQsRUFBRTtZQUNGLGdFQUFnRTtZQUNoRSxrRUFBa0U7WUFDbEUsMERBQTBEO1lBQzFELG9FQUFvRTtZQUNwRSxnRUFBZ0U7WUFDaEUsb0NBQW9DO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLGdCQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFOUIseUVBQXlFO1lBQ3pFLDhCQUE4QjtZQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxDQUFNO1lBQ25DLElBQUksa0NBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7WUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDaEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN4QzthQUNGO1lBRUQsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsU0FBUyxhQUFhLENBQUMsU0FBYztZQUNuQyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXRERCxnREFzREM7QUFFRDs7R0FFRztBQUNILE1BQU0sY0FBZSxTQUFRLDBDQUFtQjtJQUM5Qzs7T0FFRztJQUNJLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsdUJBQXVCLENBQUMsQ0FBTTtJQUNyQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUN6QixnRUFBZ0U7UUFDaEUsMkNBQTJDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMxQztLQUNGO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSwgVG9rZW4gfSBmcm9tIFwiLi4vY29yZS90b2tlbnNcIjtcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4sIGlzSW50cmluc2ljIH0gZnJvbSBcIi4vY2xvdWRmb3JtYXRpb24tdG9rZW5cIjtcblxuLyoqXG4gKiBDbGFzcyBmb3IgSlNPTiByb3V0aW5lcyB0aGF0IGFyZSBmcmFtZXdvcmstYXdhcmVcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRm9ybWF0aW9uSlNPTiB7XG4gIC8qKlxuICAgKiBUdXJuIGFuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgcG90ZW50aWFsbHkgY29udGFpbmluZyBUb2tlbnMgaW50byBhIEpTT04gc3RyaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgVG9rZW4gd2hpY2ggd2lsbCBldmFsdWF0ZSB0byBDbG91ZEZvcm1hdGlvbiBleHByZXNzaW9uIHRoYXRcbiAgICogd2lsbCBiZSBldmFsdWF0ZWQgYnkgQ2xvdWRGb3JtYXRpb24gdG8gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlXG4gICAqIGlucHV0IHN0cnVjdHVyZS5cbiAgICpcbiAgICogQWxsIFRva2VucyBzdWJzdGl0dXRlZCBpbiB0aGlzIHdheSBtdXN0IHJldHVybiBzdHJpbmdzLCBvciB0aGUgZXZhbHVhdGlvblxuICAgKiBpbiBDbG91ZEZvcm1hdGlvbiB3aWxsIGZhaWwuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0cmluZ2lmeShvYmo6IGFueSk6IFRva2VuIHtcbiAgICByZXR1cm4gbmV3IFRva2VuKCgpID0+IHtcbiAgICAgIC8vIFJlc29sdmUgaW5uZXIgdmFsdWUgZmlyc3Qgc28gdGhhdCBpZiB0aGV5IGV2YWx1YXRlIHRvIGxpdGVyYWxzLCB3ZVxuICAgICAgLy8gbWFpbnRhaW4gdGhlIHR5cGUgKGFuZCBkaXNjYXJkICd1bmRlZmluZWQncykuXG4gICAgICAvL1xuICAgICAgLy8gVGhlbiByZXBsYWNlIGludHJpbnNpY3Mgd2l0aCBhIHNwZWNpYWwgc3ViY2xhc3Mgb2YgVG9rZW4gdGhhdFxuICAgICAgLy8gb3ZlcnJpZGVzIHRvSlNPTigpIHRvIHRoZSBtYXJrZXIgc3RyaW5nLCBzbyBpZiB3ZSByZXNvbHZlKCkgdGhlXG4gICAgICAvLyBzdHJpbmdzIGFnYWluIGl0IGV2YWx1YXRlcyB0byB0aGUgcmlnaHQgc3RyaW5nLiBJdCBhbHNvXG4gICAgICAvLyBkZWVwLWVzY2FwZXMgYW55IHN0cmluZ3MgaW5zaWRlIHRoZSBpbnRyaW5zaWMsIHNvIHRoYXQgaWYgbGl0ZXJhbFxuICAgICAgLy8gc3RyaW5ncyBhcmUgdXNlZCBpbiB7Rm46OkpvaW59IG9yIHNvbWV0aGluZywgdGhleSB3aWxsIGVuZCB1cFxuICAgICAgLy8gZXNjYXBlZCBpbiB0aGUgZmluYWwgSlNPTiBvdXRwdXQuXG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUob2JqKTtcblxuICAgICAgLy8gV2UgY2FuIGp1c3QgZGlyZWN0bHkgcmV0dXJuIHRoaXMgdmFsdWUsIHNpbmNlIHJlc29sdmUoKSB3aWxsIGJlIGNhbGxlZFxuICAgICAgLy8gb24gb3VyIHJldHVybiB2YWx1ZSBhbnl3YXkuXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGVlcFJlcGxhY2VJbnRyaW5zaWNzKHJlc29sdmVkKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNlIGludG8gYSBzdHJ1Y3R1cmUsIHJlcGxhY2UgYWxsIGludHJpbnNpY3Mgd2l0aCBJbnRyaW5zaWNUb2tlbnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVlcFJlcGxhY2VJbnRyaW5zaWNzKHg6IGFueSk6IGFueSB7XG4gICAgICBpZiAoaXNJbnRyaW5zaWMoeCkpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBJbnRyaW5zaWMoeCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiB4Lm1hcChkZWVwUmVwbGFjZUludHJpbnNpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHgpKSB7XG4gICAgICAgICAgeFtrZXldID0gZGVlcFJlcGxhY2VJbnRyaW5zaWNzKHhba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JhcEludHJpbnNpYyhpbnRyaW5zaWM6IGFueSk6IEludHJpbnNpY1Rva2VuIHtcbiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljVG9rZW4oKCkgPT4gZGVlcFF1b3RlU3RyaW5nc0ZvckpTT04oaW50cmluc2ljKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVG9rZW4gdGhhdCBhbHNvIHN0cmluZ2lmaWVzIGluIHRoZSB0b0pTT04oKSBvcGVyYXRpb24uXG4gKi9cbmNsYXNzIEludHJpbnNpY1Rva2VuIGV4dGVuZHMgQ2xvdWRGb3JtYXRpb25Ub2tlbiB7XG4gIC8qKlxuICAgKiBTcGVjaWFsIGhhbmRsZXIgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIEpTT04uc3RyaW5naWZ5KCkgaXMgdXNlZC5cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZXAgZXNjYXBlIHN0cmluZ3MgZm9yIHVzZSBpbiBhIEpTT04gY29udGV4dFxuICovXG5mdW5jdGlvbiBkZWVwUXVvdGVTdHJpbmdzRm9ySlNPTih4OiBhbnkpOiBhbnkge1xuICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gV2hlbmV2ZXIgd2UgZXNjYXBlIGEgc3RyaW5nIHdlIHN0cmlwIG9mZiB0aGUgb3V0ZXJtb3N0IHF1b3Rlc1xuICAgIC8vIHNpbmNlIHdlJ3JlIGFscmVhZHkgaW4gYSBxdW90ZWQgY29udGV4dC5cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KHgpO1xuICAgIHJldHVybiBzdHJpbmdpZmllZC5zdWJzdHJpbmcoMSwgc3RyaW5naWZpZWQubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4Lm1hcChkZWVwUXVvdGVTdHJpbmdzRm9ySlNPTik7XG4gIH1cblxuICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoeCkpIHtcbiAgICAgIHhba2V5XSA9IGRlZXBRdW90ZVN0cmluZ3NGb3JKU09OKHhba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHg7XG59XG4iXX0=

@@ -36,2 +36,2 @@ "use strict";

exports.isIntrinsic = isIntrinsic;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsY0FBSztJQUNuQyxNQUFNLENBQUMsSUFBcUIsRUFBRSxLQUFzQjtRQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO1FBQy9CLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FBRTtRQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUU7UUFDL0MsT0FBTyxJQUFJLGFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQVJELGtEQVFDO0FBRUQsNkJBQWdDO0FBRWhDOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLENBQU07SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7S0FBRTtJQUU5RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztLQUFFO0lBRXhDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFQRCxrQ0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUsIFRva2VuIH0gZnJvbSBcIi4uL2NvcmUvdG9rZW5zXCI7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQ2xvdWRGb3JtYXRpb24gYnVpbHQtaW5zXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIHB1YmxpYyBjb25jYXQobGVmdDogYW55IHwgdW5kZWZpbmVkLCByaWdodDogYW55IHwgdW5kZWZpbmVkKTogVG9rZW4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQpIHsgcGFydHMucHVzaChsZWZ0KTsgfVxuICAgICAgICBwYXJ0cy5wdXNoKHJlc29sdmUodGhpcykpO1xuICAgICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCkgeyBwYXJ0cy5wdXNoKHJpZ2h0KTsgfVxuICAgICAgICByZXR1cm4gbmV3IEZuQ29uY2F0KC4uLnBhcnRzKTtcbiAgICB9XG59XG5cbmltcG9ydCB7IEZuQ29uY2F0IH0gZnJvbSBcIi4vZm5cIjtcblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgcmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIGludHJpbnNpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRyaW5zaWMoeDogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkgfHwgeCA9PT0gbnVsbCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoeCk7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgcmV0dXJuIGtleXNbMF0gPT09ICdSZWYnIHx8IGtleXNbMF0uc3RhcnRzV2l0aCgnRm46OicpO1xufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsY0FBSztJQUNyQyxNQUFNLENBQUMsSUFBcUIsRUFBRSxLQUFzQjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO1FBQy9CLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FBRTtRQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUU7UUFDL0MsT0FBTyxJQUFJLGFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQVJELGtEQVFDO0FBRUQsNkJBQWdDO0FBRWhDOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLENBQU07SUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7S0FBRTtJQUU5RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztLQUFFO0lBRXhDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFQRCxrQ0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUsIFRva2VuIH0gZnJvbSBcIi4uL2NvcmUvdG9rZW5zXCI7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQ2xvdWRGb3JtYXRpb24gYnVpbHQtaW5zXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBwdWJsaWMgY29uY2F0KGxlZnQ6IGFueSB8IHVuZGVmaW5lZCwgcmlnaHQ6IGFueSB8IHVuZGVmaW5lZCk6IFRva2VuIHtcbiAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCkgeyBwYXJ0cy5wdXNoKGxlZnQpOyB9XG4gICAgcGFydHMucHVzaChyZXNvbHZlKHRoaXMpKTtcbiAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCkgeyBwYXJ0cy5wdXNoKHJpZ2h0KTsgfVxuICAgIHJldHVybiBuZXcgRm5Db25jYXQoLi4ucGFydHMpO1xuICB9XG59XG5cbmltcG9ydCB7IEZuQ29uY2F0IH0gZnJvbSBcIi4vZm5cIjtcblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgcmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIGludHJpbnNpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRyaW5zaWMoeDogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpIHx8IHggPT09IG51bGwgfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh4KTtcbiAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIHJldHVybiBrZXlzWzBdID09PSAnUmVmJyB8fCBrZXlzWzBdLnN0YXJ0c1dpdGgoJ0ZuOjonKTtcbn1cbiJdfQ==

@@ -26,2 +26,2 @@ "use strict";

exports.Condition = Condition;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZGl0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQXdDO0FBTXhDOzs7R0FHRztBQUNILE1BQWEsU0FBVSxTQUFRLHFCQUFhO0lBTXhDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBc0I7UUFDL0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2hELENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILFVBQVUsRUFBRTtnQkFDUixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVTthQUNwQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0o7QUF0QkQsOEJBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRm5Db25kaXRpb24gfSBmcm9tICcuL2ZuJztcbmltcG9ydCB7IFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Qcm9wcyB7XG4gICAgZXhwcmVzc2lvbj86IEZuQ29uZGl0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBDbG91ZEZvcm1hdGlvbiBjb25kaXRpb24sIGZvciByZXNvdXJjZXMgd2hpY2ggbXVzdCBiZSBjb25kaXRpb25hbGx5IGNyZWF0ZWQgYW5kXG4gKiB0aGUgZGV0ZXJtaW5hdGlvbiBtdXN0IGJlIG1hZGUgYXQgZGVwbG95IHRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25kaXRpb24gZXh0ZW5kcyBSZWZlcmVuY2VhYmxlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29uZGl0aW9uIHN0YXRlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwcmVzc2lvbj86IEZuQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQnVpbGQgYSBuZXcgY29uZGl0aW9uLiBUaGUgY29uZGl0aW9uIG11c3QgYmUgY29uc3RydWN0ZWQgd2l0aCBhIGNvbmRpdGlvbiB0b2tlbixcbiAgICAgKiB0aGF0IHRoZSBjb25kaXRpb24gaXMgYmFzZWQgb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM/OiBDb25kaXRpb25Qcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBwcm9wcyAmJiBwcm9wcy5leHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXTogdGhpcy5leHByZXNzaW9uXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZGl0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQXdDO0FBTXhDOzs7R0FHRztBQUNILE1BQWEsU0FBVSxTQUFRLHFCQUFhO0lBTTFDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBc0I7UUFDakUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVTthQUNsQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0QkQsOEJBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRm5Db25kaXRpb24gfSBmcm9tICcuL2ZuJztcbmltcG9ydCB7IFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Qcm9wcyB7XG4gIGV4cHJlc3Npb24/OiBGbkNvbmRpdGlvbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gY29uZGl0aW9uLCBmb3IgcmVzb3VyY2VzIHdoaWNoIG11c3QgYmUgY29uZGl0aW9uYWxseSBjcmVhdGVkIGFuZFxuICogdGhlIGRldGVybWluYXRpb24gbXVzdCBiZSBtYWRlIGF0IGRlcGxveSB0aW1lLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uIGV4dGVuZHMgUmVmZXJlbmNlYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgY29uZGl0aW9uIHN0YXRlbWVudC5cbiAgICovXG4gIHB1YmxpYyBleHByZXNzaW9uPzogRm5Db25kaXRpb247XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgbmV3IGNvbmRpdGlvbi4gVGhlIGNvbmRpdGlvbiBtdXN0IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBjb25kaXRpb24gdG9rZW4sXG4gICAqIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBiYXNlZCBvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzPzogQ29uZGl0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IHByb3BzICYmIHByb3BzLmV4cHJlc3Npb247XG4gIH1cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBDb25kaXRpb25zOiB7XG4gICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHRoaXMuZXhwcmVzc2lvblxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==

@@ -44,5 +44,5 @@ import { CloudFormationToken } from './cloudformation-token';

* @param region The name of the region for which you want to get the Availability Zones.
* You can use the AWS::Region pseudo parameter to specify the region in
* which the stack is created. Specifying an empty string is equivalent to
* specifying AWS::Region.
* You can use the AWS::Region pseudo parameter to specify the region in
* which the stack is created. Specifying an empty string is equivalent to
* specifying AWS::Region.
*/

@@ -72,3 +72,3 @@ constructor(region?: string);

* @param delimiter The value you want to occur between fragments. The delimiter will occur between fragments only.
* It will not terminate the final value.
* It will not terminate the final value.
* @param listOfValues The list of values you want combined.

@@ -123,8 +123,8 @@ */

* @param body A string with variables that AWS CloudFormation substitutes with their
* associated values at runtime. Write variables as ${MyVarName}. Variables
* can be template parameter names, resource logical IDs, resource attributes,
* or a variable in a key-value map. If you specify only template parameter names,
* resource logical IDs, and resource attributes, don't specify a key-value map.
* associated values at runtime. Write variables as ${MyVarName}. Variables
* can be template parameter names, resource logical IDs, resource attributes,
* or a variable in a key-value map. If you specify only template parameter names,
* resource logical IDs, and resource attributes, don't specify a key-value map.
* @param variables The name of a variable that you included in the String parameter.
* The value that AWS CloudFormation substitutes for the associated variable name at runtime.
* The value that AWS CloudFormation substitutes for the associated variable name at runtime.
*/

@@ -154,3 +154,3 @@ constructor(body: string, variables?: {

* @param ipBlock The user-specified default Cidr address block.
* @param count The number of subnets' Cidr block wanted. Count can be 1 to 256.
* @param count The number of subnets' Cidr block wanted. Count can be 1 to 256.
* @param sizeMask The digit covered in the subnet.

@@ -281,4 +281,4 @@ */

* @param parameterType An AWS-specific parameter type, such as AWS::EC2::SecurityGroup::Id or
* AWS::EC2::VPC::Id. For more information, see Parameters in the AWS
* CloudFormation User Guide.
* AWS::EC2::VPC::Id. For more information, see Parameters in the AWS
* CloudFormation User Guide.
*/

@@ -285,0 +285,0 @@ constructor(parameterType: string);

@@ -56,5 +56,5 @@ "use strict";

* @param region The name of the region for which you want to get the Availability Zones.
* You can use the AWS::Region pseudo parameter to specify the region in
* which the stack is created. Specifying an empty string is equivalent to
* specifying AWS::Region.
* You can use the AWS::Region pseudo parameter to specify the region in
* which the stack is created. Specifying an empty string is equivalent to
* specifying AWS::Region.
*/

@@ -90,3 +90,3 @@ constructor(region) {

* @param delimiter The value you want to occur between fragments. The delimiter will occur between fragments only.
* It will not terminate the final value.
* It will not terminate the final value.
* @param listOfValues The list of values you want combined.

@@ -190,8 +190,8 @@ */

* @param body A string with variables that AWS CloudFormation substitutes with their
* associated values at runtime. Write variables as ${MyVarName}. Variables
* can be template parameter names, resource logical IDs, resource attributes,
* or a variable in a key-value map. If you specify only template parameter names,
* resource logical IDs, and resource attributes, don't specify a key-value map.
* associated values at runtime. Write variables as ${MyVarName}. Variables
* can be template parameter names, resource logical IDs, resource attributes,
* or a variable in a key-value map. If you specify only template parameter names,
* resource logical IDs, and resource attributes, don't specify a key-value map.
* @param variables The name of a variable that you included in the String parameter.
* The value that AWS CloudFormation substitutes for the associated variable name at runtime.
* The value that AWS CloudFormation substitutes for the associated variable name at runtime.
*/

@@ -225,3 +225,3 @@ constructor(body, variables) {

* @param ipBlock The user-specified default Cidr address block.
* @param count The number of subnets' Cidr block wanted. Count can be 1 to 256.
* @param count The number of subnets' Cidr block wanted. Count can be 1 to 256.
* @param sizeMask The digit covered in the subnet.

@@ -383,4 +383,4 @@ */

* @param parameterType An AWS-specific parameter type, such as AWS::EC2::SecurityGroup::Id or
* AWS::EC2::VPC::Id. For more information, see Parameters in the AWS
* CloudFormation User Guide.
* AWS::EC2::VPC::Id. For more information, see Parameters in the AWS
* CloudFormation User Guide.
*/

@@ -420,2 +420,2 @@ constructor(parameterType) {

exports.FnValueOfAll = FnValueOfAll;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlFQUEwRTtBQUMxRSxpQ0FBaUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBYSxFQUFHLFNBQVEsMENBQW1CO0lBQ3ZDLFlBQVksSUFBWSxFQUFFLEtBQVU7UUFDaEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUFKRCxnQkFJQztBQUVEOzs7R0FHRztBQUNILE1BQWEsV0FBWSxTQUFRLEVBQUU7SUFDL0I7Ozs7O09BS0c7SUFDSCxZQUFZLE9BQWUsRUFBRSxXQUFnQixFQUFFLGNBQW1CO1FBQzlELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNKO0FBVkQsa0NBVUM7QUFFRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLEVBQUU7SUFDNUI7Ozs7T0FJRztJQUNILFlBQVkscUJBQTZCLEVBQUUsYUFBcUI7UUFDNUQsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNKO0FBVEQsNEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxFQUFFO0lBQzVCOzs7Ozs7T0FNRztJQUNILFlBQVksTUFBZTtRQUN2QixLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0o7QUFYRCw0QkFXQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxFQUFFO0lBQ2pDOzs7T0FHRztJQUNILFlBQVksbUJBQTJCO1FBQ25DLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDSjtBQVJELHNDQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsTUFBTyxTQUFRLEVBQUU7SUFDMUI7Ozs7O09BS0c7SUFDSCxZQUFZLFNBQWlCLEVBQUUsWUFBbUI7UUFDOUMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUUsU0FBUyxFQUFFLFlBQVksQ0FBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNKO0FBYkQsd0JBYUM7QUFFRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLE1BQU07SUFHaEM7OztPQUdHO0lBQ0gsWUFBWSxHQUFHLFlBQW1CO1FBQzlCLGtFQUFrRTtRQUNsRSxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLEVBQUU7UUFDRiw2REFBNkQ7UUFDN0QsOERBQThEO1FBRTlELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDNUIsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksRUFBRSxZQUFZLFFBQVEsRUFBRTtnQkFDeEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLElBQUksTUFBTSxDQUFDO2FBQ2Y7aUJBQU07Z0JBQ0gsQ0FBQyxFQUFFLENBQUM7YUFDUDtTQUNKO1FBRUQsS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUFqQ0QsNEJBaUNDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLENBQU07SUFDN0IsT0FBTyxrQ0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekYsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxDQUFNO0lBQ2pDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLEVBQUU7SUFDNUI7Ozs7T0FJRztJQUNILFlBQVksS0FBYSxFQUFFLEtBQVU7UUFDakMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFFLEtBQUssRUFBRSxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDSjtBQVRELDRCQVNDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLE9BQVEsU0FBUSxFQUFFO0lBQzNCOzs7O09BSUc7SUFDSCxZQUFZLFNBQWlCLEVBQUUsTUFBVztRQUN0QyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKO0FBVEQsMEJBU0M7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxLQUFNLFNBQVEsRUFBRTtJQUN6Qjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLElBQVksRUFBRSxTQUFrQztRQUN4RCxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDSjtBQWRELHNCQWNDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsUUFBUyxTQUFRLEVBQUU7SUFFNUI7OztPQUdHO0lBQ0gsWUFBWSxJQUFTO1FBQ2pCLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNKO0FBVEQsNEJBU0M7QUFFRDs7R0FFRztBQUNILE1BQWEsTUFBTyxTQUFRLEVBQUU7SUFDMUI7Ozs7O09BS0c7SUFDSCxZQUFZLE9BQVksRUFBRSxLQUFVLEVBQUUsUUFBYztRQUNoRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxLQUFLLGdCQUFnQixDQUFDLENBQUM7U0FDbEc7UUFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDSjtBQWJELHdCQWFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEsV0FBWSxTQUFRLEVBQUU7Q0FFbEM7QUFGRCxrQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLEtBQU0sU0FBUSxXQUFXO0lBQ2xDLFlBQVksR0FBRyxTQUF3QjtRQUNuQyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDSjtBQUpELHNCQUlDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsV0FBVztJQUNyQzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFRLEVBQUUsR0FBUTtRQUMxQixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNKO0FBVEQsNEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLElBQUssU0FBUSxXQUFXO0lBQ2pDOzs7OztPQUtHO0lBQ0gsWUFBWSxTQUFpQixFQUFFLFdBQWdCLEVBQUUsWUFBaUI7UUFDOUQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0o7QUFWRCxvQkFVQztBQUVEOzs7R0FHRztBQUNILE1BQWEsS0FBTSxTQUFRLFdBQVc7SUFDbEM7OztPQUdHO0lBQ0gsWUFBWSxTQUFzQjtRQUM5QixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUUsU0FBUyxDQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0o7QUFSRCxzQkFRQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLElBQUssU0FBUSxXQUFXO0lBQ2pDOzs7T0FHRztJQUNILFlBQVksR0FBRyxTQUF3QjtRQUNuQyxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDSjtBQVJELG9CQVFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxXQUFXO0lBQ3ZDOzs7O09BSUc7SUFDSCxZQUFZLGFBQWtCLEVBQUUsS0FBYTtRQUN6QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUUsYUFBYSxFQUFFLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBVEQsZ0NBU0M7QUFFRDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsV0FBVztJQUMvQzs7OztPQUlHO0lBQ0gsWUFBWSxhQUFrQixFQUFFLEtBQWE7UUFDekMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUUsYUFBYSxFQUFFLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNKO0FBVEQsZ0RBU0M7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxXQUFXO0lBQzNDOzs7O09BSUc7SUFDSCxZQUFZLGNBQW1CLEVBQUUsY0FBbUI7UUFDaEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjLENBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDSjtBQVRELHdDQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxXQUFXO0lBQ3JDOzs7OztPQUtHO0lBQ0gsWUFBWSxhQUFxQjtRQUM3QixLQUFLLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDSjtBQVZELDRCQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxXQUFXO0lBQ3RDOzs7O09BSUc7SUFDSCxZQUFZLG9CQUE0QixFQUFFLFNBQWlCO1FBQ3ZELEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDSjtBQVRELDhCQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxXQUFXO0lBQ3pDOzs7O09BSUc7SUFDSCxZQUFZLGFBQXFCLEVBQUUsU0FBaUI7UUFDaEQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNKO0FBVEQsb0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCBpc0ludHJpbnNpYyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBGbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBzdXBlcigoKSA9PiAoeyBbbmFtZV06IHZhbHVlIH0pKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpGaW5kSW5NYXBgYCByZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGtleXMgaW4gYSB0d28tbGV2ZWxcbiAqIG1hcCB0aGF0IGlzIGRlY2xhcmVkIGluIHRoZSBNYXBwaW5ncyBzZWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRm5GaW5kSW5NYXAgZXh0ZW5kcyBGbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpGaW5kSW5NYXBgYCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbWFwTmFtZSBUaGUgbG9naWNhbCBuYW1lIG9mIGEgbWFwcGluZyBkZWNsYXJlZCBpbiB0aGUgTWFwcGluZ3Mgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHRvcExldmVsS2V5IFRoZSB0b3AtbGV2ZWwga2V5IG5hbWUuIEl0cyB2YWx1ZSBpcyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBwYXJhbSBzZWNvbmRMZXZlbEtleSBUaGUgc2Vjb25kLWxldmVsIGtleSBuYW1lLCB3aGljaCBpcyBzZXQgdG8gb25lIG9mIHRoZSBrZXlzIGZyb20gdGhlIGxpc3QgYXNzaWduZWQgdG8gVG9wTGV2ZWxLZXkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwTmFtZTogc3RyaW5nLCB0b3BMZXZlbEtleTogYW55LCBzZWNvbmRMZXZlbEtleTogYW55KSB7XG4gICAgICAgIHN1cGVyKCdGbjo6RmluZEluTWFwJywgWyBtYXBOYW1lLCB0b3BMZXZlbEtleSwgc2Vjb25kTGV2ZWxLZXkgXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZyb20gYSByZXNvdXJjZSBpbiB0aGUgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkdldEF0dCBleHRlbmRzIEZuIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGxvZ2ljYWxOYW1lT2ZSZXNvdXJjZSBUaGUgbG9naWNhbCBuYW1lIChhbHNvIGNhbGxlZCBsb2dpY2FsIElEKSBvZiB0aGUgcmVzb3VyY2UgdGhhdCBjb250YWlucyB0aGUgYXR0cmlidXRlIHRoYXQgeW91IHdhbnQuXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLXNwZWNpZmljIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSB5b3Ugd2FudC4gU2VlIHRoZSByZXNvdXJjZSdzIHJlZmVyZW5jZSBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBmb3IgdGhhdCByZXNvdXJjZSB0eXBlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGxvZ2ljYWxOYW1lT2ZSZXNvdXJjZTogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpHZXRBdHQnLCBbIGxvZ2ljYWxOYW1lT2ZSZXNvdXJjZSwgYXR0cmlidXRlTmFtZSBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpHZXRBWnNgYCByZXR1cm5zIGFuIGFycmF5IHRoYXQgbGlzdHMgQXZhaWxhYmlsaXR5IFpvbmVzIGZvciBhXG4gKiBzcGVjaWZpZWQgcmVnaW9uLiBCZWNhdXNlIGN1c3RvbWVycyBoYXZlIGFjY2VzcyB0byBkaWZmZXJlbnQgQXZhaWxhYmlsaXR5IFpvbmVzLCB0aGUgaW50cmluc2ljXG4gKiBmdW5jdGlvbiBgYEZuOjpHZXRBWnNgYCBlbmFibGVzIHRlbXBsYXRlIGF1dGhvcnMgdG8gd3JpdGUgdGVtcGxhdGVzIHRoYXQgYWRhcHQgdG8gdGhlIGNhbGxpbmdcbiAqIHVzZXIncyBhY2Nlc3MuIFRoYXQgd2F5IHlvdSBkb24ndCBoYXZlIHRvIGhhcmQtY29kZSBhIGZ1bGwgbGlzdCBvZiBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIGFcbiAqIHNwZWNpZmllZCByZWdpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkdldEFacyBleHRlbmRzIEZuIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OkdldEFac2BgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSByZWdpb24gVGhlIG5hbWUgb2YgdGhlIHJlZ2lvbiBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZ2V0IHRoZSBBdmFpbGFiaWxpdHkgWm9uZXMuXG4gICAgICogICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgQVdTOjpSZWdpb24gcHNldWRvIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW5cbiAgICAgKiAgICAgICAgICAgICAgIHdoaWNoIHRoZSBzdGFjayBpcyBjcmVhdGVkLiBTcGVjaWZ5aW5nIGFuIGVtcHR5IHN0cmluZyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICogICAgICAgICAgICAgICBzcGVjaWZ5aW5nIEFXUzo6UmVnaW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lvbj86IHN0cmluZykge1xuICAgICAgICBzdXBlcignRm46OkdldEFacycsIHJlZ2lvbiB8fCAnJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6SW1wb3J0VmFsdWVgYCByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQgZXhwb3J0ZWQgYnkgYW5vdGhlciBzdGFjay5cbiAqIFlvdSB0eXBpY2FsbHkgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIGNyb3NzLXN0YWNrIHJlZmVyZW5jZXMuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZVxuICogdGVtcGxhdGUgc25pcHBldHMsIFN0YWNrIEEgZXhwb3J0cyBWUEMgc2VjdXJpdHkgZ3JvdXAgdmFsdWVzIGFuZCBTdGFjayBCIGltcG9ydHMgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuSW1wb3J0VmFsdWUgZXh0ZW5kcyBGbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpJbXBvcnRWYWx1ZWBgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBzaGFyZWRWYWx1ZVRvSW1wb3J0IFRoZSBzdGFjayBvdXRwdXQgdmFsdWUgdGhhdCB5b3Ugd2FudCB0byBpbXBvcnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc2hhcmVkVmFsdWVUb0ltcG9ydDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdGbjo6SW1wb3J0VmFsdWUnLCBzaGFyZWRWYWx1ZVRvSW1wb3J0KTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpKb2luYGAgYXBwZW5kcyBhIHNldCBvZiB2YWx1ZXMgaW50byBhIHNpbmdsZSB2YWx1ZSwgc2VwYXJhdGVkIGJ5XG4gKiB0aGUgc3BlY2lmaWVkIGRlbGltaXRlci4gSWYgYSBkZWxpbWl0ZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlIHNldCBvZiB2YWx1ZXMgYXJlIGNvbmNhdGVuYXRlZFxuICogd2l0aCBubyBkZWxpbWl0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkpvaW4gZXh0ZW5kcyBGbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpKb2luYGAgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGRlbGltaXRlciBUaGUgdmFsdWUgeW91IHdhbnQgdG8gb2NjdXIgYmV0d2VlbiBmcmFnbWVudHMuIFRoZSBkZWxpbWl0ZXIgd2lsbCBvY2N1ciBiZXR3ZWVuIGZyYWdtZW50cyBvbmx5LlxuICAgICAqICAgICAgICAgICAgICAgICAgSXQgd2lsbCBub3QgdGVybWluYXRlIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbGlzdE9mVmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyB5b3Ugd2FudCBjb21iaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkZWxpbWl0ZXI6IHN0cmluZywgbGlzdE9mVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICBpZiAobGlzdE9mVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGbkpvaW4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHZhbHVlIHRvIGJlIHByb3ZpZGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoJ0ZuOjpKb2luJywgWyBkZWxpbWl0ZXIsIGxpc3RPZlZhbHVlcyBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIGBgRm5Kb2luKCcnLCBsaXN0T2ZWYWx1ZXMpYGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkNvbmNhdCBleHRlbmRzIEZuSm9pbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0T2ZWYWx1ZXM6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpKb2luYGAgZnVuY3Rpb24gd2l0aCBhbiBlbXB0eSBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIGxpc3RPZlZhbHVlcyBUaGUgbGlzdCBvZiB2YWx1ZXMgdG8gY29uY2F0ZW5hdGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoLi4ubGlzdE9mVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICAvLyBPcHRpbWl6YXRpb246IGlmIGFueSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzIGlzIGFsc28gYSBGbkNvbmNhdCxcbiAgICAgICAgLy8gc3BsaWNlIHRoZWlyIGxpc3Qgb2YgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgRm5Db25jYXQuICdpbnN0YW5jZW9mJ1xuICAgICAgICAvLyBjYW4gZmFpbCwgYnV0IHdlIGRvIG5vdCBkZXBlbmQgZGVwZW5kIG9uIHRoaXMgZm9yIGNvcnJlY3RuZXNzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBEbyB0aGUgc2FtZSBmb3IgcmVzb2x2ZWQgaW50cmluc2ljcywgc28gd2UgY2FuIGRldGVjdCB0aGlzXG4gICAgICAgIC8vIGhhcHBlbmluZyBib3RoIGF0IFRva2VuIGFzIHdlbGwgYXMgYXQgQ2xvdWRGb3JtYXRpb24gbGV2ZWwuXG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IGxpc3RPZlZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gbGlzdE9mVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgRm5Db25jYXQpIHtcbiAgICAgICAgICAgICAgICBsaXN0T2ZWYWx1ZXMuc3BsaWNlKGksIDEsIC4uLmVsLmxpc3RPZlZhbHVlcyk7XG4gICAgICAgICAgICAgICAgaSArPSBlbC5saXN0T2ZWYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NvbmNhdEludHJpbnNpYyhlbCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBjb25jYXRJbnRyaW5zaWNWYWx1ZXMoZWwpO1xuICAgICAgICAgICAgICAgIGxpc3RPZlZhbHVlcy5zcGxpY2UoaSwgMSwgLi4udmFsdWVzKTtcbiAgICAgICAgICAgICAgICBpICs9IHZhbHVlcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoJycsIGxpc3RPZlZhbHVlcyk7XG4gICAgICAgIHRoaXMubGlzdE9mVmFsdWVzID0gbGlzdE9mVmFsdWVzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IHJlcHJlc2VudHMgYSBDbG91ZEZvcm1hdGlvbiBpbnRyaW5zaWMgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGEgRm5Db25jYXQgcmVzb2x1dGlvblxuICovXG5mdW5jdGlvbiBpc0NvbmNhdEludHJpbnNpYyh4OiBhbnkpIHtcbiAgICByZXR1cm4gaXNJbnRyaW5zaWMoeCkgJiYgT2JqZWN0LmtleXMoeClbMF0gPT09ICdGbjo6Sm9pbicgJiYgeFsnRm46OkpvaW4nXVswXSA9PT0gJyc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25jYXR0ZWQgdmFsdWVzIG9mIHRoZSBjb25jYXQgaW50cmluc2ljXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdEludHJpbnNpY1ZhbHVlcyh4OiBhbnkpIHtcbiAgICByZXR1cm4geFsnRm46OkpvaW4nXVsxXTtcbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OlNlbGVjdGBgIHJldHVybnMgYSBzaW5nbGUgb2JqZWN0IGZyb20gYSBsaXN0IG9mIG9iamVjdHMgYnkgaW5kZXguXG4gKi9cbmV4cG9ydCBjbGFzcyBGblNlbGVjdCBleHRlbmRzIEZuIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OlNlbGVjdGBgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIG9iamVjdCB0byByZXRyaWV2ZS4gVGhpcyBtdXN0IGJlIGEgdmFsdWUgZnJvbSB6ZXJvIHRvIE4tMSwgd2hlcmUgTiByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBhcnJheSBUaGUgbGlzdCBvZiBvYmplY3RzIHRvIHNlbGVjdCBmcm9tLiBUaGlzIGxpc3QgbXVzdCBub3QgYmUgbnVsbCwgbm9yIGNhbiBpdCBoYXZlIG51bGwgZW50cmllcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpbmRleDogbnVtYmVyLCBhcnJheTogYW55KSB7XG4gICAgICAgIHN1cGVyKCdGbjo6U2VsZWN0JywgWyBpbmRleCwgYXJyYXkgXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRvIHNwbGl0IGEgc3RyaW5nIGludG8gYSBsaXN0IG9mIHN0cmluZyB2YWx1ZXMgc28gdGhhdCB5b3UgY2FuIHNlbGVjdCBhbiBlbGVtZW50IGZyb20gdGhlXG4gKiByZXN1bHRpbmcgc3RyaW5nIGxpc3QsIHVzZSB0aGUgYGBGbjo6U3BsaXRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHNwbGl0c1xuICogd2l0aCBhIGRlbGltaXRlciwgc3VjaCBhcyAsIChhIGNvbW1hKS4gQWZ0ZXIgeW91IHNwbGl0IGEgc3RyaW5nLCB1c2UgdGhlIGBgRm46OlNlbGVjdGBgIGZ1bmN0aW9uXG4gKiB0byBwaWNrIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuU3BsaXQgZXh0ZW5kcyBGbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGBgRm46OlNwbGl0YGAgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGRlbGltaXRlciBBIHN0cmluZyB2YWx1ZSB0aGF0IGRldGVybWluZXMgd2hlcmUgdGhlIHNvdXJjZSBzdHJpbmcgaXMgZGl2aWRlZC5cbiAgICAgKiBAcGFyYW0gc291cmNlIFRoZSBzdHJpbmcgdmFsdWUgdGhhdCB5b3Ugd2FudCB0byBzcGxpdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkZWxpbWl0ZXI6IHN0cmluZywgc291cmNlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpTcGxpdCcsIFsgZGVsaW1pdGVyLCBzb3VyY2UgXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6U3ViYGAgc3Vic3RpdHV0ZXMgdmFyaWFibGVzIGluIGFuIGlucHV0IHN0cmluZyB3aXRoIHZhbHVlcyB0aGF0XG4gKiB5b3Ugc3BlY2lmeS4gSW4geW91ciB0ZW1wbGF0ZXMsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY29uc3RydWN0IGNvbW1hbmRzIG9yIG91dHB1dHNcbiAqIHRoYXQgaW5jbHVkZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgYXZhaWxhYmxlIHVudGlsIHlvdSBjcmVhdGUgb3IgdXBkYXRlIGEgc3RhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBGblN1YiBleHRlbmRzIEZuIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OlN1YmBgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBib2R5IEEgc3RyaW5nIHdpdGggdmFyaWFibGVzIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHN1YnN0aXR1dGVzIHdpdGggdGhlaXJcbiAgICAgKiAgICAgICAgICAgICBhc3NvY2lhdGVkIHZhbHVlcyBhdCBydW50aW1lLiBXcml0ZSB2YXJpYWJsZXMgYXMgJHtNeVZhck5hbWV9LiBWYXJpYWJsZXNcbiAgICAgKiAgICAgICAgICAgICBjYW4gYmUgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzLCByZXNvdXJjZSBsb2dpY2FsIElEcywgcmVzb3VyY2UgYXR0cmlidXRlcyxcbiAgICAgKiAgICAgICAgICAgICBvciBhIHZhcmlhYmxlIGluIGEga2V5LXZhbHVlIG1hcC4gSWYgeW91IHNwZWNpZnkgb25seSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbmFtZXMsXG4gICAgICogICAgICAgICAgICAgcmVzb3VyY2UgbG9naWNhbCBJRHMsIGFuZCByZXNvdXJjZSBhdHRyaWJ1dGVzLCBkb24ndCBzcGVjaWZ5IGEga2V5LXZhbHVlIG1hcC5cbiAgICAgKiBAcGFyYW0gdmFyaWFibGVzIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgdGhhdCB5b3UgaW5jbHVkZWQgaW4gdGhlIFN0cmluZyBwYXJhbWV0ZXIuXG4gICAgICogICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gc3Vic3RpdHV0ZXMgZm9yIHRoZSBhc3NvY2lhdGVkIHZhcmlhYmxlIG5hbWUgYXQgcnVudGltZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihib2R5OiBzdHJpbmcsIHZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpTdWInLCB2YXJpYWJsZXMgPyBbYm9keSwgdmFyaWFibGVzXSA6IGJvZHkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkJhc2U2NGBgIHJldHVybnMgdGhlIEJhc2U2NCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQgc3RyaW5nLlxuICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCB0byBwYXNzIGVuY29kZWQgZGF0YSB0byBBbWF6b24gRUMyIGluc3RhbmNlcyBieSB3YXkgb2ZcbiAqIHRoZSBVc2VyRGF0YSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQmFzZTY0IGV4dGVuZHMgRm4ge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpCYXNlNjRgYCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RyaW5nIHZhbHVlIHlvdSB3YW50IHRvIGNvbnZlcnQgdG8gQmFzZTY0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IGFueSkge1xuICAgICAgICBzdXBlcignRm46OkJhc2U2NCcsIGRhdGEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkNpZHJgYCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgQ2lkciBhZGRyZXNzIGJsb2NrLlxuICovXG5leHBvcnQgY2xhc3MgRm5DaWRyIGV4dGVuZHMgRm4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYGBGbjo6Q2lkcmBgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBpcEJsb2NrICBUaGUgdXNlci1zcGVjaWZpZWQgZGVmYXVsdCBDaWRyIGFkZHJlc3MgYmxvY2suXG4gICAgICogQHBhcmFtIGNvdW50ICAgIFRoZSBudW1iZXIgb2Ygc3VibmV0cycgQ2lkciBibG9jayB3YW50ZWQuIENvdW50IGNhbiBiZSAxIHRvIDI1Ni5cbiAgICAgKiBAcGFyYW0gc2l6ZU1hc2sgVGhlIGRpZ2l0IGNvdmVyZWQgaW4gdGhlIHN1Ym5ldC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpcEJsb2NrOiBhbnksIGNvdW50OiBhbnksIHNpemVNYXNrPzogYW55KSB7XG4gICAgICAgIGlmIChjb3VudCA8IDEgfHwgY291bnQgPiAyNTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRm46OkNpZHIncyBjb3VudCBhdHRyaWJ1dGUgbXVzdCBiZSBiZXR3ZW4gMSBhbmQgMjU2LCAke2NvdW50fSB3YXMgcHJvdmlkZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoJ0ZuOjpDaWRyJywgW2lwQmxvY2ssIGNvdW50LCBzaXplTWFza10pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIHVzZSBpbnRyaW5zaWMgZnVuY3Rpb25zLCBzdWNoIGFzIGBgRm46OklmYGAsIGBgRm46OkVxdWFsc2BgLCBhbmQgYGBGbjo6Tm90YGAsIHRvIGNvbmRpdGlvbmFsbHlcbiAqIGNyZWF0ZSBzdGFjayByZXNvdXJjZXMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGV2YWx1YXRlZCBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzIHRoYXQgeW91XG4gKiBkZWNsYXJlIHdoZW4geW91IGNyZWF0ZSBvciB1cGRhdGUgYSBzdGFjay4gQWZ0ZXIgeW91IGRlZmluZSBhbGwgeW91ciBjb25kaXRpb25zLCB5b3UgY2FuXG4gKiBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlc291cmNlcyBvciByZXNvdXJjZSBwcm9wZXJ0aWVzIGluIHRoZSBSZXNvdXJjZXMgYW5kIE91dHB1dHMgc2VjdGlvbnNcbiAqIG9mIGEgdGVtcGxhdGUuXG4gKlxuICogWW91IGRlZmluZSBhbGwgY29uZGl0aW9ucyBpbiB0aGUgQ29uZGl0aW9ucyBzZWN0aW9uIG9mIGEgdGVtcGxhdGUgZXhjZXB0IGZvciBgYEZuOjpJZmBgIGNvbmRpdGlvbnMuXG4gKiBZb3UgY2FuIHVzZSB0aGUgYGBGbjo6SWZgYCBjb25kaXRpb24gaW4gdGhlIG1ldGFkYXRhIGF0dHJpYnV0ZSwgdXBkYXRlIHBvbGljeSBhdHRyaWJ1dGUsIGFuZCBwcm9wZXJ0eVxuICogdmFsdWVzIGluIHRoZSBSZXNvdXJjZXMgc2VjdGlvbiBhbmQgT3V0cHV0cyBzZWN0aW9ucyBvZiBhIHRlbXBsYXRlLlxuICpcbiAqIFlvdSBtaWdodCB1c2UgY29uZGl0aW9ucyB3aGVuIHlvdSB3YW50IHRvIHJldXNlIGEgdGVtcGxhdGUgdGhhdCBjYW4gY3JlYXRlIHJlc291cmNlcyBpbiBkaWZmZXJlbnRcbiAqIGNvbnRleHRzLCBzdWNoIGFzIGEgdGVzdCBlbnZpcm9ubWVudCB2ZXJzdXMgYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBJbiB5b3VyIHRlbXBsYXRlLCB5b3UgY2FuXG4gKiBhZGQgYW4gRW52aXJvbm1lbnRUeXBlIGlucHV0IHBhcmFtZXRlciwgd2hpY2ggYWNjZXB0cyBlaXRoZXIgcHJvZCBvciB0ZXN0IGFzIGlucHV0cy4gRm9yIHRoZVxuICogcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IGluY2x1ZGUgQW1hem9uIEVDMiBpbnN0YW5jZXMgd2l0aCBjZXJ0YWluIGNhcGFiaWxpdGllcztcbiAqIGhvd2V2ZXIsIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCwgeW91IHdhbnQgdG8gdXNlIGxlc3MgY2FwYWJpbGl0aWVzIHRvIHNhdmUgY29zdHMuIFdpdGhcbiAqIGNvbmRpdGlvbnMsIHlvdSBjYW4gZGVmaW5lIHdoaWNoIHJlc291cmNlcyBhcmUgY3JlYXRlZCBhbmQgaG93IHRoZXkncmUgY29uZmlndXJlZCBmb3IgZWFjaFxuICogZW52aXJvbm1lbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ29uZGl0aW9uIGV4dGVuZHMgRm4ge1xuXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZSwgb3IgcmV0dXJucyBmYWxzZSBpZiBhbnkgb25lXG4gKiAgb2YgdGhlIGNvbmRpdGlvbnMgZXZhbHVhdGVzIHRvIGZhbHNlLiBgYEZuOjpBbmRgYCBhY3RzIGFzIGFuIEFORCBvcGVyYXRvci4gVGhlIG1pbmltdW0gbnVtYmVyIG9mXG4gKiBjb25kaXRpb25zIHRoYXQgeW91IGNhbiBpbmNsdWRlIGlzIDIsIGFuZCB0aGUgbWF4aW11bSBpcyAxMC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQW5kIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKC4uLmNvbmRpdGlvbjogRm5Db25kaXRpb25bXSkge1xuICAgICAgICBzdXBlcignRm46OkFuZCcsIGNvbmRpdGlvbik7XG4gICAgfVxufVxuXG4vKipcbiAqIENvbXBhcmVzIGlmIHR3byB2YWx1ZXMgYXJlIGVxdWFsLiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byB2YWx1ZXMgYXJlIGVxdWFsIG9yIGZhbHNlXG4gKiBpZiB0aGV5IGFyZW4ndC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuRXF1YWxzIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYGBGbjo6RXF1YWxzYGAgY29uZGl0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBsaHMgQSB2YWx1ZSBvZiBhbnkgdHlwZSB0aGF0IHlvdSB3YW50IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHJocyBBIHZhbHVlIG9mIGFueSB0eXBlIHRoYXQgeW91IHdhbnQgdG8gY29tcGFyZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihsaHM6IGFueSwgcmhzOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpFcXVhbHMnLCBbIGxocywgcmhzIF0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIG9uZSB2YWx1ZSBpZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSBhbmQgYW5vdGhlciB2YWx1ZSBpZiB0aGVcbiAqIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlLiBDdXJyZW50bHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzdXBwb3J0cyB0aGUgYGBGbjo6SWZgYFxuICogaW50cmluc2ljIGZ1bmN0aW9uIGluIHRoZSBtZXRhZGF0YSBhdHRyaWJ1dGUsIHVwZGF0ZSBwb2xpY3kgYXR0cmlidXRlLCBhbmQgcHJvcGVydHkgdmFsdWVzXG4gKiBpbiB0aGUgUmVzb3VyY2VzIHNlY3Rpb24gYW5kIE91dHB1dHMgc2VjdGlvbnMgb2YgYSB0ZW1wbGF0ZS4gWW91IGNhbiB1c2UgdGhlIEFXUzo6Tm9WYWx1ZVxuICogcHNldWRvIHBhcmFtZXRlciBhcyBhIHJldHVybiB2YWx1ZSB0byByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbklmIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYGBGbjo6SWZgYCBjb25kaXRpb24gZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiBBIHJlZmVyZW5jZSB0byBhIGNvbmRpdGlvbiBpbiB0aGUgQ29uZGl0aW9ucyBzZWN0aW9uLiBVc2UgdGhlIGNvbmRpdGlvbidzIG5hbWUgdG8gcmVmZXJlbmNlIGl0LlxuICAgICAqIEBwYXJhbSB2YWx1ZUlmVHJ1ZSBBIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB2YWx1ZUlmRmFsc2UgQSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uZGl0aW9uOiBzdHJpbmcsIHZhbHVlSWZUcnVlOiBhbnksIHZhbHVlSWZGYWxzZTogYW55KSB7XG4gICAgICAgIHN1cGVyKCdGbjo6SWYnLCBbIGNvbmRpdGlvbiwgdmFsdWVJZlRydWUsIHZhbHVlSWZGYWxzZSBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGZvciBhIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZSBvciByZXR1cm5zIGZhbHNlIGZvciBhIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlLlxuICogYGBGbjo6Tm90YGAgYWN0cyBhcyBhIE5PVCBvcGVyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuTm90IGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYGBGbjo6Tm90YGAgY29uZGl0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBjb25kaXRpb24gQSBjb25kaXRpb24gc3VjaCBhcyBgYEZuOjpFcXVhbHNgYCB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIG9yIGZhbHNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbjogRm5Db25kaXRpb24pIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpOb3QnLCBbIGNvbmRpdGlvbiBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFueSBvbmUgb2YgdGhlIHNwZWNpZmllZCBjb25kaXRpb25zIGV2YWx1YXRlIHRvIHRydWUsIG9yIHJldHVybnMgZmFsc2UgaWZcbiAqIGFsbCBvZiB0aGUgY29uZGl0aW9ucyBldmFsdWF0ZXMgdG8gZmFsc2UuIGBgRm46Ok9yYGAgYWN0cyBhcyBhbiBPUiBvcGVyYXRvci4gVGhlIG1pbmltdW0gbnVtYmVyXG4gKiBvZiBjb25kaXRpb25zIHRoYXQgeW91IGNhbiBpbmNsdWRlIGlzIDIsIGFuZCB0aGUgbWF4aW11bSBpcyAxMC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuT3IgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpPcmBgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIEEgY29uZGl0aW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUgb3IgZmFsc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoLi4uY29uZGl0aW9uOiBGbkNvbmRpdGlvbltdKSB7XG4gICAgICAgIHN1cGVyKCdGbjo6T3InLCBjb25kaXRpb24pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBzcGVjaWZpZWQgc3RyaW5nIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgbGlzdCBvZiBzdHJpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRm5Db250YWlucyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OkNvbnRhaW5zYGAgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGxpc3RPZlN0cmluZ3MgQSBsaXN0IG9mIHN0cmluZ3MsIHN1Y2ggYXMgXCJBXCIsIFwiQlwiLCBcIkNcIi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcsIHN1Y2ggYXMgXCJBXCIsIHRoYXQgeW91IHdhbnQgdG8gY29tcGFyZSBhZ2FpbnN0IGEgbGlzdCBvZiBzdHJpbmdzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGxpc3RPZlN0cmluZ3M6IGFueSwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcignRm46OkNvbnRhaW5zJywgWyBsaXN0T2ZTdHJpbmdzLCB2YWx1ZSBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgc3BlY2lmaWVkIHN0cmluZyBtYXRjaGVzIGFsbCB2YWx1ZXMgaW4gYSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgRm5FYWNoTWVtYmVyRXF1YWxzIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYGBGbjo6RWFjaE1lbWJlckVxdWFsc2BgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBsaXN0T2ZTdHJpbmdzIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nLCBzdWNoIGFzIFwiQVwiLCB0aGF0IHlvdSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdCBhIGxpc3Qgb2Ygc3RyaW5ncy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihsaXN0T2ZTdHJpbmdzOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpFYWNoTWVtYmVyRXF1YWxzJywgWyBsaXN0T2ZTdHJpbmdzLCB2YWx1ZSBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGVhY2ggbWVtYmVyIGluIGEgbGlzdCBvZiBzdHJpbmdzIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgc2Vjb25kXG4gKiBsaXN0IG9mIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkVhY2hNZW1iZXJJbiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OkVhY2hNZW1iZXJJbmBgIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBzdHJpbmdzVG9DaGVjayBBIGxpc3Qgb2Ygc3RyaW5ncywgc3VjaCBhcyBcIkFcIiwgXCJCXCIsIFwiQ1wiLiBBV1MgQ2xvdWRGb3JtYXRpb24gY2hlY2tzIHdoZXRoZXIgZWFjaCBtZW1iZXIgaW4gdGhlIHN0cmluZ3NfdG9fY2hlY2sgcGFyYW1ldGVyIGlzIGluIHRoZSBzdHJpbmdzX3RvX21hdGNoIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0gc3RyaW5nc1RvTWF0Y2ggQSBsaXN0IG9mIHN0cmluZ3MsIHN1Y2ggYXMgXCJBXCIsIFwiQlwiLCBcIkNcIi4gRWFjaCBtZW1iZXIgaW4gdGhlIHN0cmluZ3NfdG9fbWF0Y2ggcGFyYW1ldGVyIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIG1lbWJlcnMgb2YgdGhlIHN0cmluZ3NfdG9fY2hlY2sgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3NUb0NoZWNrOiBhbnksIHN0cmluZ3NUb01hdGNoOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpFYWNoTWVtYmVySW4nLCBbIFtzdHJpbmdzVG9DaGVja10sIHN0cmluZ3NUb01hdGNoIF0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB2YWx1ZXMgZm9yIGEgc3BlY2lmaWVkIHBhcmFtZXRlciB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgRm5SZWZBbGwgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpSZWZBbGxgYCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVyVHlwZSBBbiBBV1Mtc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGUsIHN1Y2ggYXMgQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXA6OklkIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgQVdTOjpFQzI6OlZQQzo6SWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGFyYW1ldGVycyBpbiB0aGUgQVdTXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgQ2xvdWRGb3JtYXRpb24gVXNlciBHdWlkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJUeXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpSZWZBbGwnLCBwYXJhbWV0ZXJUeXBlKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhdHRyaWJ1dGUgdmFsdWUgb3IgbGlzdCBvZiB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgcGFyYW1ldGVyIGFuZCBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBGblZhbHVlT2YgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgYEZuOjpWYWx1ZU9mYGAgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHBhcmFtZXRlck9yTG9naWNhbElkIFRoZSBuYW1lIG9mIGEgcGFyYW1ldGVyIGZvciB3aGljaCB5b3Ugd2FudCB0byByZXRyaWV2ZSBhdHRyaWJ1dGUgdmFsdWVzLiBUaGUgcGFyYW1ldGVyIG11c3QgYmUgZGVjbGFyZWQgaW4gdGhlIFBhcmFtZXRlcnMgc2VjdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZSBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgZnJvbSB3aGljaCB5b3Ugd2FudCB0byByZXRyaWV2ZSBhIHZhbHVlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlck9yTG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdGbjo6VmFsdWVPZicsIFsgcGFyYW1ldGVyT3JMb2dpY2FsSWQsIGF0dHJpYnV0ZSBdKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gcGFyYW1ldGVyIHR5cGUgYW5kIGF0dHJpYnV0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuVmFsdWVPZkFsbCBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGBgRm46OlZhbHVlT2ZBbGxgYCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVyVHlwZSBBbiBBV1Mtc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGUsIHN1Y2ggYXMgQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXA6OklkIG9yIEFXUzo6RUMyOjpWUEM6OklkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBhcmFtZXRlcnMgaW4gdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBVc2VyIEd1aWRlLlxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gcmV0cmlldmUgYSB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXR0cmlidXRlcywgc2VlIFN1cHBvcnRlZCBBdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlclR5cGU6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoJ0ZuOjpWYWx1ZU9mQWxsJywgWyBwYXJhbWV0ZXJUeXBlLCBhdHRyaWJ1dGUgXSk7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlFQUEwRTtBQUMxRSxpQ0FBaUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBYSxFQUFHLFNBQVEsMENBQW1CO0lBQ3pDLFlBQVksSUFBWSxFQUFFLEtBQVU7UUFDbEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFKRCxnQkFJQztBQUVEOzs7R0FHRztBQUNILE1BQWEsV0FBWSxTQUFRLEVBQUU7SUFDakM7Ozs7O09BS0c7SUFDSCxZQUFZLE9BQWUsRUFBRSxXQUFnQixFQUFFLGNBQW1CO1FBQ2hFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBVkQsa0NBVUM7QUFFRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLEVBQUU7SUFDOUI7Ozs7T0FJRztJQUNILFlBQVkscUJBQTZCLEVBQUUsYUFBcUI7UUFDOUQsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBVEQsNEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxFQUFFO0lBQzlCOzs7Ozs7T0FNRztJQUNILFlBQVksTUFBZTtRQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFYRCw0QkFXQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxFQUFFO0lBQ25DOzs7T0FHRztJQUNILFlBQVksbUJBQTJCO1FBQ3JDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIs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LENBQUMsRUFBRSxjQUFjLENBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQVRELHdDQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxXQUFXO0lBQ3ZDOzs7OztPQUtHO0lBQ0gsWUFBWSxhQUFxQjtRQUMvQixLQUFLLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVZELDRCQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxXQUFXO0lBQ3hDOzs7O09BSUc7SUFDSCxZQUFZLG9CQUE0QixFQUFFLFNBQWlCO1FBQ3pELEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQVRELDhCQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxXQUFXO0lBQzNDOzs7O09BSUc7SUFDSCxZQUFZLGFBQXFCLEVBQUUsU0FBaUI7UUFDbEQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBVEQsb0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCBpc0ludHJpbnNpYyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBGbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlcigoKSA9PiAoeyBbbmFtZV06IHZhbHVlIH0pKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6RmluZEluTWFwYGAgcmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBrZXlzIGluIGEgdHdvLWxldmVsXG4gKiBtYXAgdGhhdCBpcyBkZWNsYXJlZCBpbiB0aGUgTWFwcGluZ3Mgc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuRmluZEluTWFwIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpGaW5kSW5NYXBgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIG1hcE5hbWUgVGhlIGxvZ2ljYWwgbmFtZSBvZiBhIG1hcHBpbmcgZGVjbGFyZWQgaW4gdGhlIE1hcHBpbmdzIHNlY3Rpb24gdGhhdCBjb250YWlucyB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICAgKiBAcGFyYW0gdG9wTGV2ZWxLZXkgVGhlIHRvcC1sZXZlbCBrZXkgbmFtZS4gSXRzIHZhbHVlIGlzIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAqIEBwYXJhbSBzZWNvbmRMZXZlbEtleSBUaGUgc2Vjb25kLWxldmVsIGtleSBuYW1lLCB3aGljaCBpcyBzZXQgdG8gb25lIG9mIHRoZSBrZXlzIGZyb20gdGhlIGxpc3QgYXNzaWduZWQgdG8gVG9wTGV2ZWxLZXkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXBOYW1lOiBzdHJpbmcsIHRvcExldmVsS2V5OiBhbnksIHNlY29uZExldmVsS2V5OiBhbnkpIHtcbiAgICBzdXBlcignRm46OkZpbmRJbk1hcCcsIFsgbWFwTmFtZSwgdG9wTGV2ZWxLZXksIHNlY29uZExldmVsS2V5IF0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZnJvbSBhIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuR2V0QXR0IGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGBgRm46OkdldEF0dGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbG9naWNhbE5hbWVPZlJlc291cmNlIFRoZSBsb2dpY2FsIG5hbWUgKGFsc28gY2FsbGVkIGxvZ2ljYWwgSUQpIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdGhhdCB5b3Ugd2FudC5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLXNwZWNpZmljIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSB5b3Ugd2FudC4gU2VlIHRoZSByZXNvdXJjZSdzIHJlZmVyZW5jZSBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBmb3IgdGhhdCByZXNvdXJjZSB0eXBlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobG9naWNhbE5hbWVPZlJlc291cmNlOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6R2V0QXR0JywgWyBsb2dpY2FsTmFtZU9mUmVzb3VyY2UsIGF0dHJpYnV0ZU5hbWUgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkdldEFac2BgIHJldHVybnMgYW4gYXJyYXkgdGhhdCBsaXN0cyBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIGFcbiAqIHNwZWNpZmllZCByZWdpb24uIEJlY2F1c2UgY3VzdG9tZXJzIGhhdmUgYWNjZXNzIHRvIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXMsIHRoZSBpbnRyaW5zaWNcbiAqIGZ1bmN0aW9uIGBgRm46OkdldEFac2BgIGVuYWJsZXMgdGVtcGxhdGUgYXV0aG9ycyB0byB3cml0ZSB0ZW1wbGF0ZXMgdGhhdCBhZGFwdCB0byB0aGUgY2FsbGluZ1xuICogdXNlcidzIGFjY2Vzcy4gVGhhdCB3YXkgeW91IGRvbid0IGhhdmUgdG8gaGFyZC1jb2RlIGEgZnVsbCBsaXN0IG9mIEF2YWlsYWJpbGl0eSBab25lcyBmb3IgYVxuICogc3BlY2lmaWVkIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuR2V0QVpzIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpHZXRBWnNgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgbmFtZSBvZiB0aGUgcmVnaW9uIGZvciB3aGljaCB5b3Ugd2FudCB0byBnZXQgdGhlIEF2YWlsYWJpbGl0eSBab25lcy5cbiAgICogICAgICAgICBZb3UgY2FuIHVzZSB0aGUgQVdTOjpSZWdpb24gcHNldWRvIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW5cbiAgICogICAgICAgICB3aGljaCB0aGUgc3RhY2sgaXMgY3JlYXRlZC4gU3BlY2lmeWluZyBhbiBlbXB0eSBzdHJpbmcgaXMgZXF1aXZhbGVudCB0b1xuICAgKiAgICAgICAgIHNwZWNpZnlpbmcgQVdTOjpSZWdpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyZWdpb24/OiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkdldEFacycsIHJlZ2lvbiB8fCAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkltcG9ydFZhbHVlYGAgcmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gb3V0cHV0IGV4cG9ydGVkIGJ5IGFub3RoZXIgc3RhY2suXG4gKiBZb3UgdHlwaWNhbGx5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBjcm9zcy1zdGFjayByZWZlcmVuY2VzLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVcbiAqIHRlbXBsYXRlIHNuaXBwZXRzLCBTdGFjayBBIGV4cG9ydHMgVlBDIHNlY3VyaXR5IGdyb3VwIHZhbHVlcyBhbmQgU3RhY2sgQiBpbXBvcnRzIHRoZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkltcG9ydFZhbHVlIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpJbXBvcnRWYWx1ZWBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gc2hhcmVkVmFsdWVUb0ltcG9ydCBUaGUgc3RhY2sgb3V0cHV0IHZhbHVlIHRoYXQgeW91IHdhbnQgdG8gaW1wb3J0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2hhcmVkVmFsdWVUb0ltcG9ydDogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0ZuOjpJbXBvcnRWYWx1ZScsIHNoYXJlZFZhbHVlVG9JbXBvcnQpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpKb2luYGAgYXBwZW5kcyBhIHNldCBvZiB2YWx1ZXMgaW50byBhIHNpbmdsZSB2YWx1ZSwgc2VwYXJhdGVkIGJ5XG4gKiB0aGUgc3BlY2lmaWVkIGRlbGltaXRlci4gSWYgYSBkZWxpbWl0ZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlIHNldCBvZiB2YWx1ZXMgYXJlIGNvbmNhdGVuYXRlZFxuICogd2l0aCBubyBkZWxpbWl0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkpvaW4gZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkpvaW5gYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGRlbGltaXRlciBUaGUgdmFsdWUgeW91IHdhbnQgdG8gb2NjdXIgYmV0d2VlbiBmcmFnbWVudHMuIFRoZSBkZWxpbWl0ZXIgd2lsbCBvY2N1ciBiZXR3ZWVuIGZyYWdtZW50cyBvbmx5LlxuICAgKiAgICAgICAgICBJdCB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGZpbmFsIHZhbHVlLlxuICAgKiBAcGFyYW0gbGlzdE9mVmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyB5b3Ugd2FudCBjb21iaW5lZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlbGltaXRlcjogc3RyaW5nLCBsaXN0T2ZWYWx1ZXM6IGFueVtdKSB7XG4gICAgaWYgKGxpc3RPZlZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm5Kb2luIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSB2YWx1ZSB0byBiZSBwcm92aWRlZGApO1xuICAgIH1cbiAgICBzdXBlcignRm46OkpvaW4nLCBbIGRlbGltaXRlciwgbGlzdE9mVmFsdWVzIF0pO1xuICB9XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIGBgRm5Kb2luKCcnLCBsaXN0T2ZWYWx1ZXMpYGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkNvbmNhdCBleHRlbmRzIEZuSm9pbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdE9mVmFsdWVzOiBhbnlbXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpKb2luYGAgZnVuY3Rpb24gd2l0aCBhbiBlbXB0eSBkZWxpbWl0ZXIuXG4gICAqIEBwYXJhbSBsaXN0T2ZWYWx1ZXMgVGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGNvbmNhdGVuYXRlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoLi4ubGlzdE9mVmFsdWVzOiBhbnlbXSkge1xuICAgIC8vIE9wdGltaXphdGlvbjogaWYgYW55IG9mIHRoZSBpbnB1dCBhcmd1bWVudHMgaXMgYWxzbyBhIEZuQ29uY2F0LFxuICAgIC8vIHNwbGljZSB0aGVpciBsaXN0IG9mIHZhbHVlcyBpbnRvIHRoZSBjdXJyZW50IEZuQ29uY2F0LiAnaW5zdGFuY2VvZidcbiAgICAvLyBjYW4gZmFpbCwgYnV0IHdlIGRvIG5vdCBkZXBlbmQgZGVwZW5kIG9uIHRoaXMgZm9yIGNvcnJlY3RuZXNzLlxuICAgIC8vXG4gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHJlc29sdmVkIGludHJpbnNpY3MsIHNvIHdlIGNhbiBkZXRlY3QgdGhpc1xuICAgIC8vIGhhcHBlbmluZyBib3RoIGF0IFRva2VuIGFzIHdlbGwgYXMgYXQgQ2xvdWRGb3JtYXRpb24gbGV2ZWwuXG5cbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBsaXN0T2ZWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IGxpc3RPZlZhbHVlc1tpXTtcbiAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEZuQ29uY2F0KSB7XG4gICAgICAgIGxpc3RPZlZhbHVlcy5zcGxpY2UoaSwgMSwgLi4uZWwubGlzdE9mVmFsdWVzKTtcbiAgICAgICAgaSArPSBlbC5saXN0T2ZWYWx1ZXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChpc0NvbmNhdEludHJpbnNpYyhlbCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uY2F0SW50cmluc2ljVmFsdWVzKGVsKTtcbiAgICAgICAgbGlzdE9mVmFsdWVzLnNwbGljZShpLCAxLCAuLi52YWx1ZXMpO1xuICAgICAgICBpICs9IHZhbHVlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcignJywgbGlzdE9mVmFsdWVzKTtcbiAgICB0aGlzLmxpc3RPZlZhbHVlcyA9IGxpc3RPZlZhbHVlcztcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgcmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIGludHJpbnNpYyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYSBGbkNvbmNhdCByZXNvbHV0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29uY2F0SW50cmluc2ljKHg6IGFueSkge1xuICByZXR1cm4gaXNJbnRyaW5zaWMoeCkgJiYgT2JqZWN0LmtleXMoeClbMF0gPT09ICdGbjo6Sm9pbicgJiYgeFsnRm46OkpvaW4nXVswXSA9PT0gJyc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25jYXR0ZWQgdmFsdWVzIG9mIHRoZSBjb25jYXQgaW50cmluc2ljXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdEludHJpbnNpY1ZhbHVlcyh4OiBhbnkpIHtcbiAgcmV0dXJuIHhbJ0ZuOjpKb2luJ11bMV07XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpTZWxlY3RgYCByZXR1cm5zIGEgc2luZ2xlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBvYmplY3RzIGJ5IGluZGV4LlxuICovXG5leHBvcnQgY2xhc3MgRm5TZWxlY3QgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlNlbGVjdGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBvYmplY3QgdG8gcmV0cmlldmUuIFRoaXMgbXVzdCBiZSBhIHZhbHVlIGZyb20gemVybyB0byBOLTEsIHdoZXJlIE4gcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS5cbiAgICogQHBhcmFtIGFycmF5IFRoZSBsaXN0IG9mIG9iamVjdHMgdG8gc2VsZWN0IGZyb20uIFRoaXMgbGlzdCBtdXN0IG5vdCBiZSBudWxsLCBub3IgY2FuIGl0IGhhdmUgbnVsbCBlbnRyaWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5kZXg6IG51bWJlciwgYXJyYXk6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6U2VsZWN0JywgWyBpbmRleCwgYXJyYXkgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUbyBzcGxpdCBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgdmFsdWVzIHNvIHRoYXQgeW91IGNhbiBzZWxlY3QgYW4gZWxlbWVudCBmcm9tIHRoZVxuICogcmVzdWx0aW5nIHN0cmluZyBsaXN0LCB1c2UgdGhlIGBgRm46OlNwbGl0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBzcGxpdHNcbiAqIHdpdGggYSBkZWxpbWl0ZXIsIHN1Y2ggYXMgLCAoYSBjb21tYSkuIEFmdGVyIHlvdSBzcGxpdCBhIHN0cmluZywgdXNlIHRoZSBgYEZuOjpTZWxlY3RgYCBmdW5jdGlvblxuICogdG8gcGljayBhIHNwZWNpZmljIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBGblNwbGl0IGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGBgRm46OlNwbGl0YGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkZWxpbWl0ZXIgQSBzdHJpbmcgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHdoZXJlIHRoZSBzb3VyY2Ugc3RyaW5nIGlzIGRpdmlkZWQuXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHN0cmluZyB2YWx1ZSB0aGF0IHlvdSB3YW50IHRvIHNwbGl0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGVsaW1pdGVyOiBzdHJpbmcsIHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpTcGxpdCcsIFsgZGVsaW1pdGVyLCBzb3VyY2UgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OlN1YmBgIHN1YnN0aXR1dGVzIHZhcmlhYmxlcyBpbiBhbiBpbnB1dCBzdHJpbmcgd2l0aCB2YWx1ZXMgdGhhdFxuICogeW91IHNwZWNpZnkuIEluIHlvdXIgdGVtcGxhdGVzLCB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdCBjb21tYW5kcyBvciBvdXRwdXRzXG4gKiB0aGF0IGluY2x1ZGUgdmFsdWVzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSB1bnRpbCB5b3UgY3JlYXRlIG9yIHVwZGF0ZSBhIHN0YWNrLlxuICovXG5leHBvcnQgY2xhc3MgRm5TdWIgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlN1YmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gYm9keSBBIHN0cmluZyB3aXRoIHZhcmlhYmxlcyB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJzdGl0dXRlcyB3aXRoIHRoZWlyXG4gICAqICAgICAgIGFzc29jaWF0ZWQgdmFsdWVzIGF0IHJ1bnRpbWUuIFdyaXRlIHZhcmlhYmxlcyBhcyAke015VmFyTmFtZX0uIFZhcmlhYmxlc1xuICAgKiAgICAgICBjYW4gYmUgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzLCByZXNvdXJjZSBsb2dpY2FsIElEcywgcmVzb3VyY2UgYXR0cmlidXRlcyxcbiAgICogICAgICAgb3IgYSB2YXJpYWJsZSBpbiBhIGtleS12YWx1ZSBtYXAuIElmIHlvdSBzcGVjaWZ5IG9ubHkgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzLFxuICAgKiAgICAgICByZXNvdXJjZSBsb2dpY2FsIElEcywgYW5kIHJlc291cmNlIGF0dHJpYnV0ZXMsIGRvbid0IHNwZWNpZnkgYSBrZXktdmFsdWUgbWFwLlxuICAgKiBAcGFyYW0gdmFyaWFibGVzIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgdGhhdCB5b3UgaW5jbHVkZWQgaW4gdGhlIFN0cmluZyBwYXJhbWV0ZXIuXG4gICAqICAgICAgICAgIFRoZSB2YWx1ZSB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJzdGl0dXRlcyBmb3IgdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgbmFtZSBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keTogc3RyaW5nLCB2YXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgc3VwZXIoJ0ZuOjpTdWInLCB2YXJpYWJsZXMgPyBbYm9keSwgdmFyaWFibGVzXSA6IGJvZHkpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpCYXNlNjRgYCByZXR1cm5zIHRoZSBCYXNlNjQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0IHN0cmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgdG8gcGFzcyBlbmNvZGVkIGRhdGEgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgYnkgd2F5IG9mXG4gKiB0aGUgVXNlckRhdGEgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkJhc2U2NCBleHRlbmRzIEZuIHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpCYXNlNjRgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0cmluZyB2YWx1ZSB5b3Ugd2FudCB0byBjb252ZXJ0IHRvIEJhc2U2NC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGE6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6QmFzZTY0JywgZGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkNpZHJgYCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgQ2lkciBhZGRyZXNzIGJsb2NrLlxuICovXG5leHBvcnQgY2xhc3MgRm5DaWRyIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpDaWRyYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBpcEJsb2NrICBUaGUgdXNlci1zcGVjaWZpZWQgZGVmYXVsdCBDaWRyIGFkZHJlc3MgYmxvY2suXG4gICAqIEBwYXJhbSBjb3VudCAgVGhlIG51bWJlciBvZiBzdWJuZXRzJyBDaWRyIGJsb2NrIHdhbnRlZC4gQ291bnQgY2FuIGJlIDEgdG8gMjU2LlxuICAgKiBAcGFyYW0gc2l6ZU1hc2sgVGhlIGRpZ2l0IGNvdmVyZWQgaW4gdGhlIHN1Ym5ldC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlwQmxvY2s6IGFueSwgY291bnQ6IGFueSwgc2l6ZU1hc2s/OiBhbnkpIHtcbiAgICBpZiAoY291bnQgPCAxIHx8IGNvdW50ID4gMjU2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZuOjpDaWRyJ3MgY291bnQgYXR0cmlidXRlIG11c3QgYmUgYmV0d2VuIDEgYW5kIDI1NiwgJHtjb3VudH0gd2FzIHByb3ZpZGVkLmApO1xuICAgIH1cbiAgICBzdXBlcignRm46OkNpZHInLCBbaXBCbG9jaywgY291bnQsIHNpemVNYXNrXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIHVzZSBpbnRyaW5zaWMgZnVuY3Rpb25zLCBzdWNoIGFzIGBgRm46OklmYGAsIGBgRm46OkVxdWFsc2BgLCBhbmQgYGBGbjo6Tm90YGAsIHRvIGNvbmRpdGlvbmFsbHlcbiAqIGNyZWF0ZSBzdGFjayByZXNvdXJjZXMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGV2YWx1YXRlZCBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzIHRoYXQgeW91XG4gKiBkZWNsYXJlIHdoZW4geW91IGNyZWF0ZSBvciB1cGRhdGUgYSBzdGFjay4gQWZ0ZXIgeW91IGRlZmluZSBhbGwgeW91ciBjb25kaXRpb25zLCB5b3UgY2FuXG4gKiBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlc291cmNlcyBvciByZXNvdXJjZSBwcm9wZXJ0aWVzIGluIHRoZSBSZXNvdXJjZXMgYW5kIE91dHB1dHMgc2VjdGlvbnNcbiAqIG9mIGEgdGVtcGxhdGUuXG4gKlxuICogWW91IGRlZmluZSBhbGwgY29uZGl0aW9ucyBpbiB0aGUgQ29uZGl0aW9ucyBzZWN0aW9uIG9mIGEgdGVtcGxhdGUgZXhjZXB0IGZvciBgYEZuOjpJZmBgIGNvbmRpdGlvbnMuXG4gKiBZb3UgY2FuIHVzZSB0aGUgYGBGbjo6SWZgYCBjb25kaXRpb24gaW4gdGhlIG1ldGFkYXRhIGF0dHJpYnV0ZSwgdXBkYXRlIHBvbGljeSBhdHRyaWJ1dGUsIGFuZCBwcm9wZXJ0eVxuICogdmFsdWVzIGluIHRoZSBSZXNvdXJjZXMgc2VjdGlvbiBhbmQgT3V0cHV0cyBzZWN0aW9ucyBvZiBhIHRlbXBsYXRlLlxuICpcbiAqIFlvdSBtaWdodCB1c2UgY29uZGl0aW9ucyB3aGVuIHlvdSB3YW50IHRvIHJldXNlIGEgdGVtcGxhdGUgdGhhdCBjYW4gY3JlYXRlIHJlc291cmNlcyBpbiBkaWZmZXJlbnRcbiAqIGNvbnRleHRzLCBzdWNoIGFzIGEgdGVzdCBlbnZpcm9ubWVudCB2ZXJzdXMgYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBJbiB5b3VyIHRlbXBsYXRlLCB5b3UgY2FuXG4gKiBhZGQgYW4gRW52aXJvbm1lbnRUeXBlIGlucHV0IHBhcmFtZXRlciwgd2hpY2ggYWNjZXB0cyBlaXRoZXIgcHJvZCBvciB0ZXN0IGFzIGlucHV0cy4gRm9yIHRoZVxuICogcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IGluY2x1ZGUgQW1hem9uIEVDMiBpbnN0YW5jZXMgd2l0aCBjZXJ0YWluIGNhcGFiaWxpdGllcztcbiAqIGhvd2V2ZXIsIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCwgeW91IHdhbnQgdG8gdXNlIGxlc3MgY2FwYWJpbGl0aWVzIHRvIHNhdmUgY29zdHMuIFdpdGhcbiAqIGNvbmRpdGlvbnMsIHlvdSBjYW4gZGVmaW5lIHdoaWNoIHJlc291cmNlcyBhcmUgY3JlYXRlZCBhbmQgaG93IHRoZXkncmUgY29uZmlndXJlZCBmb3IgZWFjaFxuICogZW52aXJvbm1lbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ29uZGl0aW9uIGV4dGVuZHMgRm4ge1xuXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZSwgb3IgcmV0dXJucyBmYWxzZSBpZiBhbnkgb25lXG4gKiAgb2YgdGhlIGNvbmRpdGlvbnMgZXZhbHVhdGVzIHRvIGZhbHNlLiBgYEZuOjpBbmRgYCBhY3RzIGFzIGFuIEFORCBvcGVyYXRvci4gVGhlIG1pbmltdW0gbnVtYmVyIG9mXG4gKiBjb25kaXRpb25zIHRoYXQgeW91IGNhbiBpbmNsdWRlIGlzIDIsIGFuZCB0aGUgbWF4aW11bSBpcyAxMC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQW5kIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICBjb25zdHJ1Y3RvciguLi5jb25kaXRpb246IEZuQ29uZGl0aW9uW10pIHtcbiAgICBzdXBlcignRm46OkFuZCcsIGNvbmRpdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbC4gUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gdmFsdWVzIGFyZSBlcXVhbCBvciBmYWxzZVxuICogaWYgdGhleSBhcmVuJ3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkVxdWFscyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6RXF1YWxzYGAgY29uZGl0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbGhzIEEgdmFsdWUgb2YgYW55IHR5cGUgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0gcmhzIEEgdmFsdWUgb2YgYW55IHR5cGUgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGhzOiBhbnksIHJoczogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpFcXVhbHMnLCBbIGxocywgcmhzIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBvbmUgdmFsdWUgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgYW5kIGFub3RoZXIgdmFsdWUgaWYgdGhlXG4gKiBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZS4gQ3VycmVudGx5LCBBV1MgQ2xvdWRGb3JtYXRpb24gc3VwcG9ydHMgdGhlIGBgRm46OklmYGBcbiAqIGludHJpbnNpYyBmdW5jdGlvbiBpbiB0aGUgbWV0YWRhdGEgYXR0cmlidXRlLCB1cGRhdGUgcG9saWN5IGF0dHJpYnV0ZSwgYW5kIHByb3BlcnR5IHZhbHVlc1xuICogaW4gdGhlIFJlc291cmNlcyBzZWN0aW9uIGFuZCBPdXRwdXRzIHNlY3Rpb25zIG9mIGEgdGVtcGxhdGUuIFlvdSBjYW4gdXNlIHRoZSBBV1M6Ok5vVmFsdWVcbiAqIHBzZXVkbyBwYXJhbWV0ZXIgYXMgYSByZXR1cm4gdmFsdWUgdG8gcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgRm5JZiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6SWZgYCBjb25kaXRpb24gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBjb25kaXRpb24gQSByZWZlcmVuY2UgdG8gYSBjb25kaXRpb24gaW4gdGhlIENvbmRpdGlvbnMgc2VjdGlvbi4gVXNlIHRoZSBjb25kaXRpb24ncyBuYW1lIHRvIHJlZmVyZW5jZSBpdC5cbiAgICogQHBhcmFtIHZhbHVlSWZUcnVlIEEgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG4gICAqIEBwYXJhbSB2YWx1ZUlmRmFsc2UgQSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25kaXRpb246IHN0cmluZywgdmFsdWVJZlRydWU6IGFueSwgdmFsdWVJZkZhbHNlOiBhbnkpIHtcbiAgICBzdXBlcignRm46OklmJywgWyBjb25kaXRpb24sIHZhbHVlSWZUcnVlLCB2YWx1ZUlmRmFsc2UgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgZm9yIGEgY29uZGl0aW9uIHRoYXQgZXZhbHVhdGVzIHRvIGZhbHNlIG9yIHJldHVybnMgZmFsc2UgZm9yIGEgY29uZGl0aW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUuXG4gKiBgYEZuOjpOb3RgYCBhY3RzIGFzIGEgTk9UIG9wZXJhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgRm5Ob3QgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46Ok5vdGBgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbmRpdGlvbiBBIGNvbmRpdGlvbiBzdWNoIGFzIGBgRm46OkVxdWFsc2BgIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUgb3IgZmFsc2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25kaXRpb246IEZuQ29uZGl0aW9uKSB7XG4gICAgc3VwZXIoJ0ZuOjpOb3QnLCBbIGNvbmRpdGlvbiBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgb25lIG9mIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBldmFsdWF0ZSB0byB0cnVlLCBvciByZXR1cm5zIGZhbHNlIGlmXG4gKiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgZXZhbHVhdGVzIHRvIGZhbHNlLiBgYEZuOjpPcmBgIGFjdHMgYXMgYW4gT1Igb3BlcmF0b3IuIFRoZSBtaW5pbXVtIG51bWJlclxuICogb2YgY29uZGl0aW9ucyB0aGF0IHlvdSBjYW4gaW5jbHVkZSBpcyAyLCBhbmQgdGhlIG1heGltdW0gaXMgMTAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbk9yIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpPcmBgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbmRpdGlvbiBBIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIG9yIGZhbHNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoLi4uY29uZGl0aW9uOiBGbkNvbmRpdGlvbltdKSB7XG4gICAgc3VwZXIoJ0ZuOjpPcicsIGNvbmRpdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBzcGVjaWZpZWQgc3RyaW5nIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgbGlzdCBvZiBzdHJpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRm5Db250YWlucyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6Q29udGFpbnNgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGxpc3RPZlN0cmluZ3MgQSBsaXN0IG9mIHN0cmluZ3MsIHN1Y2ggYXMgXCJBXCIsIFwiQlwiLCBcIkNcIi5cbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nLCBzdWNoIGFzIFwiQVwiLCB0aGF0IHlvdSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdCBhIGxpc3Qgb2Ygc3RyaW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxpc3RPZlN0cmluZ3M6IGFueSwgdmFsdWU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6Q29udGFpbnMnLCBbIGxpc3RPZlN0cmluZ3MsIHZhbHVlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgc3BlY2lmaWVkIHN0cmluZyBtYXRjaGVzIGFsbCB2YWx1ZXMgaW4gYSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgRm5FYWNoTWVtYmVyRXF1YWxzIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpFYWNoTWVtYmVyRXF1YWxzYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBsaXN0T2ZTdHJpbmdzIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZywgc3VjaCBhcyBcIkFcIiwgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlIGFnYWluc3QgYSBsaXN0IG9mIHN0cmluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsaXN0T2ZTdHJpbmdzOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkVhY2hNZW1iZXJFcXVhbHMnLCBbIGxpc3RPZlN0cmluZ3MsIHZhbHVlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGVhY2ggbWVtYmVyIGluIGEgbGlzdCBvZiBzdHJpbmdzIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgc2Vjb25kXG4gKiBsaXN0IG9mIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkVhY2hNZW1iZXJJbiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6RWFjaE1lbWJlckluYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBzdHJpbmdzVG9DaGVjayBBIGxpc3Qgb2Ygc3RyaW5ncywgc3VjaCBhcyBcIkFcIiwgXCJCXCIsIFwiQ1wiLiBBV1MgQ2xvdWRGb3JtYXRpb24gY2hlY2tzIHdoZXRoZXIgZWFjaCBtZW1iZXIgaW4gdGhlIHN0cmluZ3NfdG9fY2hlY2sgcGFyYW1ldGVyIGlzIGluIHRoZSBzdHJpbmdzX3RvX21hdGNoIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHN0cmluZ3NUb01hdGNoIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJpbmdzX3RvX21hdGNoIHBhcmFtZXRlciBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJpbmdzX3RvX2NoZWNrIHBhcmFtZXRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0cmluZ3NUb0NoZWNrOiBhbnksIHN0cmluZ3NUb01hdGNoOiBhbnkpIHtcbiAgICBzdXBlcignRm46OkVhY2hNZW1iZXJJbicsIFsgW3N0cmluZ3NUb0NoZWNrXSwgc3RyaW5nc1RvTWF0Y2ggXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB2YWx1ZXMgZm9yIGEgc3BlY2lmaWVkIHBhcmFtZXRlciB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgRm5SZWZBbGwgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlJlZkFsbGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyVHlwZSBBbiBBV1Mtc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGUsIHN1Y2ggYXMgQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXA6OklkIG9yXG4gICAqICAgICAgICAgICAgQVdTOjpFQzI6OlZQQzo6SWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGFyYW1ldGVycyBpbiB0aGUgQVdTXG4gICAqICAgICAgICAgICAgQ2xvdWRGb3JtYXRpb24gVXNlciBHdWlkZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlclR5cGU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6UmVmQWxsJywgcGFyYW1ldGVyVHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSBvciBsaXN0IG9mIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBwYXJhbWV0ZXIgYW5kIGF0dHJpYnV0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuVmFsdWVPZiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6VmFsdWVPZmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyT3JMb2dpY2FsSWQgVGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHJldHJpZXZlIGF0dHJpYnV0ZSB2YWx1ZXMuIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBkZWNsYXJlZCBpbiB0aGUgUGFyYW1ldGVycyBzZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZSBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgZnJvbSB3aGljaCB5b3Ugd2FudCB0byByZXRyaWV2ZSBhIHZhbHVlLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1ldGVyT3JMb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OlZhbHVlT2YnLCBbIHBhcmFtZXRlck9yTG9naWNhbElkLCBhdHRyaWJ1dGUgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgYXR0cmlidXRlIHZhbHVlcyBmb3IgYSBnaXZlbiBwYXJhbWV0ZXIgdHlwZSBhbmQgYXR0cmlidXRlLlxuICovXG5leHBvcnQgY2xhc3MgRm5WYWx1ZU9mQWxsIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpWYWx1ZU9mQWxsYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJUeXBlIEFuIEFXUy1zcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZSwgc3VjaCBhcyBBV1M6OkVDMjo6U2VjdXJpdHlHcm91cDo6SWQgb3IgQVdTOjpFQzI6OlZQQzo6SWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGFyYW1ldGVycyBpbiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIFVzZXIgR3VpZGUuXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gcmV0cmlldmUgYSB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXR0cmlidXRlcywgc2VlIFN1cHBvcnRlZCBBdHRyaWJ1dGVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1ldGVyVHlwZTogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6VmFsdWVPZkFsbCcsIFsgcGFyYW1ldGVyVHlwZSwgYXR0cmlidXRlIF0pO1xuICB9XG59XG4iXX0=

@@ -26,2 +26,2 @@ "use strict";

exports.Include = Include;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluY2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtQ0FBdUM7QUFTdkM7OztHQUdHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsb0JBQVk7SUFNckM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBbUI7UUFDNUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBdEJELDBCQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluY2x1ZGVQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIHRvIGluY2x1ZGUgaW4gdGhlIHN0YWNrIChhcyBpcykuXG4gICAgICovXG4gICAgdGVtcGxhdGU6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBJbmNsdWRlcyBhIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGludG8gYSBzdGFjay4gQWxsIGVsZW1lbnRzIG9mIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIG1lcmdlZCBpbnRvXG4gKiB0aGUgY3VycmVudCBzdGFjaywgdG9nZXRoZXIgd2l0aCBhbnkgZWxlbWVudHMgY3JlYXRlZCBwcm9ncmFtbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY2xhc3MgSW5jbHVkZSBleHRlbmRzIFN0YWNrRWxlbWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGluY2x1ZGVkIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZTogb2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhZG9wdGVkIHRlbXBsYXRlIGNvbnN0cnVjdC4gVGhlIHRlbXBsYXRlIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN0YWNrIGFzLWlzIHdpdGggbm8gY2hhbmdlcyBhdCBhbGwuXG4gICAgICogVGhpcyBtZWFucyB0aGF0IGxvZ2ljYWwgSURzIG9mIGVudGl0aWVzIHdpdGhpbiB0aGlzIHRlbXBsYXRlIG1heSBjb25mbGljdCB3aXRoIGxvZ2ljYWwgSURzIG9mIGVudGl0aWVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlXG4gICAgICogc3RhY2suXG4gICAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdCBvZiB0aGlzIHRlbXBsYXRlXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGlzIGNvbnN0cnVjdFxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgdG8gYWRvcHQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gcHJvcHMudGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ2xvdWRGb3JtYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluY2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtQ0FBdUM7QUFTdkM7OztHQUdHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsb0JBQVk7SUFNdkM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBbUI7UUFDOUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBdEJELDBCQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluY2x1ZGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgdG8gaW5jbHVkZSBpbiB0aGUgc3RhY2sgKGFzIGlzKS5cbiAgICovXG4gIHRlbXBsYXRlOiBvYmplY3Q7XG59XG5cbi8qKlxuICogSW5jbHVkZXMgYSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgc3RhY2suIEFsbCBlbGVtZW50cyBvZiB0aGUgdGVtcGxhdGUgd2lsbCBiZSBtZXJnZWQgaW50b1xuICogdGhlIGN1cnJlbnQgc3RhY2ssIHRvZ2V0aGVyIHdpdGggYW55IGVsZW1lbnRzIGNyZWF0ZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY2x1ZGUgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAvKipcbiAgICogVGhlIGluY2x1ZGVkIHRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlOiBvYmplY3Q7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYWRvcHRlZCB0ZW1wbGF0ZSBjb25zdHJ1Y3QuIFRoZSB0ZW1wbGF0ZSB3aWxsIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBzdGFjayBhcy1pcyB3aXRoIG5vIGNoYW5nZXMgYXQgYWxsLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgbG9naWNhbCBJRHMgb2YgZW50aXRpZXMgd2l0aGluIHRoaXMgdGVtcGxhdGUgbWF5IGNvbmZsaWN0IHdpdGggbG9naWNhbCBJRHMgb2YgZW50aXRpZXMgdGhhdCBhcmUgcGFydCBvZiB0aGVcbiAgICogc3RhY2suXG4gICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3Qgb2YgdGhpcyB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgdG8gYWRvcHQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogSW5jbHVkZVByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gcHJvcHMudGVtcGxhdGU7XG4gIH1cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxufVxuIl19

@@ -21,4 +21,4 @@ import { StackElement } from './stack';

*
* <path.join('')><md5(path.join('/')>
* "human" "hash"
* <path.join('')><md5(path.join('/')>
* "human" "hash"
*

@@ -25,0 +25,0 @@ * If the "human" part of the ID exceeds 240 characters, we simply trim it so

@@ -15,4 +15,4 @@ "use strict";

*
* <path.join('')><md5(path.join('/')>
* "human" "hash"
* <path.join('')><md5(path.join('/')>
* "human" "hash"
*

@@ -132,2 +132,2 @@ * If the "human" part of the ID exceeds 240 characters, we simply trim it so

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbC1pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2ljYWwtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQ0FBZ0Q7QUFHaEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBWXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQWEsc0JBQXNCO0lBQ3hCLGVBQWUsQ0FBQyxpQkFBMkI7UUFDOUMsT0FBTyx1QkFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNKO0FBSkQsd0RBSUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFVO0lBZ0JuQixZQUE2QixZQUErQjtRQUEvQixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFmNUQ7O1dBRUc7UUFDYyxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUV2RDs7Ozs7OztXQU9HO1FBQ2MsWUFBTyxHQUEyQixFQUFFLENBQUM7SUFHdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQzdDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUMxRTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxZQUEwQjtRQUMxQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNqQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3pIO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEtBQWE7UUFDN0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFFRCw2RUFBNkU7UUFDN0UsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUN4RCwyQ0FBMkM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLHlCQUF5QixLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ2pKO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFNUIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBOUVELGdDQThFQztBQUVELE1BQU0scUJBQXFCLEdBQUcsOEJBQThCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFNBQWlCO0lBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsU0FBUyxHQUFHLENBQUMsQ0FBQztLQUNoSTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYWtlVW5pcXVlSWQgfSBmcm9tICcuLi91dGlsL3VuaXF1ZWlkJztcbmltcG9ydCB7IFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5jb25zdCBQQVRIX1NFUCA9ICcvJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRhdGlvbiBsb2dpY2FsIElEIGFzc2lnbm1lbnQgc3RyYXRlZ2llc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBZGRyZXNzaW5nU2NoZW1lIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxvZ2ljYWwgSUQgZm9yIHRoZSBnaXZlbiBsaXN0IG9mIENvbnN0cnVjdCBuYW1lcyBvbiB0aGUgcGF0aC5cbiAgICAgKi9cbiAgICBhbGxvY2F0ZUFkZHJlc3MoYWRkcmVzc0NvbXBvbmVudHM6IHN0cmluZ1tdKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBoYXNoZWQgSUQgZm9yIGEgcmVzb3VyY2UuXG4gKlxuICogSW4gb3JkZXIgdG8gbWFrZSBzdXJlIGxvZ2ljYWwgSURzIGFyZSB1bmlxdWUgYW5kIHN0YWJsZSwgd2UgaGFzaCB0aGUgcmVzb3VyY2VcbiAqIGNvbnN0cnVjdCB0cmVlIHBhdGggKGkuZS4gdG9wbGV2ZWwvc2Vjb25kbGV2ZWwvLi4uL215cmVzb3VyY2UpIGFuZCBhZGQgaXQgYXNcbiAqIGEgc3VmZml4IHRvIHRoZSBwYXRoIGNvbXBvbmVudHMgam9pbmVkIHdpdGhvdXQgYSBzZXBhcmF0b3IgKENsb3VkRm9ybWF0aW9uXG4gKiBJRHMgb25seSBhbGxvdyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycykuXG4gKlxuICogVGhlIHJlc3VsdCB3aWxsIGJlOlxuICpcbiAqICAgICA8cGF0aC5qb2luKCcnKT48bWQ1KHBhdGguam9pbignLycpPlxuICogICAgICAgICBcImh1bWFuXCIgICAgICAgICAgXCJoYXNoXCJcbiAqXG4gKiBJZiB0aGUgXCJodW1hblwiIHBhcnQgb2YgdGhlIElEIGV4Y2VlZHMgMjQwIGNoYXJhY3RlcnMsIHdlIHNpbXBseSB0cmltIGl0IHNvXG4gKiB0aGUgdG90YWwgSUQgZG9lc24ndCBleGNlZWQgQ2xvdWRGb3JtYXRpb24ncyAyNTUgY2hhcmFjdGVyIGxpbWl0LlxuICpcbiAqIFdlIG9ubHkgdGFrZSA4IGNoYXJhY3RlcnMgZnJvbSB0aGUgbWQ1IGhhc2ggKDAuMDAwMDA1IGNoYW5jZSBvZiBjb2xsaXNpb24pLlxuICpcbiAqIFNwZWNpYWwgY2FzZXM6XG4gKlxuICogLSBJZiB0aGUgcGF0aCBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlIGNvbXBvbmVudCAoaS5lLiBpdCdzIGEgdG9wLWxldmVsXG4gKiAgIHJlc291cmNlKSwgd2Ugd29uJ3QgYWRkIHRoZSBoYXNoIHRvIGl0LiBUaGUgaGFzaCBpcyBub3QgbmVlZGVkIGZvclxuICogICBkaXNhbWlndWF0aW9uIGFuZCBhbHNvLCBpdCBhbGxvd3MgZm9yIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWlncmF0aW9uIGFuXG4gKiAgIGV4aXN0aW5nIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIHRvIGEgQ0RLIHN0YWNrIHdpdGhvdXQgbG9naWNhbCBJRCBjaGFuZ2VzXG4gKiAgIChvciByZW5hbWVzKS5cbiAqIC0gRm9yIGFlc3RoZXRpYyByZWFzb25zLCBpZiB0aGUgbGFzdCBjb21wb25lbnRzIG9mIHRoZSBwYXRoIGFyZSB0aGUgc2FtZVxuICogICAoaS5lLiBgTDEvTDIvUGlwZWxpbmUvUGlwZWxpbmVgKSwgdGhleSB3aWxsIGJlIGRlLWR1cGxpY2F0ZWQgdG8gbWFrZSB0aGVcbiAqICAgcmVzdWx0aW5nIGh1bWFuIHBvcnRpb24gb2YgdGhlIElEIG1vcmUgcGxlYXNpbmc6IGBMMUwyUGlwZWxpbmU8SEFTSD5gXG4gKiAgIGluc3RlYWQgb2YgYEwxTDJQaXBlbGluZVBpcGVsaW5lPEhBU0g+YFxuICogLSBJZiBhIGNvbXBvbmVudCBpcyBuYW1lZCBcIkRlZmF1bHRcIiBpdCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgcGF0aC4gVGhpc1xuICogICBhbGxvd3MgcmVmYWN0b3JpbmcgaGlnaGVyIGxldmVsIGFic3RyYWN0aW9ucyBhcm91bmQgY29uc3RydWN0cyB3aXRob3V0IGFmZmVjdGluZ1xuICogICB0aGUgSURzIG9mIGFscmVhZHkgZGVwbG95ZWQgcmVzb3VyY2VzLlxuICogLSBJZiBhIGNvbXBvbmVudCBpcyBuYW1lZCBcIlJlc291cmNlXCIgaXQgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHVzZXItdmlzaWJsZVxuICogICBwYXRoLCBidXQgaW5jbHVkZWQgaW4gdGhlIGhhc2guIFRoaXMgcmVkdWNlcyB2aXN1YWwgbm9pc2UgaW4gdGhlIGh1bWFuIHJlYWRhYmxlXG4gKiAgIHBhcnQgb2YgdGhlIGlkZW50aWZpZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lIGltcGxlbWVudHMgSUFkZHJlc3NpbmdTY2hlbWUge1xuICAgIHB1YmxpYyBhbGxvY2F0ZUFkZHJlc3MoYWRkcmVzc0NvbXBvbmVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVJZChhZGRyZXNzQ29tcG9uZW50cyk7XG4gICAgfVxufVxuXG4vKipcbiAqIENsYXNzIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIGxvZ2ljYWwgSURzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIHJlc291cmNlc1xuICpcbiAqIFN1cHBvcnRzIHJlbmFtaW5nIHRoZSBnZW5lcmF0ZWQgSURzLlxuICovXG5leHBvcnQgY2xhc3MgTG9naWNhbElEcyB7XG4gICAgLyoqXG4gICAgICogVGhlIHJlbmFtZSB0YWJsZSAob2xkIHRvIG5ldylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmFtZXM6IHtbb2xkOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBbGwgYXNzaWduZWQgbmFtZXMgKG5ldyB0byBvbGQsIG1heSBiZSBpZGVudGljYWwpXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQ6XG4gICAgICpcbiAgICAgKiAtIE5vIDIgcmVzb3VyY2VzIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFsIGxvZ2ljYWwgSUQsIHVubGVzcyB0aGV5IHdlcmUgdGhlIHNhbWUgdG8gYmVnaW4gd2l0aC5cbiAgICAgKiAtIEFsbCByZW5hbWVzIGhhdmUgYmVlbiB1c2VkIGF0IHRoZSBlbmQgb2YgcmVuYW1pbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXZlcnNlOiB7W2lkOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5hbWluZ1NjaGVtZTogSUFkZHJlc3NpbmdTY2hlbWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWUgYSBsb2dpY2FsIElEIGZyb20gYW4gb2xkIElEIHRvIGEgbmV3IElEXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZUxvZ2ljYWwob2xkSWQ6IHN0cmluZywgbmV3SWQ6IHN0cmluZykge1xuICAgICAgICBpZiAob2xkSWQgaW4gdGhpcy5yZW5hbWVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgcmVuYW1lIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7b2xkSWR9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuYW1lc1tvbGRJZF0gPSBuZXdJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxvZ2ljYWwgSUQgZm9yIHRoZSBnaXZlbiBzdGFjayBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGdldExvZ2ljYWxJZChzdGFja0VsZW1lbnQ6IFN0YWNrRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBzdGFja0VsZW1lbnQuc3RhY2tQYXRoLnNwbGl0KFBBVEhfU0VQKTtcblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRJZCA9IHRoaXMubmFtaW5nU2NoZW1lLmFsbG9jYXRlQWRkcmVzcyhwYXRoKTtcbiAgICAgICAgY29uc3QgZmluYWxJZCA9IHRoaXMuYXBwbHlSZW5hbWUoZ2VuZXJhdGVkSWQpO1xuICAgICAgICB2YWxpZGF0ZUxvZ2ljYWxJZChmaW5hbElkKTtcbiAgICAgICAgcmV0dXJuIGZpbmFsSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3cgYW4gZXJyb3IgaWYgbm90IGFsbCByZW5hbWVzIGhhdmUgYmVlbiB1c2VkXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHRvIGFzc3VyZSB0aGF0IHVzZXJzIGRpZG4ndCBtYWtlIHR5cG9lcyB3aGVuIHJlZ2lzdGVyaW5nIHJlbmFtZXMuXG4gICAgICovXG4gICAgcHVibGljIGFzc2VydEFsbFJlbmFtZXNBcHBsaWVkKCkge1xuICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVuYW1lcykuZm9yRWFjaChrZXlzLmFkZC5iaW5kKGtleXMpKTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJldmVyc2UpLm1hcChuZXdJZCA9PiB7XG4gICAgICAgICAgICBrZXlzLmRlbGV0ZSh0aGlzLnJldmVyc2VbbmV3SWRdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGtleXMuc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdW51c2VkUmVuYW1lcyA9IEFycmF5LmZyb20oa2V5cy52YWx1ZXMoKSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgTG9naWNhbCBJRHMgd2VyZSBhdHRlbXB0ZWQgdG8gYmUgcmVuYW1lZCwgYnV0IG5vdCBmb3VuZDogJHt1bnVzZWRSZW5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHJlbmFtZWQgdmVyc2lvbiBvZiBhbiBJRCwgaWYgYXBwbGljYWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlSZW5hbWUob2xkSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgbmV3SWQgPSBvbGRJZDtcbiAgICAgICAgaWYgKG9sZElkIGluIHRoaXMucmVuYW1lcykge1xuICAgICAgICAgICAgbmV3SWQgPSB0aGlzLnJlbmFtZXNbb2xkSWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhpcyBuZXdJZCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQsIGl0IG11c3QgaGF2ZSBiZWVuIHdpdGggdGhlIHNhbWUgb2xkSWRcbiAgICAgICAgaWYgKG5ld0lkIGluIHRoaXMucmV2ZXJzZSAmJiB0aGlzLnJldmVyc2VbbmV3SWRdICE9PSBvbGRJZCkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUd28gb2JqZWN0cyBoYXZlIGJlZW4gYXNzaWduZWQgdGhlIHNhbWUgTG9naWNhbCBJRDogJyR7dGhpcy5yZXZlcnNlW25ld0lkXX0nIGFuZCAnJHtvbGRJZH0nIGFyZSBub3cgYm90aCBuYW1lZCAnJHtuZXdJZH0nLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV2ZXJzZVtuZXdJZF0gPSBvbGRJZDtcblxuICAgICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxufVxuXG5jb25zdCBWQUxJRF9MT0dJQ0FMSURfUkVHRVggPSAvXltBLVphLXpdW0EtWmEtejAtOV17MSwyNTR9JC87XG5cbi8qKlxuICogVmFsaWRhdGUgbG9naWNhbCBJRCBpcyB2YWxpZCBmb3IgQ2xvdWRGb3JtYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMb2dpY2FsSWQobG9naWNhbElkOiBzdHJpbmcpIHtcbiAgICBpZiAoIVZBTElEX0xPR0lDQUxJRF9SRUdFWC50ZXN0KGxvZ2ljYWxJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2dpY2FsIElEIG11c3QgYWRoZXJlIHRvIHRoZSByZWd1bGFyIGV4cHJlc3Npb246ICR7VkFMSURfTE9HSUNBTElEX1JFR0VYLnRvU3RyaW5nKCl9LCBnb3QgJyR7bG9naWNhbElkfSdgKTtcbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbC1pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2ljYWwtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQ0FBZ0Q7QUFHaEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBWXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQWEsc0JBQXNCO0lBQzFCLGVBQWUsQ0FBQyxpQkFBMkI7UUFDaEQsT0FBTyx1QkFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBSkQsd0RBSUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFVO0lBZ0JyQixZQUE2QixZQUErQjtRQUEvQixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFmNUQ7O1dBRUc7UUFDYyxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUV2RDs7Ozs7OztXQU9HO1FBQ2MsWUFBTyxHQUEyQixFQUFFLENBQUM7SUFHdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQy9DLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxZQUEwQjtRQUM1QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZIO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEtBQWE7UUFDL0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDekIsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCw2RUFBNkU7UUFDN0UsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUMxRCwyQ0FBMkM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLHlCQUF5QixLQUFLLElBQUksQ0FBQyxDQUFDO1NBQy9JO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFNUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE5RUQsZ0NBOEVDO0FBRUQsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUU3RDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsU0FBaUI7SUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQzlIO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ha2VVbmlxdWVJZCB9IGZyb20gJy4uL3V0aWwvdW5pcXVlaWQnO1xuaW1wb3J0IHsgU3RhY2tFbGVtZW50IH0gZnJvbSAnLi9zdGFjayc7XG5cbmNvbnN0IFBBVEhfU0VQID0gJy8nO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY2xhc3NlcyB0aGF0IGltcGxlbWVudGF0aW9uIGxvZ2ljYWwgSUQgYXNzaWdubWVudCBzdHJhdGVnaWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFkZHJlc3NpbmdTY2hlbWUge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBsb2dpY2FsIElEIGZvciB0aGUgZ2l2ZW4gbGlzdCBvZiBDb25zdHJ1Y3QgbmFtZXMgb24gdGhlIHBhdGguXG4gICAqL1xuICBhbGxvY2F0ZUFkZHJlc3MoYWRkcmVzc0NvbXBvbmVudHM6IHN0cmluZ1tdKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBoYXNoZWQgSUQgZm9yIGEgcmVzb3VyY2UuXG4gKlxuICogSW4gb3JkZXIgdG8gbWFrZSBzdXJlIGxvZ2ljYWwgSURzIGFyZSB1bmlxdWUgYW5kIHN0YWJsZSwgd2UgaGFzaCB0aGUgcmVzb3VyY2VcbiAqIGNvbnN0cnVjdCB0cmVlIHBhdGggKGkuZS4gdG9wbGV2ZWwvc2Vjb25kbGV2ZWwvLi4uL215cmVzb3VyY2UpIGFuZCBhZGQgaXQgYXNcbiAqIGEgc3VmZml4IHRvIHRoZSBwYXRoIGNvbXBvbmVudHMgam9pbmVkIHdpdGhvdXQgYSBzZXBhcmF0b3IgKENsb3VkRm9ybWF0aW9uXG4gKiBJRHMgb25seSBhbGxvdyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycykuXG4gKlxuICogVGhlIHJlc3VsdCB3aWxsIGJlOlxuICpcbiAqICAgPHBhdGguam9pbignJyk+PG1kNShwYXRoLmpvaW4oJy8nKT5cbiAqICAgICBcImh1bWFuXCIgICAgICBcImhhc2hcIlxuICpcbiAqIElmIHRoZSBcImh1bWFuXCIgcGFydCBvZiB0aGUgSUQgZXhjZWVkcyAyNDAgY2hhcmFjdGVycywgd2Ugc2ltcGx5IHRyaW0gaXQgc29cbiAqIHRoZSB0b3RhbCBJRCBkb2Vzbid0IGV4Y2VlZCBDbG91ZEZvcm1hdGlvbidzIDI1NSBjaGFyYWN0ZXIgbGltaXQuXG4gKlxuICogV2Ugb25seSB0YWtlIDggY2hhcmFjdGVycyBmcm9tIHRoZSBtZDUgaGFzaCAoMC4wMDAwMDUgY2hhbmNlIG9mIGNvbGxpc2lvbikuXG4gKlxuICogU3BlY2lhbCBjYXNlczpcbiAqXG4gKiAtIElmIHRoZSBwYXRoIG9ubHkgY29udGFpbnMgYSBzaW5nbGUgY29tcG9uZW50IChpLmUuIGl0J3MgYSB0b3AtbGV2ZWxcbiAqICAgcmVzb3VyY2UpLCB3ZSB3b24ndCBhZGQgdGhlIGhhc2ggdG8gaXQuIFRoZSBoYXNoIGlzIG5vdCBuZWVkZWQgZm9yXG4gKiAgIGRpc2FtaWd1YXRpb24gYW5kIGFsc28sIGl0IGFsbG93cyBmb3IgYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBtaWdyYXRpb24gYW5cbiAqICAgZXhpc3RpbmcgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgdG8gYSBDREsgc3RhY2sgd2l0aG91dCBsb2dpY2FsIElEIGNoYW5nZXNcbiAqICAgKG9yIHJlbmFtZXMpLlxuICogLSBGb3IgYWVzdGhldGljIHJlYXNvbnMsIGlmIHRoZSBsYXN0IGNvbXBvbmVudHMgb2YgdGhlIHBhdGggYXJlIHRoZSBzYW1lXG4gKiAgIChpLmUuIGBMMS9MMi9QaXBlbGluZS9QaXBlbGluZWApLCB0aGV5IHdpbGwgYmUgZGUtZHVwbGljYXRlZCB0byBtYWtlIHRoZVxuICogICByZXN1bHRpbmcgaHVtYW4gcG9ydGlvbiBvZiB0aGUgSUQgbW9yZSBwbGVhc2luZzogYEwxTDJQaXBlbGluZTxIQVNIPmBcbiAqICAgaW5zdGVhZCBvZiBgTDFMMlBpcGVsaW5lUGlwZWxpbmU8SEFTSD5gXG4gKiAtIElmIGEgY29tcG9uZW50IGlzIG5hbWVkIFwiRGVmYXVsdFwiIGl0IHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBwYXRoLiBUaGlzXG4gKiAgIGFsbG93cyByZWZhY3RvcmluZyBoaWdoZXIgbGV2ZWwgYWJzdHJhY3Rpb25zIGFyb3VuZCBjb25zdHJ1Y3RzIHdpdGhvdXQgYWZmZWN0aW5nXG4gKiAgIHRoZSBJRHMgb2YgYWxyZWFkeSBkZXBsb3llZCByZXNvdXJjZXMuXG4gKiAtIElmIGEgY29tcG9uZW50IGlzIG5hbWVkIFwiUmVzb3VyY2VcIiBpdCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgdXNlci12aXNpYmxlXG4gKiAgIHBhdGgsIGJ1dCBpbmNsdWRlZCBpbiB0aGUgaGFzaC4gVGhpcyByZWR1Y2VzIHZpc3VhbCBub2lzZSBpbiB0aGUgaHVtYW4gcmVhZGFibGVcbiAqICAgcGFydCBvZiB0aGUgaWRlbnRpZmllci5cbiAqL1xuZXhwb3J0IGNsYXNzIEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUgaW1wbGVtZW50cyBJQWRkcmVzc2luZ1NjaGVtZSB7XG4gIHB1YmxpYyBhbGxvY2F0ZUFkZHJlc3MoYWRkcmVzc0NvbXBvbmVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWFrZVVuaXF1ZUlkKGFkZHJlc3NDb21wb25lbnRzKTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIGxvZ2ljYWwgSURzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIHJlc291cmNlc1xuICpcbiAqIFN1cHBvcnRzIHJlbmFtaW5nIHRoZSBnZW5lcmF0ZWQgSURzLlxuICovXG5leHBvcnQgY2xhc3MgTG9naWNhbElEcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVuYW1lIHRhYmxlIChvbGQgdG8gbmV3KVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZW5hbWVzOiB7W29sZDogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBbGwgYXNzaWduZWQgbmFtZXMgKG5ldyB0byBvbGQsIG1heSBiZSBpZGVudGljYWwpXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdDpcbiAgICpcbiAgICogLSBObyAyIHJlc291cmNlcyBlbmQgdXAgd2l0aCB0aGUgc2FtZSBmaW5hbCBsb2dpY2FsIElELCB1bmxlc3MgdGhleSB3ZXJlIHRoZSBzYW1lIHRvIGJlZ2luIHdpdGguXG4gICAqIC0gQWxsIHJlbmFtZXMgaGF2ZSBiZWVuIHVzZWQgYXQgdGhlIGVuZCBvZiByZW5hbWluZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2ZXJzZToge1tpZDogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbmFtaW5nU2NoZW1lOiBJQWRkcmVzc2luZ1NjaGVtZSkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmFtZSBhIGxvZ2ljYWwgSUQgZnJvbSBhbiBvbGQgSUQgdG8gYSBuZXcgSURcbiAgICovXG4gIHB1YmxpYyByZW5hbWVMb2dpY2FsKG9sZElkOiBzdHJpbmcsIG5ld0lkOiBzdHJpbmcpIHtcbiAgICBpZiAob2xkSWQgaW4gdGhpcy5yZW5hbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgcmVuYW1lIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7b2xkSWR9J2ApO1xuICAgIH1cbiAgICB0aGlzLnJlbmFtZXNbb2xkSWRdID0gbmV3SWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsb2dpY2FsIElEIGZvciB0aGUgZ2l2ZW4gc3RhY2sgZWxlbWVudFxuICAgKi9cbiAgcHVibGljIGdldExvZ2ljYWxJZChzdGFja0VsZW1lbnQ6IFN0YWNrRWxlbWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IHN0YWNrRWxlbWVudC5zdGFja1BhdGguc3BsaXQoUEFUSF9TRVApO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVkSWQgPSB0aGlzLm5hbWluZ1NjaGVtZS5hbGxvY2F0ZUFkZHJlc3MocGF0aCk7XG4gICAgY29uc3QgZmluYWxJZCA9IHRoaXMuYXBwbHlSZW5hbWUoZ2VuZXJhdGVkSWQpO1xuICAgIHZhbGlkYXRlTG9naWNhbElkKGZpbmFsSWQpO1xuICAgIHJldHVybiBmaW5hbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGFuIGVycm9yIGlmIG5vdCBhbGwgcmVuYW1lcyBoYXZlIGJlZW4gdXNlZFxuICAgKlxuICAgKiBUaGlzIGlzIHRvIGFzc3VyZSB0aGF0IHVzZXJzIGRpZG4ndCBtYWtlIHR5cG9lcyB3aGVuIHJlZ2lzdGVyaW5nIHJlbmFtZXMuXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0QWxsUmVuYW1lc0FwcGxpZWQoKSB7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMucmVuYW1lcykuZm9yRWFjaChrZXlzLmFkZC5iaW5kKGtleXMpKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMucmV2ZXJzZSkubWFwKG5ld0lkID0+IHtcbiAgICAgIGtleXMuZGVsZXRlKHRoaXMucmV2ZXJzZVtuZXdJZF0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGtleXMuc2l6ZSAhPT0gMCkge1xuICAgICAgY29uc3QgdW51c2VkUmVuYW1lcyA9IEFycmF5LmZyb20oa2V5cy52YWx1ZXMoKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgTG9naWNhbCBJRHMgd2VyZSBhdHRlbXB0ZWQgdG8gYmUgcmVuYW1lZCwgYnV0IG5vdCBmb3VuZDogJHt1bnVzZWRSZW5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmVuYW1lZCB2ZXJzaW9uIG9mIGFuIElELCBpZiBhcHBsaWNhYmxlXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UmVuYW1lKG9sZElkOiBzdHJpbmcpIHtcbiAgICBsZXQgbmV3SWQgPSBvbGRJZDtcbiAgICBpZiAob2xkSWQgaW4gdGhpcy5yZW5hbWVzKSB7XG4gICAgICBuZXdJZCA9IHRoaXMucmVuYW1lc1tvbGRJZF07XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBuZXdJZCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQsIGl0IG11c3QgaGF2ZSBiZWVuIHdpdGggdGhlIHNhbWUgb2xkSWRcbiAgICBpZiAobmV3SWQgaW4gdGhpcy5yZXZlcnNlICYmIHRoaXMucmV2ZXJzZVtuZXdJZF0gIT09IG9sZElkKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR3byBvYmplY3RzIGhhdmUgYmVlbiBhc3NpZ25lZCB0aGUgc2FtZSBMb2dpY2FsIElEOiAnJHt0aGlzLnJldmVyc2VbbmV3SWRdfScgYW5kICcke29sZElkfScgYXJlIG5vdyBib3RoIG5hbWVkICcke25ld0lkfScuYCk7XG4gICAgfVxuICAgIHRoaXMucmV2ZXJzZVtuZXdJZF0gPSBvbGRJZDtcblxuICAgIHJldHVybiBuZXdJZDtcbiAgfVxufVxuXG5jb25zdCBWQUxJRF9MT0dJQ0FMSURfUkVHRVggPSAvXltBLVphLXpdW0EtWmEtejAtOV17MSwyNTR9JC87XG5cbi8qKlxuICogVmFsaWRhdGUgbG9naWNhbCBJRCBpcyB2YWxpZCBmb3IgQ2xvdWRGb3JtYXRpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMb2dpY2FsSWQobG9naWNhbElkOiBzdHJpbmcpIHtcbiAgaWYgKCFWQUxJRF9MT0dJQ0FMSURfUkVHRVgudGVzdChsb2dpY2FsSWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBMb2dpY2FsIElEIG11c3QgYWRoZXJlIHRvIHRoZSByZWd1bGFyIGV4cHJlc3Npb246ICR7VkFMSURfTE9HSUNBTElEX1JFR0VYLnRvU3RyaW5nKCl9LCBnb3QgJyR7bG9naWNhbElkfSdgKTtcbiAgfVxufVxuIl19

@@ -44,2 +44,2 @@ "use strict";

exports.Mapping = Mapping;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hcHBpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw2QkFBbUM7QUFDbkMsbUNBQXdDO0FBTXhDOztHQUVHO0FBQ0gsTUFBYSxPQUFRLFNBQVEscUJBQWE7SUFHdEMsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxLQUFtQjtRQUM1RCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSGhCLFlBQU8sR0FBNEMsRUFBRyxDQUFDO1FBSTNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFHLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsS0FBVTtRQUNsRCxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ2pDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN6RTtRQUVELE9BQU8sSUFBSSxnQkFBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILFFBQVEsRUFBRTtnQkFDTixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTzthQUNqQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0o7QUF6Q0QsMEJBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRm5GaW5kSW5NYXAgfSBmcm9tICcuL2ZuJztcbmltcG9ydCB7IFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXBwaW5nUHJvcHMge1xuICAgIG1hcHBpbmc/OiB7IFtrMTogc3RyaW5nXTogeyBbazI6IHN0cmluZ106IGFueSB9IH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBwaW5nIGV4dGVuZHMgUmVmZXJlbmNlYWJsZSB7XG4gICAgcHJpdmF0ZSBtYXBwaW5nOiB7IFtrMTogc3RyaW5nXTogeyBbazI6IHN0cmluZ106IGFueSB9IH0gPSB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogTWFwcGluZ1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG4gICAgICAgIHRoaXMubWFwcGluZyA9IHByb3BzLm1hcHBpbmcgfHwgeyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgbWFwIGJhc2VkIG9uIHRoZSB0d28ga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0VmFsdWUoa2V5MTogc3RyaW5nLCBrZXkyOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKCEoa2V5MSBpbiB0aGlzLm1hcHBpbmcpKSB7XG4gICAgICAgICAgICB0aGlzLm1hcHBpbmdba2V5MV0gPSB7IH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcHBpbmdba2V5MV1ba2V5Ml0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byBhIHZhbHVlIGluIHRoZSBtYXAgYmFzZWQgb24gdGhlIHR3byBrZXlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kSW5NYXAoa2V5MTogYW55LCBrZXkyOiBhbnkpIHtcbiAgICAgICAgaWYgKCEoa2V5MSBpbiB0aGlzLm1hcHBpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hcHBpbmcgZG9lc24ndCBjb250YWluIHRvcC1sZXZlbCBrZXkgJyR7a2V5MX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShrZXkyIGluIHRoaXMubWFwcGluZ1trZXkxXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWFwcGluZyBkb2Vzbid0IGNvbnRhaW4gc2Vjb25kLWxldmVsIGtleSAnJHtrZXkyfSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm5GaW5kSW5NYXAodGhpcy5sb2dpY2FsSWQsIGtleTEsIGtleTIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBNYXBwaW5nczoge1xuICAgICAgICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHRoaXMubWFwcGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hcHBpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw2QkFBbUM7QUFDbkMsbUNBQXdDO0FBTXhDOztHQUVHO0FBQ0gsTUFBYSxPQUFRLFNBQVEscUJBQWE7SUFHeEMsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxLQUFtQjtRQUM5RCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSGQsWUFBTyxHQUE0QyxFQUFHLENBQUM7UUFJN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUcsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxLQUFVO1FBQ3BELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUM7U0FDMUI7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxJQUFJLGdCQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPO1lBQ0wsUUFBUSxFQUFFO2dCQUNSLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQy9CO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXpDRCwwQkF5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBGbkZpbmRJbk1hcCB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgUmVmZXJlbmNlYWJsZSB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcHBpbmdQcm9wcyB7XG4gIG1hcHBpbmc/OiB7IFtrMTogc3RyaW5nXTogeyBbazI6IHN0cmluZ106IGFueSB9IH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBwaW5nIGV4dGVuZHMgUmVmZXJlbmNlYWJsZSB7XG4gIHByaXZhdGUgbWFwcGluZzogeyBbazE6IHN0cmluZ106IHsgW2syOiBzdHJpbmddOiBhbnkgfSB9ID0geyB9O1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBNYXBwaW5nUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgIHRoaXMubWFwcGluZyA9IHByb3BzLm1hcHBpbmcgfHwgeyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgbWFwIGJhc2VkIG9uIHRoZSB0d28ga2V5cy5cbiAgICovXG4gIHB1YmxpYyBzZXRWYWx1ZShrZXkxOiBzdHJpbmcsIGtleTI6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICghKGtleTEgaW4gdGhpcy5tYXBwaW5nKSkge1xuICAgICAgdGhpcy5tYXBwaW5nW2tleTFdID0geyB9O1xuICAgIH1cblxuICAgIHRoaXMubWFwcGluZ1trZXkxXVtrZXkyXSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIGEgdmFsdWUgaW4gdGhlIG1hcCBiYXNlZCBvbiB0aGUgdHdvIGtleXMuXG4gICAqL1xuICBwdWJsaWMgZmluZEluTWFwKGtleTE6IGFueSwga2V5MjogYW55KSB7XG4gICAgaWYgKCEoa2V5MSBpbiB0aGlzLm1hcHBpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hcHBpbmcgZG9lc24ndCBjb250YWluIHRvcC1sZXZlbCBrZXkgJyR7a2V5MX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCEoa2V5MiBpbiB0aGlzLm1hcHBpbmdba2V5MV0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hcHBpbmcgZG9lc24ndCBjb250YWluIHNlY29uZC1sZXZlbCBrZXkgJyR7a2V5Mn0nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGbkZpbmRJbk1hcCh0aGlzLmxvZ2ljYWxJZCwga2V5MSwga2V5Mik7XG4gIH1cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBNYXBwaW5nczoge1xuICAgICAgICBbdGhpcy5sb2dpY2FsSWRdOiB0aGlzLm1hcHBpbmdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=

@@ -88,2 +88,2 @@ "use strict";

exports.StringListOutput = StringListOutput;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBRzlDLDZCQUFnRTtBQUNoRSxtQ0FBOEM7QUEyQzlDLE1BQWEsTUFBTyxTQUFRLG9CQUFZO0lBMkJwQzs7OztPQUlHO0lBQ0gsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxRQUFxQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7YUFDNUU7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUI7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM3Qix1RkFBdUY7WUFDdkYsTUFBTSxTQUFTLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLGtCQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQy9ELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkU7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDSjtBQTlFRCx3QkE4RUM7QUFtREQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHFCQUFTO0lBZ0IzQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQTRCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN2QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLElBQUksV0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNsRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksYUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLFlBQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBNUNELDRDQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgRm5JbXBvcnRWYWx1ZSwgRm5Kb2luLCBGblNlbGVjdCwgRm5TcGxpdCB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFByb3BzIHtcbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBvdXRwdXQgdmFsdWUuXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHZhbHVlPzogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgdXNlZCB0byBleHBvcnQgdGhlIHZhbHVlIG9mIHRoaXMgb3V0cHV0IGFjcm9zcyBzdGFja3MuIFRvIGltcG9ydFxuICAgICAqIHRoZSB2YWx1ZSBmcm9tIGFub3RoZXIgc3RhY2ssIHVzZSBgRm5JbXBvcnRWYWx1ZShleHBvcnQpYC4gWW91IGNhbiBjcmVhdGVcbiAgICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYW4gZXhwb3J0IG5hbWVcbiAgICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAgICogY3JlYXRlIGFuIG91dHB1dCB3aXRob3V0IGFuIGV4cG9ydCwgc2V0IGBkaXNhYmxlRXhwb3J0OiB0cnVlYC5cbiAgICAgKi9cbiAgICBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYXV0b21hdGljIGFsbG9jYXRpb24gb2YgYW4gZXhwb3J0IG5hbWUgZm9yIHRoaXMgb3V0cHV0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgYW4gZXhwb3J0IG5hbWUgaXMgZWl0aGVyIGV4cGxpY2l0bHlcbiAgICAgKiBzcGVjaWZpZWQgb3IgYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBvdXRwdXQncyBsb2dpY2FsIElEIGFuZCBzdGFjayBuYW1lLlxuICAgICAqL1xuICAgIGRpc2FibGVFeHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgICAqIHZhbHVlLiBJZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIG91dHB1dCB2YWx1ZSB3aWxsIG5vdFxuICAgICAqIGJlIGluY2x1ZGVkIGluIHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBjb25kaXRpb24/OiBDb25kaXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXQgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGJlIGEgbWF4aW11bSBvZiA0IEsgaW4gbGVuZ3RoLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZT86IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBvdXRwdXQgdG8gYmUgZXhwb3J0ZWQgZm9yIGEgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBsb2dpY2FsIElEIG9mIHRoZSBPdXRwdXQgZWxlbWVudCBpcyB1c2VkIGFzIGl0J3MgZXhwb3J0IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGV4cG9ydD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIGZyb20gdGhlIFwiQ29uZGl0aW9uc1wiIHNlY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBvdXRwdXRcbiAgICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gT3V0cHV0IHZhbHVlIGZvciB0aGlzIHN0YWNrLlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIE91dHB1dCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBPdXRwdXRQcm9wcyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gcHJvcHMuY29uZGl0aW9uO1xuXG4gICAgICAgIGlmIChwcm9wcy5leHBvcnQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kaXNhYmxlRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGBkaXNhYmxlRXhwb3J0YCBhbmQgc3BlY2lmeSBhbiBleHBvcnQgbmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHBvcnQgPSBwcm9wcy5leHBvcnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXByb3BzLmRpc2FibGVFeHBvcnQpIHtcbiAgICAgICAgICAgIC8vIHByZWZpeCBleHBvcnQgbmFtZSB3aXRoIHN0YWNrIG5hbWUgc2luY2UgZXhwb3J0cyBhcmUgZ2xvYmFsIHdpdGhpbiBhY2NvdW50ICsgcmVnaW9uLlxuICAgICAgICAgICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2suZmluZCh0aGlzKS5pZDtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ID0gc3RhY2tOYW1lID8gc3RhY2tOYW1lICsgJzonIDogJyc7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydCArPSB0aGlzLmxvZ2ljYWxJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gRm5JbXBvcnRWYWx1ZSBib3VuZCB0byB0aGlzIGV4cG9ydCBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYWtlSW1wb3J0VmFsdWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBhbiBJbXBvcnRWYWx1ZSB3aXRob3V0IGFuIGV4cG9ydCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGbkltcG9ydFZhbHVlKHRoaXMuZXhwb3J0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgT3V0cHV0czoge1xuICAgICAgICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBFeHBvcnQ6IHRoaXMuZXhwb3J0ICE9IG51bGwgPyB7IE5hbWU6IHRoaXMuZXhwb3J0IH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbi5sb2dpY2FsSWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWYoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRwdXRzIGNhbm5vdCBiZSByZWZlcmVuY2VkJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIExpc3RPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdMaXN0T3V0cHV0UHJvcHMge1xuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGJlIGEgbWF4aW11bSBvZiA0IEsgaW4gbGVuZ3RoLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgcHJpbWl0aXZlcyB0byBleHBvcnRcbiAgICAgKi9cbiAgICByZWFkb25seSB2YWx1ZXM6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlcGFyYXRvciB0byB1c2UgdG8gc2VwYXJhdGUgc3RyaW5naWZpZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIixcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNlcGFyYXRvcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIHVzZWQgdG8gZXhwb3J0IHRoZSB2YWx1ZSBvZiB0aGlzIG91dHB1dCBhY3Jvc3Mgc3RhY2tzLiBUbyBpbXBvcnRcbiAgICAgKiB0aGUgdmFsdWUgZnJvbSBhbm90aGVyIHN0YWNrLCB1c2UgYEZuSW1wb3J0VmFsdWUoZXhwb3J0KWAuIFlvdSBjYW4gY3JlYXRlXG4gICAgICogYW4gaW1wb3J0IHZhbHVlIHRva2VuIGJ5IGNhbGxpbmcgYG91dHB1dC5tYWtlSW1wb3J0VmFsdWUoKWAuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlIGFuIGV4cG9ydCBuYW1lXG4gICAgICogZm9yIG91dHB1dHMgYmFzZWQgb24gdGhlIHN0YWNrIG5hbWUgYW5kIHRoZSBvdXRwdXQncyBsb2dpY2FsIElELiBUb1xuICAgICAqIGNyZWF0ZSBhbiBvdXRwdXQgd2l0aG91dCBhbiBleHBvcnQsIHNldCBgZGlzYWJsZUV4cG9ydDogdHJ1ZWAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhwb3J0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBhbGxvY2F0aW9uIG9mIGFuIGV4cG9ydCBuYW1lIGZvciB0aGlzIG91dHB1dC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlLCB3aGljaCBtZWFucyB0aGF0IGFuIGV4cG9ydCBuYW1lIGlzIGVpdGhlciBleHBsaWNpdGx5XG4gICAgICogc3BlY2lmaWVkIG9yIGFsbG9jYXRlZCBiYXNlZCBvbiB0aGUgb3V0cHV0J3MgbG9naWNhbCBJRCBhbmQgc3RhY2sgbmFtZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBkaXNhYmxlRXhwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIGZyb20gdGhlIFwiQ29uZGl0aW9uc1wiIHNlY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBvdXRwdXRcbiAgICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xufVxuXG4vKipcbiAqIEFuIG91dHB1dCBmb3IgYSBsaXN0IG9mIHN0cmluZ3MuXG4gKlxuICogRXhwb3J0cyBhIGxpc3Qgb2YgVG9rZW5zIHZpYSBhbiBPdXRwdXQgdmFyaWFibGUsIGFuZCByZXR1cm4gYSBsaXN0IG9mIFRva2Vuc1xuICogdGhhdCBzZWxlY3RzIHRoZSBpbXBvcnRlZCB2YWx1ZXMgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0T3V0cHV0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cmluZ2xpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gY29tYmluZSB0aGUgc3RyaW5nIHZhbHVlc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgT3V0cHV0IG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IE91dHB1dDtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTdHJpbmdMaXN0T3V0cHV0UHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICB0aGlzLnNlcGFyYXRvciA9IHByb3BzLnNlcGFyYXRvciB8fCAnLCc7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHJvcHMudmFsdWVzLmxlbmd0aDtcblxuICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBPdXRwdXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBwcm9wcy5jb25kaXRpb24sXG4gICAgICAgICAgICBkaXNhYmxlRXhwb3J0OiBwcm9wcy5kaXNhYmxlRXhwb3J0LFxuICAgICAgICAgICAgZXhwb3J0OiBwcm9wcy5leHBvcnQsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEZuSm9pbih0aGlzLnNlcGFyYXRvciwgcHJvcHMudmFsdWVzKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgaW1wb3J0ZWQgdmFsdWVzIGZvciB0aGlzIE91dHB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBtYWtlSW1wb3J0VmFsdWVzKCk6IFRva2VuW10ge1xuICAgICAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMub3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJldCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJldC5wdXNoKG5ldyBGblNlbGVjdChpLCBuZXcgRm5TcGxpdCh0aGlzLnNlcGFyYXRvciwgY29tYmluZWQpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBRzlDLDZCQUFnRTtBQUNoRSxtQ0FBOEM7QUEyQzlDLE1BQWEsTUFBTyxTQUFRLG9CQUFZO0lBMkJ0Qzs7OztPQUlHO0lBQ0gsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxRQUFxQixFQUFFO1FBQ2xFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO2FBQzFFO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDL0IsdUZBQXVGO1lBQ3ZGLE1BQU0sU0FBUyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLElBQUksa0JBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQy9ELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDakU7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQTlFRCx3QkE4RUM7QUFtREQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHFCQUFTO0lBZ0I3QyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQTRCO1FBQ3ZFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN6QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLElBQUksV0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksYUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLFlBQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBNUNELDRDQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgRm5JbXBvcnRWYWx1ZSwgRm5Kb2luLCBGblNlbGVjdCwgRm5TcGxpdCB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFByb3BzIHtcbiAgLyoqXG4gICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHJldHVybmVkIGJ5IHRoZSBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2tzIGNvbW1hbmQuXG4gICAqIFRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQgY2FuIGluY2x1ZGUgbGl0ZXJhbHMsIHBhcmFtZXRlciByZWZlcmVuY2VzLCBwc2V1ZG8tcGFyYW1ldGVycyxcbiAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgKi9cbiAgdmFsdWU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gZXhwb3J0IHRoZSB2YWx1ZSBvZiB0aGlzIG91dHB1dCBhY3Jvc3Mgc3RhY2tzLiBUbyBpbXBvcnRcbiAgICogdGhlIHZhbHVlIGZyb20gYW5vdGhlciBzdGFjaywgdXNlIGBGbkltcG9ydFZhbHVlKGV4cG9ydClgLiBZb3UgY2FuIGNyZWF0ZVxuICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYXV0b21hdGljYWxseSBhbGxvY2F0ZSBhbiBleHBvcnQgbmFtZVxuICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAqIGNyZWF0ZSBhbiBvdXRwdXQgd2l0aG91dCBhbiBleHBvcnQsIHNldCBgZGlzYWJsZUV4cG9ydDogdHJ1ZWAuXG4gICAqL1xuICBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBhdXRvbWF0aWMgYWxsb2NhdGlvbiBvZiBhbiBleHBvcnQgbmFtZSBmb3IgdGhpcyBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLCB3aGljaCBtZWFucyB0aGF0IGFuIGV4cG9ydCBuYW1lIGlzIGVpdGhlciBleHBsaWNpdGx5XG4gICAqIHNwZWNpZmllZCBvciBhbGxvY2F0ZWQgYmFzZWQgb24gdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQgYW5kIHN0YWNrIG5hbWUuXG4gICAqL1xuICBkaXNhYmxlRXhwb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICogYmUgaW5jbHVkZWQgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgT3V0cHV0IGV4dGVuZHMgU3RhY2tFbGVtZW50IHtcbiAgLyoqXG4gICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSByZXR1cm5lZCBieSB0aGUgYXdzIGNsb3VkZm9ybWF0aW9uIGRlc2NyaWJlLXN0YWNrcyBjb21tYW5kLlxuICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAqIGEgbWFwcGluZyB2YWx1ZSwgb3IgaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIG91dHB1dCB0byBiZSBleHBvcnRlZCBmb3IgYSBjcm9zcy1zdGFjayByZWZlcmVuY2UuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBsb2dpY2FsIElEIG9mIHRoZSBPdXRwdXQgZWxlbWVudCBpcyB1c2VkIGFzIGl0J3MgZXhwb3J0IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhwb3J0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbmRpdGlvbiBmcm9tIHRoZSBcIkNvbmRpdGlvbnNcIiBzZWN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgb3V0cHV0XG4gICAqIHZhbHVlLiBJZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIG91dHB1dCB2YWx1ZSB3aWxsIG5vdFxuICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIE91dHB1dCB2YWx1ZSBmb3IgdGhpcyBzdGFjay5cbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHByb3BzIE91dHB1dCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IE91dHB1dFByb3BzID0ge30pIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMudmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHByb3BzLmNvbmRpdGlvbjtcblxuICAgIGlmIChwcm9wcy5leHBvcnQpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlRXhwb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBgZGlzYWJsZUV4cG9ydGAgYW5kIHNwZWNpZnkgYW4gZXhwb3J0IG5hbWUnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwb3J0ID0gcHJvcHMuZXhwb3J0O1xuICAgIH0gZWxzZSBpZiAoIXByb3BzLmRpc2FibGVFeHBvcnQpIHtcbiAgICAgIC8vIHByZWZpeCBleHBvcnQgbmFtZSB3aXRoIHN0YWNrIG5hbWUgc2luY2UgZXhwb3J0cyBhcmUgZ2xvYmFsIHdpdGhpbiBhY2NvdW50ICsgcmVnaW9uLlxuICAgICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2suZmluZCh0aGlzKS5pZDtcbiAgICAgIHRoaXMuZXhwb3J0ID0gc3RhY2tOYW1lID8gc3RhY2tOYW1lICsgJzonIDogJyc7XG4gICAgICB0aGlzLmV4cG9ydCArPSB0aGlzLmxvZ2ljYWxJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBGbkltcG9ydFZhbHVlIGJvdW5kIHRvIHRoaXMgZXhwb3J0IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgbWFrZUltcG9ydFZhbHVlKCkge1xuICAgIGlmICghdGhpcy5leHBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBhbiBJbXBvcnRWYWx1ZSB3aXRob3V0IGFuIGV4cG9ydCBuYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRm5JbXBvcnRWYWx1ZSh0aGlzLmV4cG9ydCk7XG4gIH1cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBPdXRwdXRzOiB7XG4gICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICBFeHBvcnQ6IHRoaXMuZXhwb3J0ICE9IG51bGwgPyB7IE5hbWU6IHRoaXMuZXhwb3J0IH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgQ29uZGl0aW9uOiB0aGlzLmNvbmRpdGlvbiA/IHRoaXMuY29uZGl0aW9uLmxvZ2ljYWxJZCA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmKCk6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPdXRwdXRzIGNhbm5vdCBiZSByZWZlcmVuY2VkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXN0T3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTGlzdE91dHB1dFByb3BzIHtcbiAgLyoqXG4gICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwcmltaXRpdmVzIHRvIGV4cG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBhbnlbXTtcblxuICAvKipcbiAgICogVGhlIHNlcGFyYXRvciB0byB1c2UgdG8gc2VwYXJhdGUgc3RyaW5naWZpZWQgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiLFwiXG4gICAqL1xuICByZWFkb25seSBzZXBhcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gZXhwb3J0IHRoZSB2YWx1ZSBvZiB0aGlzIG91dHB1dCBhY3Jvc3Mgc3RhY2tzLiBUbyBpbXBvcnRcbiAgICogdGhlIHZhbHVlIGZyb20gYW5vdGhlciBzdGFjaywgdXNlIGBGbkltcG9ydFZhbHVlKGV4cG9ydClgLiBZb3UgY2FuIGNyZWF0ZVxuICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYXV0b21hdGljYWxseSBhbGxvY2F0ZSBhbiBleHBvcnQgbmFtZVxuICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAqIGNyZWF0ZSBhbiBvdXRwdXQgd2l0aG91dCBhbiBleHBvcnQsIHNldCBgZGlzYWJsZUV4cG9ydDogdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBhdXRvbWF0aWMgYWxsb2NhdGlvbiBvZiBhbiBleHBvcnQgbmFtZSBmb3IgdGhpcyBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLCB3aGljaCBtZWFucyB0aGF0IGFuIGV4cG9ydCBuYW1lIGlzIGVpdGhlciBleHBsaWNpdGx5XG4gICAqIHNwZWNpZmllZCBvciBhbGxvY2F0ZWQgYmFzZWQgb24gdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQgYW5kIHN0YWNrIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlRXhwb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICogYmUgaW5jbHVkZWQgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xufVxuXG4vKipcbiAqIEFuIG91dHB1dCBmb3IgYSBsaXN0IG9mIHN0cmluZ3MuXG4gKlxuICogRXhwb3J0cyBhIGxpc3Qgb2YgVG9rZW5zIHZpYSBhbiBPdXRwdXQgdmFyaWFibGUsIGFuZCByZXR1cm4gYSBsaXN0IG9mIFRva2Vuc1xuICogdGhhdCBzZWxlY3RzIHRoZSBpbXBvcnRlZCB2YWx1ZXMgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0T3V0cHV0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nbGlzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gY29tYmluZSB0aGUgc3RyaW5nIHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzZXBhcmF0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE91dHB1dCBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IE91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogU3RyaW5nTGlzdE91dHB1dFByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMuc2VwYXJhdG9yID0gcHJvcHMuc2VwYXJhdG9yIHx8ICcsJztcbiAgICB0aGlzLmxlbmd0aCA9IHByb3BzLnZhbHVlcy5sZW5ndGg7XG5cbiAgICB0aGlzLm91dHB1dCA9IG5ldyBPdXRwdXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY29uZGl0aW9uOiBwcm9wcy5jb25kaXRpb24sXG4gICAgICBkaXNhYmxlRXhwb3J0OiBwcm9wcy5kaXNhYmxlRXhwb3J0LFxuICAgICAgZXhwb3J0OiBwcm9wcy5leHBvcnQsXG4gICAgICB2YWx1ZTogbmV3IEZuSm9pbih0aGlzLnNlcGFyYXRvciwgcHJvcHMudmFsdWVzKVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBpbXBvcnRlZCB2YWx1ZXMgZm9yIHRoaXMgT3V0cHV0XG4gICAqL1xuICBwdWJsaWMgbWFrZUltcG9ydFZhbHVlcygpOiBUb2tlbltdIHtcbiAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMub3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpO1xuXG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQucHVzaChuZXcgRm5TZWxlY3QoaSwgbmV3IEZuU3BsaXQodGhpcy5zZXBhcmF0b3IsIGNvbWJpbmVkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbiJdfQ==

@@ -51,2 +51,2 @@ "use strict";

exports.Parameter = Parameter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQTZDO0FBaUU3Qzs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEscUJBQWE7SUFReEM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDOUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILFVBQVUsRUFBRTtnQkFDUixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO29CQUNoQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO29CQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO29CQUM1QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQjtvQkFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDeEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztvQkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtvQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztvQkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtvQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtpQkFDakM7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFqREQsOEJBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBSZWYsIFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciAoRGF0YVR5cGUpLlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZSB0ZW1wbGF0ZSB0byB1c2UgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkXG4gICAgICogd2hlbiBhIHN0YWNrIGlzIGNyZWF0ZWQuIElmIHlvdSBkZWZpbmUgY29uc3RyYWludHMgZm9yIHRoZSBwYXJhbWV0ZXIsIHlvdSBtdXN0IHNwZWNpZnlcbiAgICAgKiBhIHZhbHVlIHRoYXQgYWRoZXJlcyB0byB0aG9zZSBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0PzogYW55O1xuXG4gICAgLyoqXG4gICAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoZSBwYXR0ZXJucyB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIGFsbG93ZWRQYXR0ZXJuPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiB2YWx1ZXMgYWxsb3dlZCBmb3IgdGhlIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IGV4cGxhaW5zIGEgY29uc3RyYWludCB3aGVuIHRoZSBjb25zdHJhaW50IGlzIHZpb2xhdGVkLlxuICAgICAqIEZvciBleGFtcGxlLCB3aXRob3V0IGEgY29uc3RyYWludCBkZXNjcmlwdGlvbiwgYSBwYXJhbWV0ZXIgdGhhdCBoYXMgYW4gYWxsb3dlZFxuICAgICAqIHBhdHRlcm4gb2YgW0EtWmEtejAtOV0rIGRpc3BsYXlzIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB1c2VyIHNwZWNpZmllc1xuICAgICAqIGFuIGludmFsaWQgdmFsdWU6XG4gICAgICovXG4gICAgY29uc3RyYWludERlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgbnVtZXJpYyB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIGxhcmdlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1heFZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQSBudW1lcmljIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1pblZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBtYXNrIHRoZSBwYXJhbWV0ZXIgdmFsdWUgd2hlbiBhbnlvbmUgbWFrZXMgYSBjYWxsIHRoYXQgZGVzY3JpYmVzIHRoZSBzdGFjay5cbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSB2YWx1ZSB0byBgYHRydWVgYCwgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBtYXNrZWQgd2l0aCBhc3Rlcmlza3MgKGBgKioqKipgYCkuXG4gICAgICovXG4gICAgbm9FY2hvPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgdGhlIG9wdGlvbmFsIFBhcmFtZXRlcnMgc2VjdGlvbiB0byBjdXN0b21pemUgeW91ciB0ZW1wbGF0ZXMuXG4gKiBQYXJhbWV0ZXJzIGVuYWJsZSB5b3UgdG8gaW5wdXQgY3VzdG9tIHZhbHVlcyB0byB5b3VyIHRlbXBsYXRlIGVhY2ggdGltZSB5b3UgY3JlYXRlIG9yXG4gKiB1cGRhdGUgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAgIC8qKlxuICAgICAqIEEgdG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgcHVibGljIHZhbHVlOiBUb2tlbjtcblxuICAgIHByaXZhdGUgcHJvcGVydGllczogUGFyYW1ldGVyUHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcGFyYW1ldGVyIGNvbnN0cnVjdC5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG5hbWUgKGxvZ2ljYWwgSUQpIG9mIHRoZSBwYXJhbWV0ZXIgd2lsbCBkZXJpdmUgZnJvbSBpdCdzIGBjb25hbWVgIGFuZCBsb2NhdGlvblxuICAgICAqIHdpdGhpbiB0aGUgc3RhY2suIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSBwYXJhbWV0ZXIgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGFyYW1ldGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgUmVmKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiB0aGlzLnByb3BlcnRpZXMudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogdGhpcy5wcm9wZXJ0aWVzLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAgIEFsbG93ZWRQYXR0ZXJuOiB0aGlzLnByb3BlcnRpZXMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIEFsbG93ZWRWYWx1ZXM6IHRoaXMucHJvcGVydGllcy5hbGxvd2VkVmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50RGVzY3JpcHRpb246IHRoaXMucHJvcGVydGllcy5jb25zdHJhaW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLnByb3BlcnRpZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIE1heExlbmd0aDogdGhpcy5wcm9wZXJ0aWVzLm1heExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgTWF4VmFsdWU6IHRoaXMucHJvcGVydGllcy5tYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgTWluTGVuZ3RoOiB0aGlzLnByb3BlcnRpZXMubWluTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBNaW5WYWx1ZTogdGhpcy5wcm9wZXJ0aWVzLm1pblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBOb0VjaG86IHRoaXMucHJvcGVydGllcy5ub0VjaG9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzaW5nIHBhcmFtZXRlcnMgYXMgdG9rZW5zIHdpdGhvdXQgdGhlIG5lZWQgdG8gZGVyZWZlcmVuY2UgdGhlbS5cbiAgICAgKiBUaGlzIGltcGxpY2l0bHkgaW1wbGVtZW50cyBUb2tlbiwgdW50aWwgd2UgbWFrZSBpdCBhbiBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQTZDO0FBaUU3Qzs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEscUJBQWE7SUFRMUM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDaEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTtvQkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztvQkFDaEMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYztvQkFDOUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYTtvQkFDNUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUI7b0JBQzVELFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7b0JBQ3hDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVM7b0JBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7b0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVM7b0JBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7b0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07aUJBQy9CO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBakRELDhCQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgUmVmLCBSZWZlcmVuY2VhYmxlIH0gZnJvbSAnLi9zdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciAoRGF0YVR5cGUpLlxuICAgKi9cbiAgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGUgdGVtcGxhdGUgdG8gdXNlIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZFxuICAgKiB3aGVuIGEgc3RhY2sgaXMgY3JlYXRlZC4gSWYgeW91IGRlZmluZSBjb25zdHJhaW50cyBmb3IgdGhlIHBhcmFtZXRlciwgeW91IG11c3Qgc3BlY2lmeVxuICAgKiBhIHZhbHVlIHRoYXQgYWRoZXJlcyB0byB0aG9zZSBjb25zdHJhaW50cy5cbiAgICovXG4gIGRlZmF1bHQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgcGF0dGVybnMgdG8gYWxsb3cgZm9yIFN0cmluZyB0eXBlcy5cbiAgICovXG4gIGFsbG93ZWRQYXR0ZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHZhbHVlcyBhbGxvd2VkIGZvciB0aGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgYWxsb3dlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyB0aGF0IGV4cGxhaW5zIGEgY29uc3RyYWludCB3aGVuIHRoZSBjb25zdHJhaW50IGlzIHZpb2xhdGVkLlxuICAgKiBGb3IgZXhhbXBsZSwgd2l0aG91dCBhIGNvbnN0cmFpbnQgZGVzY3JpcHRpb24sIGEgcGFyYW1ldGVyIHRoYXQgaGFzIGFuIGFsbG93ZWRcbiAgICogcGF0dGVybiBvZiBbQS1aYS16MC05XSsgZGlzcGxheXMgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzXG4gICAqIGFuIGludmFsaWQgdmFsdWU6XG4gICAqL1xuICBjb25zdHJhaW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIG9mIHVwIHRvIDQwMDAgY2hhcmFjdGVycyB0aGF0IGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbnVtZXJpYyB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIGxhcmdlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgKi9cbiAgbWF4VmFsdWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgKi9cbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIG51bWVyaWMgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdCBudW1lcmljIHZhbHVlIHlvdSB3YW50IHRvIGFsbG93IGZvciBOdW1iZXIgdHlwZXMuXG4gICAqL1xuICBtaW5WYWx1ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBtYXNrIHRoZSBwYXJhbWV0ZXIgdmFsdWUgd2hlbiBhbnlvbmUgbWFrZXMgYSBjYWxsIHRoYXQgZGVzY3JpYmVzIHRoZSBzdGFjay5cbiAgICogSWYgeW91IHNldCB0aGUgdmFsdWUgdG8gYGB0cnVlYGAsIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgbWFza2VkIHdpdGggYXN0ZXJpc2tzIChgYCoqKioqYGApLlxuICAgKi9cbiAgbm9FY2hvPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgdGhlIG9wdGlvbmFsIFBhcmFtZXRlcnMgc2VjdGlvbiB0byBjdXN0b21pemUgeW91ciB0ZW1wbGF0ZXMuXG4gKiBQYXJhbWV0ZXJzIGVuYWJsZSB5b3UgdG8gaW5wdXQgY3VzdG9tIHZhbHVlcyB0byB5b3VyIHRlbXBsYXRlIGVhY2ggdGltZSB5b3UgY3JlYXRlIG9yXG4gKiB1cGRhdGUgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAvKipcbiAgICogQSB0b2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyB2YWx1ZTogVG9rZW47XG5cbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBQYXJhbWV0ZXJQcm9wcztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBhcmFtZXRlciBjb25zdHJ1Y3QuXG4gICAqIE5vdGUgdGhhdCB0aGUgbmFtZSAobG9naWNhbCBJRCkgb2YgdGhlIHBhcmFtZXRlciB3aWxsIGRlcml2ZSBmcm9tIGl0J3MgYGNvbmFtZWAgYW5kIGxvY2F0aW9uXG4gICAqIHdpdGhpbiB0aGUgc3RhY2suIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHByb3BzIFRoZSBwYXJhbWV0ZXIgcHJvcGVydGllcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBQYXJhbWV0ZXJQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgdGhpcy52YWx1ZSA9IG5ldyBSZWYodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLnByb3BlcnRpZXMudHlwZSxcbiAgICAgICAgICBEZWZhdWx0OiB0aGlzLnByb3BlcnRpZXMuZGVmYXVsdCxcbiAgICAgICAgICBBbGxvd2VkUGF0dGVybjogdGhpcy5wcm9wZXJ0aWVzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgICAgIEFsbG93ZWRWYWx1ZXM6IHRoaXMucHJvcGVydGllcy5hbGxvd2VkVmFsdWVzLFxuICAgICAgICAgIENvbnN0cmFpbnREZXNjcmlwdGlvbjogdGhpcy5wcm9wZXJ0aWVzLmNvbnN0cmFpbnREZXNjcmlwdGlvbixcbiAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIE1heExlbmd0aDogdGhpcy5wcm9wZXJ0aWVzLm1heExlbmd0aCxcbiAgICAgICAgICBNYXhWYWx1ZTogdGhpcy5wcm9wZXJ0aWVzLm1heFZhbHVlLFxuICAgICAgICAgIE1pbkxlbmd0aDogdGhpcy5wcm9wZXJ0aWVzLm1pbkxlbmd0aCxcbiAgICAgICAgICBNaW5WYWx1ZTogdGhpcy5wcm9wZXJ0aWVzLm1pblZhbHVlLFxuICAgICAgICAgIE5vRWNobzogdGhpcy5wcm9wZXJ0aWVzLm5vRWNob1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdXNpbmcgcGFyYW1ldGVycyBhcyB0b2tlbnMgd2l0aG91dCB0aGUgbmVlZCB0byBkZXJlZmVyZW5jZSB0aGVtLlxuICAgKiBUaGlzIGltcGxpY2l0bHkgaW1wbGVtZW50cyBUb2tlbiwgdW50aWwgd2UgbWFrZSBpdCBhbiBpbnRlcmZhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG4iXX0=

@@ -330,2 +330,2 @@ "use strict";

})(PolicyStatementEffect = exports.PolicyStatementEffect || (exports.PolicyStatementEffect = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBdUM7QUFDdkMscUNBQXNEO0FBRXRELE1BQWEsY0FBZSxTQUFRLGNBQUs7SUFHckM7Ozs7T0FJRztJQUNILFlBQTZCLFlBQWtCO1FBQzNDLEtBQUssRUFBRSxDQUFDO1FBRGlCLGlCQUFZLEdBQVosWUFBWSxDQUFNO1FBUHZDLGVBQVUsR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztJQVNsRCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFHLENBQUM7UUFDckMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUcsQ0FBQztRQUNyQyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZLENBQUMsU0FBMEI7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBeENELHdDQXdDQztB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UUFDbEIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXhNRCwwQ0F3TUM7QUFFRCxJQUFZLHFCQUdYO0FBSEQsV0FBWSxxQkFBcUI7SUFDN0Isd0NBQWUsQ0FBQTtJQUNmLHNDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLHFCQUFxQixHQUFyQiw2QkFBcUIsS0FBckIsNkJBQXFCLFFBR2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBBd3NBY2NvdW50SWQsIEF3c1BhcnRpdGlvbiB9IGZyb20gJy4vcHNldWRvJztcblxuZXhwb3J0IGNsYXNzIFBvbGljeURvY3VtZW50IGV4dGVuZHMgVG9rZW4ge1xuICAgIHByaXZhdGUgc3RhdGVtZW50cyA9IG5ldyBBcnJheTxQb2xpY3lTdGF0ZW1lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGRlZmF1bHREb2N1bWVudCBBbiBJQU0gcG9saWN5IGRvY3VtZW50IHRvIHVzZSBhcyBhbiBpbml0aWFsXG4gICAgICogcG9saWN5LiBBbGwgc3RhdGVtZW50cyBvZiB0aGlzIGRvY3VtZW50IHdpbGwgYmUgY29waWVkIGluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmFzZURvY3VtZW50PzogYW55KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuYmFzZURvY3VtZW50IHx8IHsgfTtcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQgfHwgWyBdO1xuICAgICAgICBkb2MuVmVyc2lvbiA9IGRvYy5WZXJzaW9uIHx8ICcyMDEyLTEwLTE3JztcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQuY29uY2F0KHRoaXMuc3RhdGVtZW50cyk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbHJlYWR5IGFkZGVkIHRvIHRoaXMgcG9saWN5LlxuICAgICAqIENhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZ2VuZXJhdGUgdW5pdXFlIFwic2lkXCJzIHdpdGhpbiB0aGUgcG9saWN5LlxuICAgICAqL1xuICAgIGdldCBzdGF0ZW1lbnRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU3RhdGVtZW50KHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50KTogUG9saWN5RG9jdW1lbnQge1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJQU0gcHJpbmNpcGFsLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9saWN5UHJpbmNpcGFsIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgUHJpbmNpcGFsIGlzIHVzZWQgaW4gYW4gQXNzdW1lUm9sZSBwb2xpY3ksIHRoZSBhY3Rpb24gdG8gdXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhc3N1bWVSb2xlQWN0aW9uOiBzdHJpbmcgPSAnc3RzOkFzc3VtZVJvbGUnO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwb2xpY3kgZnJhZ21lbnQgdGhhdCBpZGVudGlmaWVzIHRoaXMgcHJpbmNpcGFsIGluIGEgUG9saWN5LlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBwb2xpY3lGcmFnbWVudCgpOiBQcmluY2lwYWxQb2xpY3lGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdGhlIGZpZWxkcyBpbiBhIFBvbGljeVN0YXRlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGEgcHJpbmNpcGFsLlxuICpcbiAqIFRoaXMgY29uc2lzdHMgb2YgdGhlIEpTT04gdXNlZCBpbiB0aGUgXCJQcmluY2lwYWxcIiBmaWVsZCwgYW5kIG9wdGlvbmFsbHkgYVxuICogc2V0IG9mIFwiQ29uZGl0aW9uXCJzIHRoYXQgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcmluY2lwYWxKc29uOiBhbnksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9KSB7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJuUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQVdTOiB0aGlzLmFybiB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50UHJpbmNpcGFsIGV4dGVuZHMgQXJuUHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoYGFybjoke25ldyBBd3NQYXJ0aXRpb24oKX06aWFtOjoke2FjY291bnRJZH06cm9vdGApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBJQU0gcHJpbmNpcGFsIHRoYXQgcmVwcmVzZW50cyBhbiBBV1Mgc2VydmljZSAoaS5lLiBzcXMuYW1hem9uYXdzLmNvbSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCh7IFNlcnZpY2U6IHRoaXMuc2VydmljZSB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBwb2xpY3kgcHJpbmljaXBhbCBmb3IgY2Fub25pY2FsVXNlcklkcyAtIHVzZWZ1bCBmb3IgUzMgYnVja2V0IHBvbGljaWVzIHRoYXQgdXNlXG4gKiBPcmlnaW4gQWNjZXNzIGlkZW50aXRpZXMuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hY2N0LWlkZW50aWZpZXJzLmh0bWxcbiAqXG4gKiBhbmRcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcHJpdmF0ZS1jb250ZW50LXJlc3RyaWN0aW5nLWFjY2Vzcy10by1zMy5odG1sXG4gKlxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBDYW5vbmljYWxVc2VyUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY2Fub25pY2FsVXNlcklkOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQ2Fub25pY2FsVXNlcjogdGhpcy5jYW5vbmljYWxVc2VySWQgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmVkZXJhdGVkUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRlZDogYW55LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBhc3N1bWVSb2xlQWN0aW9uOiBzdHJpbmcgPSAnc3RzOkFzc3VtZVJvbGUnKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCh7IEZlZGVyYXRlZDogdGhpcy5mZWRlcmF0ZWQgfSwgdGhpcy5jb25kaXRpb25zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50Um9vdFByaW5jaXBhbCBleHRlbmRzIEFjY291bnRQcmluY2lwYWwge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihuZXcgQXdzQWNjb3VudElkKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHByaW5jaXBhbCByZXByZXNlbnRpbmcgYWxsIGlkZW50aXRpZXMgaW4gYWxsIGFjY291bnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBBbnlvbmUgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSBjb21wYXRpYmlsaXR5IHdpdGggQWNjb3VudFByaW5jaXBhbCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBMYW1iZGEgbGlicmFyeVxuICAgICAqXG4gICAgICogVGhlIExhbWJkYSdzIGFkZFBlcm1pc3Npb24oKSBjYWxsIHdvcmtzIGRpZmZlcmVudGx5IGZyb20gcmVndWxhclxuICAgICAqIHN0YXRlbWVudHMsIGFuZCB3aWxsIHVzZSB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSBpZiBwcmVzZW50XG4gICAgICogKHdoaWNoIGxlYWRzIHRvIHRoZSBjb3JyZWN0IHN0YXRlbWVudCB1bHRpbWF0ZWx5KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkID0gJyonO1xuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCgnKicpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RhdGVtZW50IGluIGFuIElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lTdGF0ZW1lbnQgZXh0ZW5kcyBUb2tlbiB7XG4gICAgcHJpdmF0ZSBhY3Rpb24gPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHByaXZhdGUgcHJpbmNpcGFsID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICBwcml2YXRlIHJlc291cmNlID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICBwcml2YXRlIGNvbmRpdGlvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgfTtcbiAgICBwcml2YXRlIGVmZmVjdD86IFBvbGljeVN0YXRlbWVudEVmZmVjdDtcbiAgICBwcml2YXRlIHNpZD86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVmZmVjdDogUG9saWN5U3RhdGVtZW50RWZmZWN0ID0gUG9saWN5U3RhdGVtZW50RWZmZWN0LkFsbG93KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQWN0aW9uc1xuICAgIC8vXG5cbiAgICBwdWJsaWMgYWRkQWN0aW9uKGFjdGlvbjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5hY3Rpb24ucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQWN0aW9ucyguLi5hY3Rpb25zOiBzdHJpbmdbXSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4gdGhpcy5hZGRBY3Rpb24oYWN0aW9uKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUHJpbmNpcGFsXG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGlzIHBlcm1pc3Npb24gaGFzIGEgXCJQcmluY2lwYWxcIiBzZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzUHJpbmNpcGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmluY2lwYWwgJiYgdGhpcy5wcmluY2lwYWwubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUHJpbmNpcGFsKHByaW5jaXBhbDogUG9saWN5UHJpbmNpcGFsKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBwcmluY2lwYWwucG9saWN5RnJhZ21lbnQoKTtcbiAgICAgICAgdGhpcy5wcmluY2lwYWwucHVzaChmcmFnbWVudC5wcmluY2lwYWxKc29uKTtcbiAgICAgICAgdGhpcy5hZGRDb25kaXRpb25zKGZyYWdtZW50LmNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQXdzUHJpbmNpcGFsKGFybjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBBcm5QcmluY2lwYWwoYXJuKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEF3c0FjY291bnRQcmluY2lwYWwoYWNjb3VudElkOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRQcmluY2lwYWwoYWNjb3VudElkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlcnZpY2VQcmluY2lwYWwoc2VydmljZTogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBTZXJ2aWNlUHJpbmNpcGFsKHNlcnZpY2UpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmVkZXJhdGVkUHJpbmNpcGFsKGZlZGVyYXRlZDogYW55LCBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFByaW5jaXBhbChuZXcgRmVkZXJhdGVkUHJpbmNpcGFsKGZlZGVyYXRlZCwgY29uZGl0aW9ucykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBY2NvdW50Um9vdFByaW5jaXBhbCgpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRSb290UHJpbmNpcGFsKCkpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzb3VyY2VzXG4gICAgLy9cblxuICAgIHB1YmxpYyBhZGRSZXNvdXJjZShhcm46IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMucmVzb3VyY2UucHVzaChhcm4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYGBcIipcImBgIHJlc291cmNlIHRvIHRoaXMgc3RhdGVtZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRBbGxSZXNvdXJjZXMoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmVzb3VyY2UoJyonKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmVzb3VyY2VzKC4uLmFybnM6IHN0cmluZ1tdKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgYXJucy5mb3JFYWNoKHIgPT4gdGhpcy5hZGRSZXNvdXJjZShyKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGlzIHBlcm1pc3Npb24gYXMgYXQgbGVhc3Qgb25lIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2NyaWJlKHNpZDogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5zaWQgPSBzaWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gRWZmZWN0XG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBlcm1pc3Npb24gZWZmZWN0IHRvIGRlbnkgYWNjZXNzIHRvIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3coKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuQWxsb3c7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBlcm1pc3Npb24gZWZmZWN0IHRvIGFsbG93IGFjY2VzcyB0byByZXNvdXJjZXMuXG4gICAgICovXG4gICAgcHVibGljIGRlbnkoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuRGVueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb25kaXRpb25cbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogQWRkIGEgY29uZGl0aW9uIHRvIHRoZSBQb2xpY3lcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ29uZGl0aW9uKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25ba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbXVsdGlwbGUgY29uZGl0aW9ucyB0byB0aGUgUG9saWN5XG4gICAgICovXG4gICAgcHVibGljIGFkZENvbmRpdGlvbnMoY29uZGl0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKGtleSwgY29uZGl0aW9uc1trZXldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNvbmRpdGlvbiB0byB0aGUgUG9saWN5LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBVc2UgYWRkQ29uZGl0aW9uKCkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q29uZGl0aW9uKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29uZGl0aW9uKGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsaW1pdFRvQWNjb3VudChhY2NvdW50SWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbmRpdGlvbignU3RyaW5nRXF1YWxzJywgbmV3IFRva2VuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7ICdzdHM6RXh0ZXJuYWxJZCc6IGFjY291bnRJZCB9O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBTZXJpYWxpemF0aW9uXG4gICAgLy9cblxuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIEFjdGlvbjogX25vcm0odGhpcy5hY3Rpb24pLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiBfbm9ybSh0aGlzLmNvbmRpdGlvbiksXG4gICAgICAgICAgICBFZmZlY3Q6IF9ub3JtKHRoaXMuZWZmZWN0KSxcbiAgICAgICAgICAgIFByaW5jaXBhbDogX25vcm0odGhpcy5wcmluY2lwYWwpLFxuICAgICAgICAgICAgUmVzb3VyY2U6IF9ub3JtKHRoaXMucmVzb3VyY2UpLFxuICAgICAgICAgICAgU2lkOiBfbm9ybSh0aGlzLnNpZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX25vcm0odmFsdWVzOiBhbnkpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZXMpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlcykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3Qge1xuICAgIEFsbG93ID0gJ0FsbG93JyxcbiAgICBEZW55ID0gJ0RlbnknLFxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBdUM7QUFDdkMscUNBQXNEO0FBRXRELE1BQWEsY0FBZSxTQUFRLGNBQUs7SUFHdkM7Ozs7T0FJRztJQUNILFlBQTZCLFlBQWtCO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBRG1CLGlCQUFZLEdBQVosWUFBWSxDQUFNO1FBUHZDLGVBQVUsR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztJQVNsRCxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFHLENBQUM7UUFDckMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQztRQUMxQyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUEwQjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXhDRCx3Q0F3Q0M7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O0lBQ0gsQ0FBQztDQUNGO0FBeE1ELDBDQXdNQztBQUVELElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUMvQix3Q0FBZSxDQUFBO0lBQ2Ysc0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFIVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQXdzQWNjb3VudElkLCBBd3NQYXJ0aXRpb24gfSBmcm9tICcuL3BzZXVkbyc7XG5cbmV4cG9ydCBjbGFzcyBQb2xpY3lEb2N1bWVudCBleHRlbmRzIFRva2VuIHtcbiAgcHJpdmF0ZSBzdGF0ZW1lbnRzID0gbmV3IEFycmF5PFBvbGljeVN0YXRlbWVudD4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBJQU0gcG9saWN5IGRvY3VtZW50LlxuICAgKiBAcGFyYW0gZGVmYXVsdERvY3VtZW50IEFuIElBTSBwb2xpY3kgZG9jdW1lbnQgdG8gdXNlIGFzIGFuIGluaXRpYWxcbiAgICogcG9saWN5LiBBbGwgc3RhdGVtZW50cyBvZiB0aGlzIGRvY3VtZW50IHdpbGwgYmUgY29waWVkIGluLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBiYXNlRG9jdW1lbnQ/OiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRvYyA9IHRoaXMuYmFzZURvY3VtZW50IHx8IHsgfTtcbiAgICBkb2MuU3RhdGVtZW50ID0gZG9jLlN0YXRlbWVudCB8fCBbIF07XG4gICAgZG9jLlZlcnNpb24gPSBkb2MuVmVyc2lvbiB8fCAnMjAxMi0xMC0xNyc7XG4gICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQuY29uY2F0KHRoaXMuc3RhdGVtZW50cyk7XG4gICAgcmV0dXJuIGRvYztcbiAgfVxuXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbHJlYWR5IGFkZGVkIHRvIHRoaXMgcG9saWN5LlxuICAgKiBDYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGdlbmVyYXRlIHVuaXVxZSBcInNpZFwicyB3aXRoaW4gdGhlIHBvbGljeS5cbiAgICovXG4gIGdldCBzdGF0ZW1lbnRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IFBvbGljeURvY3VtZW50IHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJQU0gcHJpbmNpcGFsLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9saWN5UHJpbmNpcGFsIHtcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBQcmluY2lwYWwgaXMgdXNlZCBpbiBhbiBBc3N1bWVSb2xlIHBvbGljeSwgdGhlIGFjdGlvbiB0byB1c2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzdW1lUm9sZUFjdGlvbjogc3RyaW5nID0gJ3N0czpBc3N1bWVSb2xlJztcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwb2xpY3kgZnJhZ21lbnQgdGhhdCBpZGVudGlmaWVzIHRoaXMgcHJpbmNpcGFsIGluIGEgUG9saWN5LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50O1xufVxuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB0aGUgZmllbGRzIGluIGEgUG9saWN5U3RhdGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgYSBwcmluY2lwYWwuXG4gKlxuICogVGhpcyBjb25zaXN0cyBvZiB0aGUgSlNPTiB1c2VkIGluIHRoZSBcIlByaW5jaXBhbFwiIGZpZWxkLCBhbmQgb3B0aW9uYWxseSBhXG4gKiBzZXQgb2YgXCJDb25kaXRpb25cInMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHBvbGljeS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHByaW5jaXBhbEpzb246IGFueSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fSkge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcm5QcmluY2lwYWwgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQVdTOiB0aGlzLmFybiB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWNjb3VudFByaW5jaXBhbCBleHRlbmRzIEFyblByaW5jaXBhbCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBhY2NvdW50SWQ6IGFueSkge1xuICAgIHN1cGVyKGBhcm46JHtuZXcgQXdzUGFydGl0aW9uKCl9OmlhbTo6JHthY2NvdW50SWR9OnJvb3RgKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIElBTSBwcmluY2lwYWwgdGhhdCByZXByZXNlbnRzIGFuIEFXUyBzZXJ2aWNlIChpLmUuIHNxcy5hbWF6b25hd3MuY29tKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZpY2VQcmluY2lwYWwgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBwb2xpY3lGcmFnbWVudCgpOiBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCh7IFNlcnZpY2U6IHRoaXMuc2VydmljZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcG9saWN5IHByaW5pY2lwYWwgZm9yIGNhbm9uaWNhbFVzZXJJZHMgLSB1c2VmdWwgZm9yIFMzIGJ1Y2tldCBwb2xpY2llcyB0aGF0IHVzZVxuICogT3JpZ2luIEFjY2VzcyBpZGVudGl0aWVzLlxuICpcbiAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvYWNjdC1pZGVudGlmaWVycy5odG1sXG4gKlxuICogYW5kXG4gKlxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1yZXN0cmljdGluZy1hY2Nlc3MtdG8tczMuaHRtbFxuICpcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgQ2Fub25pY2FsVXNlclByaW5jaXBhbCBleHRlbmRzIFBvbGljeVByaW5jaXBhbCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjYW5vbmljYWxVc2VySWQ6IGFueSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgIHJldHVybiBuZXcgUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQoeyBDYW5vbmljYWxVc2VyOiB0aGlzLmNhbm9uaWNhbFVzZXJJZCB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmVkZXJhdGVkUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRlZDogYW55LFxuICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXNzdW1lUm9sZUFjdGlvbjogc3RyaW5nID0gJ3N0czpBc3N1bWVSb2xlJykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgIHJldHVybiBuZXcgUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQoeyBGZWRlcmF0ZWQ6IHRoaXMuZmVkZXJhdGVkIH0sIHRoaXMuY29uZGl0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnRSb290UHJpbmNpcGFsIGV4dGVuZHMgQWNjb3VudFByaW5jaXBhbCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBBd3NBY2NvdW50SWQoKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHByaW5jaXBhbCByZXByZXNlbnRpbmcgYWxsIGlkZW50aXRpZXMgaW4gYWxsIGFjY291bnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBBbnlvbmUgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAvKipcbiAgICogSW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgd2l0aCBBY2NvdW50UHJpbmNpcGFsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIExhbWJkYSBsaWJyYXJ5XG4gICAqXG4gICAqIFRoZSBMYW1iZGEncyBhZGRQZXJtaXNzaW9uKCkgY2FsbCB3b3JrcyBkaWZmZXJlbnRseSBmcm9tIHJlZ3VsYXJcbiAgICogc3RhdGVtZW50cywgYW5kIHdpbGwgdXNlIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGlmIHByZXNlbnRcbiAgICogKHdoaWNoIGxlYWRzIHRvIHRoZSBjb3JyZWN0IHN0YXRlbWVudCB1bHRpbWF0ZWx5KS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50SWQgPSAnKic7XG5cbiAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KCcqJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RhdGVtZW50IGluIGFuIElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lTdGF0ZW1lbnQgZXh0ZW5kcyBUb2tlbiB7XG4gIHByaXZhdGUgYWN0aW9uID0gbmV3IEFycmF5PGFueT4oKTtcbiAgcHJpdmF0ZSBwcmluY2lwYWwgPSBuZXcgQXJyYXk8YW55PigpO1xuICBwcml2YXRlIHJlc291cmNlID0gbmV3IEFycmF5PGFueT4oKTtcbiAgcHJpdmF0ZSBjb25kaXRpb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IH07XG4gIHByaXZhdGUgZWZmZWN0PzogUG9saWN5U3RhdGVtZW50RWZmZWN0O1xuICBwcml2YXRlIHNpZD86IGFueTtcblxuICBjb25zdHJ1Y3RvcihlZmZlY3Q6IFBvbGljeVN0YXRlbWVudEVmZmVjdCA9IFBvbGljeVN0YXRlbWVudEVmZmVjdC5BbGxvdykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gIH1cblxuICAvL1xuICAvLyBBY3Rpb25zXG4gIC8vXG5cbiAgcHVibGljIGFkZEFjdGlvbihhY3Rpb246IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5hY3Rpb24ucHVzaChhY3Rpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFkZEFjdGlvbnMoLi4uYWN0aW9uczogc3RyaW5nW10pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4gdGhpcy5hZGRBY3Rpb24oYWN0aW9uKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvL1xuICAvLyBQcmluY2lwYWxcbiAgLy9cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoaXMgcGVybWlzc2lvbiBoYXMgYSBcIlByaW5jaXBhbFwiIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1ByaW5jaXBhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmluY2lwYWwgJiYgdGhpcy5wcmluY2lwYWwubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQcmluY2lwYWwocHJpbmNpcGFsOiBQb2xpY3lQcmluY2lwYWwpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gcHJpbmNpcGFsLnBvbGljeUZyYWdtZW50KCk7XG4gICAgdGhpcy5wcmluY2lwYWwucHVzaChmcmFnbWVudC5wcmluY2lwYWxKc29uKTtcbiAgICB0aGlzLmFkZENvbmRpdGlvbnMoZnJhZ21lbnQuY29uZGl0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWRkQXdzUHJpbmNpcGFsKGFybjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFyblByaW5jaXBhbChhcm4pKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBd3NBY2NvdW50UHJpbmNpcGFsKGFjY291bnRJZDogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRQcmluY2lwYWwoYWNjb3VudElkKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU2VydmljZVByaW5jaXBhbChzZXJ2aWNlOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmFkZFByaW5jaXBhbChuZXcgU2VydmljZVByaW5jaXBhbChzZXJ2aWNlKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRmVkZXJhdGVkUHJpbmNpcGFsKGZlZGVyYXRlZDogYW55LCBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBGZWRlcmF0ZWRQcmluY2lwYWwoZmVkZXJhdGVkLCBjb25kaXRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQWNjb3VudFJvb3RQcmluY2lwYWwoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRSb290UHJpbmNpcGFsKCkpO1xuICB9XG5cbiAgLy9cbiAgLy8gUmVzb3VyY2VzXG4gIC8vXG5cbiAgcHVibGljIGFkZFJlc291cmNlKGFybjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICB0aGlzLnJlc291cmNlLnB1c2goYXJuKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgYGBcIipcImBgIHJlc291cmNlIHRvIHRoaXMgc3RhdGVtZW50LlxuICAgKi9cbiAgcHVibGljIGFkZEFsbFJlc291cmNlcygpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmFkZFJlc291cmNlKCcqJyk7XG4gIH1cblxuICBwdWJsaWMgYWRkUmVzb3VyY2VzKC4uLmFybnM6IHN0cmluZ1tdKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICBhcm5zLmZvckVhY2gociA9PiB0aGlzLmFkZFJlc291cmNlKHIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBwZXJtaXNzaW9uIGFzIGF0IGxlYXN0IG9uZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmIHRoaXMucmVzb3VyY2UubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBkZXNjcmliZShzaWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5zaWQgPSBzaWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvL1xuICAvLyBFZmZlY3RcbiAgLy9cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGVybWlzc2lvbiBlZmZlY3QgdG8gZGVueSBhY2Nlc3MgdG8gcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIGFsbG93KCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuQWxsb3c7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGVybWlzc2lvbiBlZmZlY3QgdG8gYWxsb3cgYWNjZXNzIHRvIHJlc291cmNlcy5cbiAgICovXG4gIHB1YmxpYyBkZW55KCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuRGVueTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vXG4gIC8vIENvbmRpdGlvblxuICAvL1xuXG4gIC8qKlxuICAgKiBBZGQgYSBjb25kaXRpb24gdG8gdGhlIFBvbGljeVxuICAgKi9cbiAgcHVibGljIGFkZENvbmRpdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgdGhpcy5jb25kaXRpb25ba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBjb25kaXRpb25zIHRvIHRoZSBQb2xpY3lcbiAgICovXG4gIHB1YmxpYyBhZGRDb25kaXRpb25zKGNvbmRpdGlvbnM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5tYXAoa2V5ID0+IHtcbiAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKGtleSwgY29uZGl0aW9uc1trZXldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjb25kaXRpb24gdG8gdGhlIFBvbGljeS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBVc2UgYWRkQ29uZGl0aW9uKCkgaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBzZXRDb25kaXRpb24oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmFkZENvbmRpdGlvbihrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBsaW1pdFRvQWNjb3VudChhY2NvdW50SWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29uZGl0aW9uKCdTdHJpbmdFcXVhbHMnLCBuZXcgVG9rZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHsgJ3N0czpFeHRlcm5hbElkJzogYWNjb3VudElkIH07XG4gICAgfSkpO1xuICB9XG5cbiAgLy9cbiAgLy8gU2VyaWFsaXphdGlvblxuICAvL1xuXG4gIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEFjdGlvbjogX25vcm0odGhpcy5hY3Rpb24pLFxuICAgICAgQ29uZGl0aW9uOiBfbm9ybSh0aGlzLmNvbmRpdGlvbiksXG4gICAgICBFZmZlY3Q6IF9ub3JtKHRoaXMuZWZmZWN0KSxcbiAgICAgIFByaW5jaXBhbDogX25vcm0odGhpcy5wcmluY2lwYWwpLFxuICAgICAgUmVzb3VyY2U6IF9ub3JtKHRoaXMucmVzb3VyY2UpLFxuICAgICAgU2lkOiBfbm9ybSh0aGlzLnNpZCksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9ub3JtKHZhbHVlczogYW55KSB7XG5cbiAgICAgIGlmICh0eXBlb2YodmFsdWVzKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YodmFsdWVzKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZW51bSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3Qge1xuICBBbGxvdyA9ICdBbGxvdycsXG4gIERlbnkgPSAnRGVueScsXG59XG4iXX0=

@@ -64,2 +64,2 @@ "use strict";

exports.AwsStackName = AwsStackName;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldWRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHNldWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQTZEO0FBRTdELE1BQWEsZUFBZ0IsU0FBUSwwQ0FBbUI7SUFDcEQsWUFBWSxJQUFZO1FBQ3BCLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFKRCwwQ0FJQztBQUVELE1BQWEsWUFBYSxTQUFRLGVBQWU7SUFDN0M7UUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0o7QUFKRCxvQ0FJQztBQUVELE1BQWEsZUFBZ0IsU0FBUSxlQUFlO0lBQ2hEO1FBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBSkQsMENBSUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxlQUFlO0lBQzdDO1FBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNKO0FBSkQsb0NBSUM7QUFFRCxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUFDcEQ7UUFDSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0o7QUFKRCxrREFJQztBQUVELE1BQWEsVUFBVyxTQUFRLGVBQWU7SUFDM0M7UUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBSkQsZ0NBSUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxlQUFlO0lBQzdDO1FBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNKO0FBSkQsb0NBSUM7QUFFRCxNQUFhLFNBQVUsU0FBUSxlQUFlO0lBQzFDO1FBQ0ksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDSjtBQUpELDhCQUlDO0FBRUQsTUFBYSxVQUFXLFNBQVEsZUFBZTtJQUMzQztRQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUFKRCxnQ0FJQztBQUVELE1BQWEsWUFBYSxTQUFRLGVBQWU7SUFDN0M7UUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0o7QUFKRCxvQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4gfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uLXRva2VuJztcblxuZXhwb3J0IGNsYXNzIFBzZXVkb1BhcmFtZXRlciBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih7IFJlZjogbmFtZSB9LCBuYW1lKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NBY2NvdW50SWQgZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQVdTOjpBY2NvdW50SWQnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NEb21haW5TdWZmaXggZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQVdTOjpEb21haW5TdWZmaXgnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NVUkxTdWZmaXggZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQVdTOjpVUkxTdWZmaXgnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NOb3RpZmljYXRpb25BUk5zIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0FXUzo6Tm90aWZpY2F0aW9uQVJOcycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF3c05vVmFsdWUgZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQVdTOjpOb1ZhbHVlJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzUGFydGl0aW9uIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0FXUzo6UGFydGl0aW9uJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzUmVnaW9uIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0FXUzo6UmVnaW9uJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzU3RhY2tJZCBleHRlbmRzIFBzZXVkb1BhcmFtZXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdBV1M6OlN0YWNrSWQnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NTdGFja05hbWUgZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQVdTOjpTdGFja05hbWUnKTtcbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldWRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHNldWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQTZEO0FBRTdELE1BQWEsZUFBZ0IsU0FBUSwwQ0FBbUI7SUFDdEQsWUFBWSxJQUFZO1FBQ3RCLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFKRCwwQ0FJQztBQUVELE1BQWEsWUFBYSxTQUFRLGVBQWU7SUFDL0M7UUFDRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFKRCxvQ0FJQztBQUVELE1BQWEsZUFBZ0IsU0FBUSxlQUFlO0lBQ2xEO1FBQ0UsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBSkQsMENBSUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxlQUFlO0lBQy9DO1FBQ0UsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBSkQsb0NBSUM7QUFFRCxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUFDdEQ7UUFDRSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFKRCxrREFJQztBQUVELE1BQWEsVUFBVyxTQUFRLGVBQWU7SUFDN0M7UUFDRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBSkQsZ0NBSUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxlQUFlO0lBQy9DO1FBQ0UsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBSkQsb0NBSUM7QUFFRCxNQUFhLFNBQVUsU0FBUSxlQUFlO0lBQzVDO1FBQ0UsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUpELDhCQUlDO0FBRUQsTUFBYSxVQUFXLFNBQVEsZUFBZTtJQUM3QztRQUNFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFKRCxnQ0FJQztBQUVELE1BQWEsWUFBYSxTQUFRLGVBQWU7SUFDL0M7UUFDRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFKRCxvQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4gfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uLXRva2VuJztcblxuZXhwb3J0IGNsYXNzIFBzZXVkb1BhcmFtZXRlciBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcih7IFJlZjogbmFtZSB9LCBuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzQWNjb3VudElkIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FXUzo6QWNjb3VudElkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF3c0RvbWFpblN1ZmZpeCBleHRlbmRzIFBzZXVkb1BhcmFtZXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBV1M6OkRvbWFpblN1ZmZpeCcpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NVUkxTdWZmaXggZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQVdTOjpVUkxTdWZmaXgnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzTm90aWZpY2F0aW9uQVJOcyBleHRlbmRzIFBzZXVkb1BhcmFtZXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBV1M6Ok5vdGlmaWNhdGlvbkFSTnMnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzTm9WYWx1ZSBleHRlbmRzIFBzZXVkb1BhcmFtZXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBV1M6Ok5vVmFsdWUnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXdzUGFydGl0aW9uIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FXUzo6UGFydGl0aW9uJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF3c1JlZ2lvbiBleHRlbmRzIFBzZXVkb1BhcmFtZXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBV1M6OlJlZ2lvbicpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NTdGFja0lkIGV4dGVuZHMgUHNldWRvUGFyYW1ldGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FXUzo6U3RhY2tJZCcpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NTdGFja05hbWUgZXh0ZW5kcyBQc2V1ZG9QYXJhbWV0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQVdTOjpTdGFja05hbWUnKTtcbiAgfVxufVxuIl19

@@ -33,2 +33,2 @@ "use strict";

exports.applyRemovalPolicy = applyRemovalPolicy;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZhbC1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZW1vdmFsLXBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVEQUFtRDtBQUVuRCxJQUFZLGFBa0JYO0FBbEJELFdBQVksYUFBYTtJQUNyQjs7O09BR0c7SUFDSCx1REFBVyxDQUFBO0lBRVg7OztPQUdHO0lBQ0gscURBQU0sQ0FBQTtJQUVOOzs7T0FHRztJQUNILHFEQUFNLENBQUE7QUFDVixDQUFDLEVBbEJXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBa0J4QjtBQUVELFNBQWdCLGtCQUFrQixDQUFDLFFBQWtCLEVBQUUsYUFBd0M7SUFDM0YsSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUNsRixRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxnQ0FBYyxDQUFDLE1BQU0sQ0FBQztLQUMzRDtJQUVELHlFQUF5RTtJQUN6RSwrQ0FBK0M7SUFDL0MsSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUN4QyxRQUFRLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ25EO0FBQ0wsQ0FBQztBQVZELGdEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlJztcbmltcG9ydCB7IERlbGV0aW9uUG9saWN5IH0gZnJvbSAnLi9yZXNvdXJjZS1wb2xpY3knO1xuXG5leHBvcnQgZW51bSBSZW1vdmFsUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHJlbW92YWwgcG9saWN5IGZvciBtb3N0IHJlc291cmNlcy4gSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXBwLCBpdCB3aWxsIGJlIHBoeXNpY2FsbHkgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIERlc3Ryb3kgPSAwLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyB1c2VzIHRoZSAnUmV0YWluJyBEZWxldGlvblBvbGljeSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgcmVzb3VyY2UgdG8gYmUgcmV0YWluZWRcbiAgICAgKiBpbiB0aGUgYWNjb3VudCwgYnV0IG9ycGhhbmVkIGZyb20gdGhlIHN0YWNrLlxuICAgICAqL1xuICAgIE9ycGhhbixcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBhcHBseSB0aGUgJ1JldGFpbicgRGVsZXRpb25Qb2xpY3kgYW5kIGFsc28gYWRkIG1ldGFkYXRhIGZvciB0aGUgdG9vbGtpdFxuICAgICAqIHRvIGFwcGx5IGEgQ2xvdWRGb3JtYXRpb24gc3RhY2sgcG9saWN5IHdoaWNoIGZvcmJpZHMgdGhlIGRlbGV0aW9uIG9mIHJlc291cmNlLlxuICAgICAqL1xuICAgIEZvcmJpZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSZW1vdmFsUG9saWN5KHJlc291cmNlOiBSZXNvdXJjZSwgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChyZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5Lk9ycGhhbiB8fCByZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkZvcmJpZCkge1xuICAgICAgICByZXNvdXJjZS5vcHRpb25zLmRlbGV0aW9uUG9saWN5ID0gRGVsZXRpb25Qb2xpY3kuUmV0YWluO1xuICAgIH1cblxuICAgIC8vIGF0dGFjaCBtZXRhZGF0YSB0aGF0IHdpbGwgdGVsbCB0aGUgdG9vbGtpdCB0byBwcm90ZWN0IHRoaXMgcmVzb3VyY2UgYnlcbiAgICAvLyBhcHBseWluZyBhbiBhcHByb3ByaWF0ZSBzdGFjayB1cGRhdGUgcG9saWN5LlxuICAgIGlmIChyZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkZvcmJpZCkge1xuICAgICAgICByZXNvdXJjZS5hZGRNZXRhZGF0YSgnYXdzOmNkazpwcm90ZWN0ZWQnLCB0cnVlKTtcbiAgICB9XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZhbC1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZW1vdmFsLXBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVEQUFtRDtBQUVuRCxJQUFZLGFBa0JYO0FBbEJELFdBQVksYUFBYTtJQUN2Qjs7O09BR0c7SUFDSCx1REFBVyxDQUFBO0lBRVg7OztPQUdHO0lBQ0gscURBQU0sQ0FBQTtJQUVOOzs7T0FHRztJQUNILHFEQUFNLENBQUE7QUFDUixDQUFDLEVBbEJXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBa0J4QjtBQUVELFNBQWdCLGtCQUFrQixDQUFDLFFBQWtCLEVBQUUsYUFBd0M7SUFDN0YsSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUNwRixRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxnQ0FBYyxDQUFDLE1BQU0sQ0FBQztLQUN6RDtJQUVELHlFQUF5RTtJQUN6RSwrQ0FBK0M7SUFDL0MsSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUMxQyxRQUFRLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQztBQVZELGdEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlJztcbmltcG9ydCB7IERlbGV0aW9uUG9saWN5IH0gZnJvbSAnLi9yZXNvdXJjZS1wb2xpY3knO1xuXG5leHBvcnQgZW51bSBSZW1vdmFsUG9saWN5IHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgcmVtb3ZhbCBwb2xpY3kgZm9yIG1vc3QgcmVzb3VyY2VzLiBJdCBtZWFucyB0aGF0IHdoZW4gdGhlIHJlc291cmNlXG4gICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXBwLCBpdCB3aWxsIGJlIHBoeXNpY2FsbHkgZGVzdHJveWVkLlxuICAgKi9cbiAgRGVzdHJveSA9IDAsXG5cbiAgLyoqXG4gICAqIFRoaXMgdXNlcyB0aGUgJ1JldGFpbicgRGVsZXRpb25Qb2xpY3ksIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHJlc291cmNlIHRvIGJlIHJldGFpbmVkXG4gICAqIGluIHRoZSBhY2NvdW50LCBidXQgb3JwaGFuZWQgZnJvbSB0aGUgc3RhY2suXG4gICAqL1xuICBPcnBoYW4sXG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBhcHBseSB0aGUgJ1JldGFpbicgRGVsZXRpb25Qb2xpY3kgYW5kIGFsc28gYWRkIG1ldGFkYXRhIGZvciB0aGUgdG9vbGtpdFxuICAgKiB0byBhcHBseSBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHBvbGljeSB3aGljaCBmb3JiaWRzIHRoZSBkZWxldGlvbiBvZiByZXNvdXJjZS5cbiAgICovXG4gIEZvcmJpZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSZW1vdmFsUG9saWN5KHJlc291cmNlOiBSZXNvdXJjZSwgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSB8IHVuZGVmaW5lZCkge1xuICBpZiAocmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5PcnBoYW4gfHwgcmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5Gb3JiaWQpIHtcbiAgICByZXNvdXJjZS5vcHRpb25zLmRlbGV0aW9uUG9saWN5ID0gRGVsZXRpb25Qb2xpY3kuUmV0YWluO1xuICB9XG5cbiAgLy8gYXR0YWNoIG1ldGFkYXRhIHRoYXQgd2lsbCB0ZWxsIHRoZSB0b29sa2l0IHRvIHByb3RlY3QgdGhpcyByZXNvdXJjZSBieVxuICAvLyBhcHBseWluZyBhbiBhcHByb3ByaWF0ZSBzdGFjayB1cGRhdGUgcG9saWN5LlxuICBpZiAocmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5Gb3JiaWQpIHtcbiAgICByZXNvdXJjZS5hZGRNZXRhZGF0YSgnYXdzOmNkazpwcm90ZWN0ZWQnLCB0cnVlKTtcbiAgfVxufVxuIl19

@@ -33,2 +33,2 @@ "use strict";

})(DeletionPolicy = exports.DeletionPolicy || (exports.DeletionPolicy = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0VBOzs7OztHQUtHO0FBQ0gsSUFBWSxjQXdCWDtBQXhCRCxXQUFZLGNBQWM7SUFDdEI7Ozs7T0FJRztJQUNILG1DQUFpQixDQUFBO0lBRWpCOzs7OztPQUtHO0lBQ0gsbUNBQWlCLENBQUE7SUFFakI7Ozs7OztPQU1HO0lBQ0gsdUNBQXFCLENBQUE7QUFDekIsQ0FBQyxFQXhCVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQXdCekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFzc29jaWF0ZSB0aGUgQ3JlYXRpb25Qb2xpY3kgYXR0cmlidXRlIHdpdGggYSByZXNvdXJjZSB0byBwcmV2ZW50IGl0cyBzdGF0dXMgZnJvbSByZWFjaGluZyBjcmVhdGUgY29tcGxldGUgdW50aWxcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZWNlaXZlcyBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc3VjY2VzcyBzaWduYWxzIG9yIHRoZSB0aW1lb3V0IHBlcmlvZCBpcyBleGNlZWRlZC4gVG8gc2lnbmFsIGFcbiAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gKiB0byB0aGUgc3RhY2sgZXZlbnRzIHNvIHRoYXQgeW91IHRyYWNrIHRoZSBudW1iZXIgb2Ygc2lnbmFscyBzZW50LlxuICpcbiAqIFRoZSBjcmVhdGlvbiBwb2xpY3kgaXMgaW52b2tlZCBvbmx5IHdoZW4gQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2UuIEN1cnJlbnRseSwgdGhlIG9ubHlcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IGNyZWF0aW9uIHBvbGljaWVzIGFyZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwLCBBV1M6OkVDMjo6SW5zdGFuY2UsXG4gKiBhbmQgQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvbi5cbiAqXG4gKiBVc2UgdGhlIENyZWF0aW9uUG9saWN5IGF0dHJpYnV0ZSB3aGVuIHlvdSB3YW50IHRvIHdhaXQgb24gcmVzb3VyY2UgY29uZmlndXJhdGlvbiBhY3Rpb25zIGJlZm9yZSBzdGFjayBjcmVhdGlvbiBwcm9jZWVkcy5cbiAqIEZvciBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCBhbmQgY29uZmlndXJlIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBvbiBhbiBFQzIgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRob3NlIGFwcGxpY2F0aW9ucyB0b1xuICogYmUgcnVubmluZyBiZWZvcmUgcHJvY2VlZGluZy4gSW4gc3VjaCBjYXNlcywgeW91IGNhbiBhZGQgYSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgdG8gdGhlIGluc3RhbmNlLCBhbmQgdGhlbiBzZW5kIGEgc3VjY2Vzc1xuICogc2lnbmFsIHRvIHRoZSBpbnN0YW5jZSBhZnRlciB0aGUgYXBwbGljYXRpb25zIGFyZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuIEZvciBhIGRldGFpbGVkIGV4YW1wbGUsIHNlZSBEZXBsb3lpbmcgQXBwbGljYXRpb25zXG4gKiBvbiBBbWF6b24gRUMyIHdpdGggQVdTIENsb3VkRm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBGb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwIHJlcGxhY2VtZW50IHVwZGF0ZSwgc3BlY2lmaWVzIGhvdyBtYW55IGluc3RhbmNlcyBtdXN0IHNpZ25hbCBzdWNjZXNzIGZvciB0aGVcbiAgICAgKiB1cGRhdGUgdG8gc3VjY2VlZC5cbiAgICAgKi9cbiAgICBhdXRvU2NhbGluZ0NyZWF0aW9uUG9saWN5PzogQXV0b1NjYWxpbmdDcmVhdGlvblBvbGljeTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2UsIGNvbmZpZ3VyZXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBzdWNjZXNzIHNpZ25hbHMgYW5kXG4gICAgICogdGhlIGxlbmd0aCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHdhaXRzIGZvciB0aG9zZSBzaWduYWxzLlxuICAgICAqL1xuICAgIHJlc291cmNlU2lnbmFsPzogUmVzb3VyY2VTaWduYWw7XG59XG5cbi8qKlxuICogRm9yIGFuIEF1dG8gU2NhbGluZyBncm91cCByZXBsYWNlbWVudCB1cGRhdGUsIHNwZWNpZmllcyBob3cgbWFueSBpbnN0YW5jZXMgbXVzdCBzaWduYWwgc3VjY2VzcyBmb3IgdGhlXG4gKiB1cGRhdGUgdG8gc3VjY2VlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU2NhbGluZ0NyZWF0aW9uUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyByZXBsYWNlbWVudCB1cGRhdGUgdGhhdCBtdXN0IHNpZ25hbCBzdWNjZXNzIGZvciB0aGVcbiAgICAgKiB1cGRhdGUgdG8gc3VjY2VlZC4gWW91IGNhbiBzcGVjaWZ5IGEgdmFsdWUgZnJvbSAwIHRvIDEwMC4gQVdTIENsb3VkRm9ybWF0aW9uIHJvdW5kcyB0byB0aGUgbmVhcmVzdCB0ZW50aCBvZiBhIHBlcmNlbnQuXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSB1cGRhdGUgZml2ZSBpbnN0YW5jZXMgd2l0aCBhIG1pbmltdW0gc3VjY2Vzc2Z1bCBwZXJjZW50YWdlIG9mIDUwLCB0aHJlZSBpbnN0YW5jZXMgbXVzdCBzaWduYWwgc3VjY2Vzcy5cbiAgICAgKiBJZiBhbiBpbnN0YW5jZSBkb2Vzbid0IHNlbmQgYSBzaWduYWwgd2l0aGluIHRoZSB0aW1lIHNwZWNpZmllZCBieSB0aGUgVGltZW91dCBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGFzc3VtZXMgdGhhdCB0aGVcbiAgICAgKiBpbnN0YW5jZSB3YXNuJ3QgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBtaW5TdWNjZXNzZnVsSW5zdGFuY2VzUGVyY2VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSBhc3NvY2lhdGVkIHJlc291cmNlLCBjb25maWd1cmVzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgc3VjY2VzcyBzaWduYWxzIGFuZFxuICogdGhlIGxlbmd0aCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHdhaXRzIGZvciB0aG9zZSBzaWduYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlU2lnbmFsIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3VjY2VzcyBzaWduYWxzIEFXUyBDbG91ZEZvcm1hdGlvbiBtdXN0IHJlY2VpdmUgYmVmb3JlIGl0IHNldHMgdGhlIHJlc291cmNlIHN0YXR1cyBhcyBDUkVBVEVfQ09NUExFVEUuXG4gICAgICogSWYgdGhlIHJlc291cmNlIHJlY2VpdmVzIGEgZmFpbHVyZSBzaWduYWwgb3IgZG9lc24ndCByZWNlaXZlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNpZ25hbHMgYmVmb3JlIHRoZSB0aW1lb3V0IHBlcmlvZFxuICAgICAqIGV4cGlyZXMsIHRoZSByZXNvdXJjZSBjcmVhdGlvbiBmYWlscyBhbmQgQVdTIENsb3VkRm9ybWF0aW9uIHJvbGxzIHRoZSBzdGFjayBiYWNrLlxuICAgICAqL1xuICAgIGNvdW50PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxlbmd0aCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHdhaXRzIGZvciB0aGUgbnVtYmVyIG9mIHNpZ25hbHMgdGhhdCB3YXMgc3BlY2lmaWVkIGluIHRoZSBDb3VudCBwcm9wZXJ0eS5cbiAgICAgKiBUaGUgdGltZW91dCBwZXJpb2Qgc3RhcnRzIGFmdGVyIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFydHMgY3JlYXRpbmcgdGhlIHJlc291cmNlLCBhbmQgdGhlIHRpbWVvdXQgZXhwaXJlcyBubyBzb29uZXJcbiAgICAgKiB0aGFuIHRoZSB0aW1lIHlvdSBzcGVjaWZ5IGJ1dCBjYW4gb2NjdXIgc2hvcnRseSB0aGVyZWFmdGVyLiBUaGUgbWF4aW11bSB0aW1lIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGlzIDEyIGhvdXJzLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2l0aCB0aGUgRGVsZXRpb25Qb2xpY3kgYXR0cmlidXRlIHlvdSBjYW4gcHJlc2VydmUgb3IgKGluIHNvbWUgY2FzZXMpIGJhY2t1cCBhIHJlc291cmNlIHdoZW4gaXRzIHN0YWNrIGlzIGRlbGV0ZWQuXG4gKiBZb3Ugc3BlY2lmeSBhIERlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IHlvdSB3YW50IHRvIGNvbnRyb2wuIElmIGEgcmVzb3VyY2UgaGFzIG5vIERlbGV0aW9uUG9saWN5XG4gKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICogdGhhdCBsZWFkIHRvIHJlc291cmNlcyBiZWluZyByZW1vdmVkLlxuICovXG5leHBvcnQgZW51bSBEZWxldGlvblBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgdGhlIHJlc291cmNlIGFuZCBhbGwgaXRzIGNvbnRlbnQgaWYgYXBwbGljYWJsZSBkdXJpbmcgc3RhY2sgZGVsZXRpb24uIFlvdSBjYW4gYWRkIHRoaXNcbiAgICAgKiBkZWxldGlvbiBwb2xpY3kgdG8gYW55IHJlc291cmNlIHR5cGUuIEJ5IGRlZmF1bHQsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IGEgRGVsZXRpb25Qb2xpY3ksIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzXG4gICAgICogeW91ciByZXNvdXJjZXMuIEhvd2V2ZXIsIGJlIGF3YXJlIG9mIHRoZSBmb2xsb3dpbmcgY29uc2lkZXJhdGlvbnM6XG4gICAgICovXG4gICAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgICAvKipcbiAgICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24ga2VlcHMgdGhlIHJlc291cmNlIHdpdGhvdXQgZGVsZXRpbmcgdGhlIHJlc291cmNlIG9yIGl0cyBjb250ZW50cyB3aGVuIGl0cyBzdGFjayBpcyBkZWxldGVkLlxuICAgICAqIFlvdSBjYW4gYWRkIHRoaXMgZGVsZXRpb24gcG9saWN5IHRvIGFueSByZXNvdXJjZSB0eXBlLiBOb3RlIHRoYXQgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gY29tcGxldGVzIHRoZSBzdGFjayBkZWxldGlvbixcbiAgICAgKiB0aGUgc3RhY2sgd2lsbCBiZSBpbiBEZWxldGVfQ29tcGxldGUgc3RhdGU7IGhvd2V2ZXIsIHJlc291cmNlcyB0aGF0IGFyZSByZXRhaW5lZCBjb250aW51ZSB0byBleGlzdCBhbmQgY29udGludWUgdG8gaW5jdXJcbiAgICAgKiBhcHBsaWNhYmxlIGNoYXJnZXMgdW50aWwgeW91IGRlbGV0ZSB0aG9zZSByZXNvdXJjZXMuXG4gICAgICovXG4gICAgUmV0YWluID0gJ1JldGFpbicsXG5cbiAgICAvKipcbiAgICAgKiBGb3IgcmVzb3VyY2VzIHRoYXQgc3VwcG9ydCBzbmFwc2hvdHMgKEFXUzo6RUMyOjpWb2x1bWUsIEFXUzo6RWxhc3RpQ2FjaGU6OkNhY2hlQ2x1c3RlciwgQVdTOjpFbGFzdGlDYWNoZTo6UmVwbGljYXRpb25Hcm91cCxcbiAgICAgKiBBV1M6OlJEUzo6REJJbnN0YW5jZSwgQVdTOjpSRFM6OkRCQ2x1c3RlciwgYW5kIEFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXIpLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhIHNuYXBzaG90IGZvciB0aGVcbiAgICAgKiByZXNvdXJjZSBiZWZvcmUgZGVsZXRpbmcgaXQuIE5vdGUgdGhhdCB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBjb21wbGV0ZXMgdGhlIHN0YWNrIGRlbGV0aW9uLCB0aGUgc3RhY2sgd2lsbCBiZSBpbiB0aGVcbiAgICAgKiBEZWxldGVfQ29tcGxldGUgc3RhdGU7IGhvd2V2ZXIsIHRoZSBzbmFwc2hvdHMgdGhhdCBhcmUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IGNvbnRpbnVlIHRvIGV4aXN0IGFuZCBjb250aW51ZSB0b1xuICAgICAqIGluY3VyIGFwcGxpY2FibGUgY2hhcmdlcyB1bnRpbCB5b3UgZGVsZXRlIHRob3NlIHNuYXBzaG90cy5cbiAgICAgKi9cbiAgICBTbmFwc2hvdCA9ICdTbmFwc2hvdCcsXG59XG5cbi8qKlxuICogVXNlIHRoZSBVcGRhdGVQb2xpY3kgYXR0cmlidXRlIHRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcbiAqIHJlc291cmNlLiBBV1MgQ2xvdWRGb3JtYXRpb24gaW52b2tlcyBvbmUgb2YgdGhyZWUgdXBkYXRlIHBvbGljaWVzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjaGFuZ2UgeW91IG1ha2Ugb3Igd2hldGhlciBhXG4gKiBzY2hlZHVsZWQgYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVBvbGljeSB7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIHRoZSBpbnN0YW5jZXMgaXQgY29udGFpbnMgYXJlIHJlcGxhY2VkIGR1cmluZyBhbiB1cGRhdGUuIER1cmluZyByZXBsYWNlbWVudCxcbiAgICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gcmV0YWlucyB0aGUgb2xkIGdyb3VwIHVudGlsIGl0IGZpbmlzaGVzIGNyZWF0aW5nIHRoZSBuZXcgb25lLiBJZiB0aGUgdXBkYXRlIGZhaWxzLCBBV1MgQ2xvdWRGb3JtYXRpb25cbiAgICAgKiBjYW4gcm9sbCBiYWNrIHRvIHRoZSBvbGQgQXV0byBTY2FsaW5nIGdyb3VwIGFuZCBkZWxldGUgdGhlIG5ldyBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAgICovXG4gICAgYXV0b1NjYWxpbmdSZXBsYWNpbmdVcGRhdGU/OiBBdXRvU2NhbGluZ1JlcGxhY2luZ1VwZGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHJvbGxpbmcgdXBkYXRlcyBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB1c2UgdGhlIEF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZVxuICAgICAqIHBvbGljeS4gUm9sbGluZyB1cGRhdGVzIGVuYWJsZSB5b3UgdG8gc3BlY2lmeSB3aGV0aGVyIEFXUyBDbG91ZEZvcm1hdGlvbiB1cGRhdGVzIGluc3RhbmNlcyB0aGF0IGFyZSBpbiBhbiBBdXRvIFNjYWxpbmdcbiAgICAgKiBncm91cCBpbiBiYXRjaGVzIG9yIGFsbCBhdCBvbmNlLlxuICAgICAqL1xuICAgIGF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZT86IEF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHVwZGF0ZXMgZm9yIHRoZSBNaW5TaXplLCBNYXhTaXplLCBhbmQgRGVzaXJlZENhcGFjaXR5IHByb3BlcnRpZXMgd2hlblxuICAgICAqIHRoZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwIHJlc291cmNlIGhhcyBhbiBhc3NvY2lhdGVkIHNjaGVkdWxlZCBhY3Rpb24sIHVzZSB0aGUgQXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb25cbiAgICAgKiBwb2xpY3kuXG4gICAgICovXG4gICAgYXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb24/OiBBdXRvU2NhbGluZ1NjaGVkdWxlZEFjdGlvbjtcblxufVxuXG4vKipcbiAqIFRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHJvbGxpbmcgdXBkYXRlcyBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB1c2UgdGhlIEF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZVxuICogcG9saWN5LiBSb2xsaW5nIHVwZGF0ZXMgZW5hYmxlIHlvdSB0byBzcGVjaWZ5IHdoZXRoZXIgQVdTIENsb3VkRm9ybWF0aW9uIHVwZGF0ZXMgaW5zdGFuY2VzIHRoYXQgYXJlIGluIGFuIEF1dG8gU2NhbGluZ1xuICogZ3JvdXAgaW4gYmF0Y2hlcyBvciBhbGwgYXQgb25jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU2NhbGluZ1JvbGxpbmdVcGRhdGUge1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gdXBkYXRlcy5cbiAgICAgKi9cbiAgICBtYXhCYXRjaFNpemU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IG11c3QgYmUgaW4gc2VydmljZSB3aXRoaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCB3aGlsZSBBV1NcbiAgICAgKiBDbG91ZEZvcm1hdGlvbiB1cGRhdGVzIG9sZCBpbnN0YW5jZXMuXG4gICAgICovXG4gICAgbWluSW5zdGFuY2VzSW5TZXJ2aWNlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBwZXJjZW50YWdlIG9mIGluc3RhbmNlcyBpbiBhbiBBdXRvIFNjYWxpbmcgcm9sbGluZyB1cGRhdGUgdGhhdCBtdXN0IHNpZ25hbCBzdWNjZXNzIGZvciBhbiB1cGRhdGUgdG8gc3VjY2VlZC5cbiAgICAgKiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSBmcm9tIDAgdG8gMTAwLiBBV1MgQ2xvdWRGb3JtYXRpb24gcm91bmRzIHRvIHRoZSBuZWFyZXN0IHRlbnRoIG9mIGEgcGVyY2VudC4gRm9yIGV4YW1wbGUsIGlmIHlvdVxuICAgICAqIHVwZGF0ZSBmaXZlIGluc3RhbmNlcyB3aXRoIGEgbWluaW11bSBzdWNjZXNzZnVsIHBlcmNlbnRhZ2Ugb2YgNTAsIHRocmVlIGluc3RhbmNlcyBtdXN0IHNpZ25hbCBzdWNjZXNzLlxuICAgICAqXG4gICAgICogSWYgYW4gaW5zdGFuY2UgZG9lc24ndCBzZW5kIGEgc2lnbmFsIHdpdGhpbiB0aGUgdGltZSBzcGVjaWZpZWQgaW4gdGhlIFBhdXNlVGltZSBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGFzc3VtZXNcbiAgICAgKiB0aGF0IHRoZSBpbnN0YW5jZSB3YXNuJ3QgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IGFsc28gZW5hYmxlIHRoZSBXYWl0T25SZXNvdXJjZVNpZ25hbHMgYW5kIFBhdXNlVGltZSBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIG1pblN1Y2Nlc3NmdWxJbnN0YW5jZXNQZXJjZW50PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHBhdXNlcyBhZnRlciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBiYXRjaCBvZiBpbnN0YW5jZXMgdG8gZ2l2ZSB0aG9zZSBpbnN0YW5jZXNcbiAgICAgKiB0aW1lIHRvIHN0YXJ0IHNvZnR3YXJlIGFwcGxpY2F0aW9ucy4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBuZWVkIHRvIHNwZWNpZnkgUGF1c2VUaW1lIHdoZW4gc2NhbGluZyB1cCB0aGUgbnVtYmVyIG9mXG4gICAgICogaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBlbmFibGUgdGhlIFdhaXRPblJlc291cmNlU2lnbmFscyBwcm9wZXJ0eSwgUGF1c2VUaW1lIGlzIHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBzaG91bGQgd2FpdFxuICAgICAqIGZvciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHJlY2VpdmUgdGhlIHJlcXVpcmVkIG51bWJlciBvZiB2YWxpZCBzaWduYWxzIGZyb20gYWRkZWQgb3IgcmVwbGFjZWQgaW5zdGFuY2VzLiBJZiB0aGVcbiAgICAgKiBQYXVzZVRpbWUgaXMgZXhjZWVkZWQgYmVmb3JlIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgcmVjZWl2ZXMgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBzaWduYWxzLCB0aGUgdXBkYXRlIGZhaWxzLiBGb3IgYmVzdFxuICAgICAqIHJlc3VsdHMsIHNwZWNpZnkgYSB0aW1lIHBlcmlvZCB0aGF0IGdpdmVzIHlvdXIgYXBwbGljYXRpb25zIHN1ZmZpY2llbnQgdGltZSB0byBnZXQgc3RhcnRlZC4gSWYgdGhlIHVwZGF0ZSBuZWVkcyB0byBiZVxuICAgICAqIHJvbGxlZCBiYWNrLCBhIHNob3J0IFBhdXNlVGltZSBjYW4gY2F1c2UgdGhlIHJvbGxiYWNrIHRvIGZhaWwuXG4gICAgICpcbiAgICAgKiBTcGVjaWZ5IFBhdXNlVGltZSBpbiB0aGUgSVNPODYwMSBkdXJhdGlvbiBmb3JtYXQgKGluIHRoZSBmb3JtYXQgUFQjSCNNI1MsIHdoZXJlIGVhY2ggIyBpcyB0aGUgbnVtYmVyIG9mIGhvdXJzLCBtaW51dGVzLFxuICAgICAqIGFuZCBzZWNvbmRzLCByZXNwZWN0aXZlbHkpLiBUaGUgbWF4aW11bSBQYXVzZVRpbWUgaXMgb25lIGhvdXIgKFBUMUgpLlxuICAgICAqL1xuICAgIHBhdXNlVGltZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgQXV0byBTY2FsaW5nIHByb2Nlc3NlcyB0byBzdXNwZW5kIGR1cmluZyBhIHN0YWNrIHVwZGF0ZS4gU3VzcGVuZGluZyBwcm9jZXNzZXMgcHJldmVudHMgQXV0byBTY2FsaW5nIGZyb21cbiAgICAgKiBpbnRlcmZlcmluZyB3aXRoIGEgc3RhY2sgdXBkYXRlLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBzdXNwZW5kIGFsYXJtaW5nIHNvIHRoYXQgQXV0byBTY2FsaW5nIGRvZXNuJ3QgZXhlY3V0ZSBzY2FsaW5nXG4gICAgICogcG9saWNpZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFsYXJtLiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgdGhlIFNjYWxpbmdQcm9jZXNzZXMubWVtYmVyLk4gcGFyYW1ldGVyIGZvciB0aGUgU3VzcGVuZFByb2Nlc3Nlc1xuICAgICAqIGFjdGlvbiBpbiB0aGUgQXV0byBTY2FsaW5nIEFQSSBSZWZlcmVuY2UuXG4gICAgICovXG4gICAgc3VzcGVuZFByb2Nlc3Nlcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEF1dG8gU2NhbGluZyBncm91cCB3YWl0cyBvbiBzaWduYWxzIGZyb20gbmV3IGluc3RhbmNlcyBkdXJpbmcgYW4gdXBkYXRlLiBVc2UgdGhpcyBwcm9wZXJ0eSB0b1xuICAgICAqIGVuc3VyZSB0aGF0IGluc3RhbmNlcyBoYXZlIGNvbXBsZXRlZCBpbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyBhcHBsaWNhdGlvbnMgYmVmb3JlIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXBkYXRlIHByb2NlZWRzLlxuICAgICAqIEFXUyBDbG91ZEZvcm1hdGlvbiBzdXNwZW5kcyB0aGUgdXBkYXRlIG9mIGFuIEF1dG8gU2NhbGluZyBncm91cCBhZnRlciBuZXcgRUMyIGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgaW50byB0aGUgZ3JvdXAuXG4gICAgICogQVdTIENsb3VkRm9ybWF0aW9uIG11c3QgcmVjZWl2ZSBhIHNpZ25hbCBmcm9tIGVhY2ggbmV3IGluc3RhbmNlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIFBhdXNlVGltZSBiZWZvcmUgY29udGludWluZyB0aGUgdXBkYXRlLlxuICAgICAqIFRvIHNpZ25hbCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLCB1c2UgdGhlIGNmbi1zaWduYWwgaGVscGVyIHNjcmlwdCBvciBTaWduYWxSZXNvdXJjZSBBUEkuXG4gICAgICpcbiAgICAgKiBUbyBoYXZlIGluc3RhbmNlcyB3YWl0IGZvciBhbiBFbGFzdGljIExvYWQgQmFsYW5jaW5nIGhlYWx0aCBjaGVjayBiZWZvcmUgdGhleSBzaWduYWwgc3VjY2VzcywgYWRkIGEgaGVhbHRoLWNoZWNrXG4gICAgICogdmVyaWZpY2F0aW9uIGJ5IHVzaW5nIHRoZSBjZm4taW5pdCBoZWxwZXIgc2NyaXB0LiBGb3IgYW4gZXhhbXBsZSwgc2VlIHRoZSB2ZXJpZnlfaW5zdGFuY2VfaGVhbHRoIGNvbW1hbmQgaW4gdGhlIEF1dG8gU2NhbGluZ1xuICAgICAqIHJvbGxpbmcgdXBkYXRlcyBzYW1wbGUgdGVtcGxhdGUuXG4gICAgICovXG4gICAgd2FpdE9uUmVzb3VyY2VTaWduYWxzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIHRoZSBpbnN0YW5jZXMgaXQgY29udGFpbnMgYXJlIHJlcGxhY2VkIGR1cmluZyBhbiB1cGRhdGUuIER1cmluZyByZXBsYWNlbWVudCxcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZXRhaW5zIHRoZSBvbGQgZ3JvdXAgdW50aWwgaXQgZmluaXNoZXMgY3JlYXRpbmcgdGhlIG5ldyBvbmUuIElmIHRoZSB1cGRhdGUgZmFpbHMsIEFXUyBDbG91ZEZvcm1hdGlvblxuICogY2FuIHJvbGwgYmFjayB0byB0aGUgb2xkIEF1dG8gU2NhbGluZyBncm91cCBhbmQgZGVsZXRlIHRoZSBuZXcgQXV0byBTY2FsaW5nIGdyb3VwLlxuICpcbiAqIFdoaWxlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSBuZXcgZ3JvdXAsIGl0IGRvZXNuJ3QgZGV0YWNoIG9yIGF0dGFjaCBhbnkgaW5zdGFuY2VzLiBBZnRlciBzdWNjZXNzZnVsbHkgY3JlYXRpbmdcbiAqIHRoZSBuZXcgQXV0byBTY2FsaW5nIGdyb3VwLCBBV1MgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyB0aGUgb2xkIEF1dG8gU2NhbGluZyBncm91cCBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcy5cbiAqXG4gKiBXaGVuIHlvdSBzZXQgdGhlIFdpbGxSZXBsYWNlIHBhcmFtZXRlciwgcmVtZW1iZXIgdG8gc3BlY2lmeSBhIG1hdGNoaW5nIENyZWF0aW9uUG9saWN5LiBJZiB0aGUgbWluaW11bSBudW1iZXIgb2ZcbiAqIGluc3RhbmNlcyAoc3BlY2lmaWVkIGJ5IHRoZSBNaW5TdWNjZXNzZnVsSW5zdGFuY2VzUGVyY2VudCBwcm9wZXJ0eSkgZG9uJ3Qgc2lnbmFsIHN1Y2Nlc3Mgd2l0aGluIHRoZSBUaW1lb3V0IHBlcmlvZFxuICogKHNwZWNpZmllZCBpbiB0aGUgQ3JlYXRpb25Qb2xpY3kgcG9saWN5KSwgdGhlIHJlcGxhY2VtZW50IHVwZGF0ZSBmYWlscyBhbmQgQVdTIENsb3VkRm9ybWF0aW9uIHJvbGxzIGJhY2sgdG8gdGhlIG9sZFxuICogQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY2FsaW5nUmVwbGFjaW5nVXBkYXRlIHtcbiAgICB3aWxsUmVwbGFjZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2l0aCBzY2hlZHVsZWQgYWN0aW9ucywgdGhlIGdyb3VwIHNpemUgcHJvcGVydGllcyBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FuIGNoYW5nZSBhdCBhbnkgdGltZS4gV2hlbiB5b3UgdXBkYXRlIGFcbiAqIHN0YWNrIHdpdGggYW4gQXV0byBTY2FsaW5nIGdyb3VwIGFuZCBzY2hlZHVsZWQgYWN0aW9uLCBBV1MgQ2xvdWRGb3JtYXRpb24gYWx3YXlzIHNldHMgdGhlIGdyb3VwIHNpemUgcHJvcGVydHkgdmFsdWVzIG9mXG4gKiB5b3VyIEF1dG8gU2NhbGluZyBncm91cCB0byB0aGUgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXAgcmVzb3VyY2Ugb2YgeW91ciB0ZW1wbGF0ZSxcbiAqIGV2ZW4gaWYgYSBzY2hlZHVsZWQgYWN0aW9uIGlzIGluIGVmZmVjdC5cbiAqXG4gKiBJZiB5b3UgZG8gbm90IHdhbnQgQVdTIENsb3VkRm9ybWF0aW9uIHRvIGNoYW5nZSBhbnkgb2YgdGhlIGdyb3VwIHNpemUgcHJvcGVydHkgdmFsdWVzIHdoZW4geW91IGhhdmUgYSBzY2hlZHVsZWQgYWN0aW9uIGluXG4gKiBlZmZlY3QsIHVzZSB0aGUgQXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb24gdXBkYXRlIHBvbGljeSB0byBwcmV2ZW50IEFXUyBDbG91ZEZvcm1hdGlvbiBmcm9tIGNoYW5naW5nIHRoZSBNaW5TaXplLCBNYXhTaXplLFxuICogb3IgRGVzaXJlZENhcGFjaXR5IHByb3BlcnRpZXMgdW5sZXNzIHlvdSBoYXZlIG1vZGlmaWVkIHRoZXNlIHZhbHVlcyBpbiB5b3VyIHRlbXBsYXRlLlxcXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb24ge1xuICAgIC8qXG4gICAgKiBTcGVjaWZpZXMgd2hldGhlciBBV1MgQ2xvdWRGb3JtYXRpb24gaWdub3JlcyBkaWZmZXJlbmNlcyBpbiBncm91cCBzaXplIHByb3BlcnRpZXMgYmV0d2VlbiB5b3VyIGN1cnJlbnQgQXV0byBTY2FsaW5nXG4gICAgKiBncm91cCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBkZXNjcmliZWQgaW4gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXAgcmVzb3VyY2Ugb2YgeW91ciB0ZW1wbGF0ZSBkdXJpbmdcbiAgICAqIGEgc3RhY2sgdXBkYXRlLiBJZiB5b3UgbW9kaWZ5IGFueSBvZiB0aGUgZ3JvdXAgc2l6ZSBwcm9wZXJ0eSB2YWx1ZXMgaW4geW91ciB0ZW1wbGF0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIHVzZXMgdGhlIG1vZGlmaWVkXG4gICAgKiB2YWx1ZXMgYW5kIHVwZGF0ZXMgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAgKi9cbiAgICBpZ25vcmVVbm1vZGlmaWVkR3JvdXBTaXplUHJvcGVydGllcz86IGJvb2xlYW47XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0VBOzs7OztHQUtHO0FBQ0gsSUFBWSxjQXdCWDtBQXhCRCxXQUFZLGNBQWM7SUFDeEI7Ozs7T0FJRztJQUNILG1DQUFpQixDQUFBO0lBRWpCOzs7OztPQUtHO0lBQ0gsbUNBQWlCLENBQUE7SUFFakI7Ozs7OztPQU1HO0lBQ0gsdUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQXhCVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQXdCekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFzc29jaWF0ZSB0aGUgQ3JlYXRpb25Qb2xpY3kgYXR0cmlidXRlIHdpdGggYSByZXNvdXJjZSB0byBwcmV2ZW50IGl0cyBzdGF0dXMgZnJvbSByZWFjaGluZyBjcmVhdGUgY29tcGxldGUgdW50aWxcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZWNlaXZlcyBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc3VjY2VzcyBzaWduYWxzIG9yIHRoZSB0aW1lb3V0IHBlcmlvZCBpcyBleGNlZWRlZC4gVG8gc2lnbmFsIGFcbiAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gKiB0byB0aGUgc3RhY2sgZXZlbnRzIHNvIHRoYXQgeW91IHRyYWNrIHRoZSBudW1iZXIgb2Ygc2lnbmFscyBzZW50LlxuICpcbiAqIFRoZSBjcmVhdGlvbiBwb2xpY3kgaXMgaW52b2tlZCBvbmx5IHdoZW4gQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2UuIEN1cnJlbnRseSwgdGhlIG9ubHlcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IGNyZWF0aW9uIHBvbGljaWVzIGFyZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwLCBBV1M6OkVDMjo6SW5zdGFuY2UsXG4gKiBhbmQgQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvbi5cbiAqXG4gKiBVc2UgdGhlIENyZWF0aW9uUG9saWN5IGF0dHJpYnV0ZSB3aGVuIHlvdSB3YW50IHRvIHdhaXQgb24gcmVzb3VyY2UgY29uZmlndXJhdGlvbiBhY3Rpb25zIGJlZm9yZSBzdGFjayBjcmVhdGlvbiBwcm9jZWVkcy5cbiAqIEZvciBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCBhbmQgY29uZmlndXJlIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBvbiBhbiBFQzIgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRob3NlIGFwcGxpY2F0aW9ucyB0b1xuICogYmUgcnVubmluZyBiZWZvcmUgcHJvY2VlZGluZy4gSW4gc3VjaCBjYXNlcywgeW91IGNhbiBhZGQgYSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgdG8gdGhlIGluc3RhbmNlLCBhbmQgdGhlbiBzZW5kIGEgc3VjY2Vzc1xuICogc2lnbmFsIHRvIHRoZSBpbnN0YW5jZSBhZnRlciB0aGUgYXBwbGljYXRpb25zIGFyZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuIEZvciBhIGRldGFpbGVkIGV4YW1wbGUsIHNlZSBEZXBsb3lpbmcgQXBwbGljYXRpb25zXG4gKiBvbiBBbWF6b24gRUMyIHdpdGggQVdTIENsb3VkRm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uUG9saWN5IHtcbiAgLyoqXG4gICAqIEZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgcmVwbGFjZW1lbnQgdXBkYXRlLCBzcGVjaWZpZXMgaG93IG1hbnkgaW5zdGFuY2VzIG11c3Qgc2lnbmFsIHN1Y2Nlc3MgZm9yIHRoZVxuICAgKiB1cGRhdGUgdG8gc3VjY2VlZC5cbiAgICovXG4gIGF1dG9TY2FsaW5nQ3JlYXRpb25Qb2xpY3k/OiBBdXRvU2NhbGluZ0NyZWF0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBXaGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSBhc3NvY2lhdGVkIHJlc291cmNlLCBjb25maWd1cmVzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgc3VjY2VzcyBzaWduYWxzIGFuZFxuICAgKiB0aGUgbGVuZ3RoIG9mIHRpbWUgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gd2FpdHMgZm9yIHRob3NlIHNpZ25hbHMuXG4gICAqL1xuICByZXNvdXJjZVNpZ25hbD86IFJlc291cmNlU2lnbmFsO1xufVxuXG4vKipcbiAqIEZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgcmVwbGFjZW1lbnQgdXBkYXRlLCBzcGVjaWZpZXMgaG93IG1hbnkgaW5zdGFuY2VzIG11c3Qgc2lnbmFsIHN1Y2Nlc3MgZm9yIHRoZVxuICogdXBkYXRlIHRvIHN1Y2NlZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1NjYWxpbmdDcmVhdGlvblBvbGljeSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyByZXBsYWNlbWVudCB1cGRhdGUgdGhhdCBtdXN0IHNpZ25hbCBzdWNjZXNzIGZvciB0aGVcbiAgICogdXBkYXRlIHRvIHN1Y2NlZWQuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIGZyb20gMCB0byAxMDAuIEFXUyBDbG91ZEZvcm1hdGlvbiByb3VuZHMgdG8gdGhlIG5lYXJlc3QgdGVudGggb2YgYSBwZXJjZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHVwZGF0ZSBmaXZlIGluc3RhbmNlcyB3aXRoIGEgbWluaW11bSBzdWNjZXNzZnVsIHBlcmNlbnRhZ2Ugb2YgNTAsIHRocmVlIGluc3RhbmNlcyBtdXN0IHNpZ25hbCBzdWNjZXNzLlxuICAgKiBJZiBhbiBpbnN0YW5jZSBkb2Vzbid0IHNlbmQgYSBzaWduYWwgd2l0aGluIHRoZSB0aW1lIHNwZWNpZmllZCBieSB0aGUgVGltZW91dCBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGFzc3VtZXMgdGhhdCB0aGVcbiAgICogaW5zdGFuY2Ugd2Fzbid0IGNyZWF0ZWQuXG4gICAqL1xuICBtaW5TdWNjZXNzZnVsSW5zdGFuY2VzUGVyY2VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSBhc3NvY2lhdGVkIHJlc291cmNlLCBjb25maWd1cmVzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgc3VjY2VzcyBzaWduYWxzIGFuZFxuICogdGhlIGxlbmd0aCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHdhaXRzIGZvciB0aG9zZSBzaWduYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlU2lnbmFsIHtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzdWNjZXNzIHNpZ25hbHMgQVdTIENsb3VkRm9ybWF0aW9uIG11c3QgcmVjZWl2ZSBiZWZvcmUgaXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RhdHVzIGFzIENSRUFURV9DT01QTEVURS5cbiAgICogSWYgdGhlIHJlc291cmNlIHJlY2VpdmVzIGEgZmFpbHVyZSBzaWduYWwgb3IgZG9lc24ndCByZWNlaXZlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNpZ25hbHMgYmVmb3JlIHRoZSB0aW1lb3V0IHBlcmlvZFxuICAgKiBleHBpcmVzLCB0aGUgcmVzb3VyY2UgY3JlYXRpb24gZmFpbHMgYW5kIEFXUyBDbG91ZEZvcm1hdGlvbiByb2xscyB0aGUgc3RhY2sgYmFjay5cbiAgICovXG4gIGNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gd2FpdHMgZm9yIHRoZSBudW1iZXIgb2Ygc2lnbmFscyB0aGF0IHdhcyBzcGVjaWZpZWQgaW4gdGhlIENvdW50IHByb3BlcnR5LlxuICAgKiBUaGUgdGltZW91dCBwZXJpb2Qgc3RhcnRzIGFmdGVyIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFydHMgY3JlYXRpbmcgdGhlIHJlc291cmNlLCBhbmQgdGhlIHRpbWVvdXQgZXhwaXJlcyBubyBzb29uZXJcbiAgICogdGhhbiB0aGUgdGltZSB5b3Ugc3BlY2lmeSBidXQgY2FuIG9jY3VyIHNob3J0bHkgdGhlcmVhZnRlci4gVGhlIG1heGltdW0gdGltZSB0aGF0IHlvdSBjYW4gc3BlY2lmeSBpcyAxMiBob3Vycy5cbiAgICovXG4gIHRpbWVvdXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2l0aCB0aGUgRGVsZXRpb25Qb2xpY3kgYXR0cmlidXRlIHlvdSBjYW4gcHJlc2VydmUgb3IgKGluIHNvbWUgY2FzZXMpIGJhY2t1cCBhIHJlc291cmNlIHdoZW4gaXRzIHN0YWNrIGlzIGRlbGV0ZWQuXG4gKiBZb3Ugc3BlY2lmeSBhIERlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IHlvdSB3YW50IHRvIGNvbnRyb2wuIElmIGEgcmVzb3VyY2UgaGFzIG5vIERlbGV0aW9uUG9saWN5XG4gKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICogdGhhdCBsZWFkIHRvIHJlc291cmNlcyBiZWluZyByZW1vdmVkLlxuICovXG5leHBvcnQgZW51bSBEZWxldGlvblBvbGljeSB7XG4gIC8qKlxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyB0aGUgcmVzb3VyY2UgYW5kIGFsbCBpdHMgY29udGVudCBpZiBhcHBsaWNhYmxlIGR1cmluZyBzdGFjayBkZWxldGlvbi4gWW91IGNhbiBhZGQgdGhpc1xuICAgKiBkZWxldGlvbiBwb2xpY3kgdG8gYW55IHJlc291cmNlIHR5cGUuIEJ5IGRlZmF1bHQsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IGEgRGVsZXRpb25Qb2xpY3ksIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzXG4gICAqIHlvdXIgcmVzb3VyY2VzLiBIb3dldmVyLCBiZSBhd2FyZSBvZiB0aGUgZm9sbG93aW5nIGNvbnNpZGVyYXRpb25zOlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIEFXUyBDbG91ZEZvcm1hdGlvbiBrZWVwcyB0aGUgcmVzb3VyY2Ugd2l0aG91dCBkZWxldGluZyB0aGUgcmVzb3VyY2Ugb3IgaXRzIGNvbnRlbnRzIHdoZW4gaXRzIHN0YWNrIGlzIGRlbGV0ZWQuXG4gICAqIFlvdSBjYW4gYWRkIHRoaXMgZGVsZXRpb24gcG9saWN5IHRvIGFueSByZXNvdXJjZSB0eXBlLiBOb3RlIHRoYXQgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gY29tcGxldGVzIHRoZSBzdGFjayBkZWxldGlvbixcbiAgICogdGhlIHN0YWNrIHdpbGwgYmUgaW4gRGVsZXRlX0NvbXBsZXRlIHN0YXRlOyBob3dldmVyLCByZXNvdXJjZXMgdGhhdCBhcmUgcmV0YWluZWQgY29udGludWUgdG8gZXhpc3QgYW5kIGNvbnRpbnVlIHRvIGluY3VyXG4gICAqIGFwcGxpY2FibGUgY2hhcmdlcyB1bnRpbCB5b3UgZGVsZXRlIHRob3NlIHJlc291cmNlcy5cbiAgICovXG4gIFJldGFpbiA9ICdSZXRhaW4nLFxuXG4gIC8qKlxuICAgKiBGb3IgcmVzb3VyY2VzIHRoYXQgc3VwcG9ydCBzbmFwc2hvdHMgKEFXUzo6RUMyOjpWb2x1bWUsIEFXUzo6RWxhc3RpQ2FjaGU6OkNhY2hlQ2x1c3RlciwgQVdTOjpFbGFzdGlDYWNoZTo6UmVwbGljYXRpb25Hcm91cCxcbiAgICogQVdTOjpSRFM6OkRCSW5zdGFuY2UsIEFXUzo6UkRTOjpEQkNsdXN0ZXIsIGFuZCBBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyKSwgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgYSBzbmFwc2hvdCBmb3IgdGhlXG4gICAqIHJlc291cmNlIGJlZm9yZSBkZWxldGluZyBpdC4gTm90ZSB0aGF0IHdoZW4gQVdTIENsb3VkRm9ybWF0aW9uIGNvbXBsZXRlcyB0aGUgc3RhY2sgZGVsZXRpb24sIHRoZSBzdGFjayB3aWxsIGJlIGluIHRoZVxuICAgKiBEZWxldGVfQ29tcGxldGUgc3RhdGU7IGhvd2V2ZXIsIHRoZSBzbmFwc2hvdHMgdGhhdCBhcmUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IGNvbnRpbnVlIHRvIGV4aXN0IGFuZCBjb250aW51ZSB0b1xuICAgKiBpbmN1ciBhcHBsaWNhYmxlIGNoYXJnZXMgdW50aWwgeW91IGRlbGV0ZSB0aG9zZSBzbmFwc2hvdHMuXG4gICAqL1xuICBTbmFwc2hvdCA9ICdTbmFwc2hvdCcsXG59XG5cbi8qKlxuICogVXNlIHRoZSBVcGRhdGVQb2xpY3kgYXR0cmlidXRlIHRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcbiAqIHJlc291cmNlLiBBV1MgQ2xvdWRGb3JtYXRpb24gaW52b2tlcyBvbmUgb2YgdGhyZWUgdXBkYXRlIHBvbGljaWVzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjaGFuZ2UgeW91IG1ha2Ugb3Igd2hldGhlciBhXG4gKiBzY2hlZHVsZWQgYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVBvbGljeSB7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIGFuIEF1dG8gU2NhbGluZyBncm91cCBhbmQgdGhlIGluc3RhbmNlcyBpdCBjb250YWlucyBhcmUgcmVwbGFjZWQgZHVyaW5nIGFuIHVwZGF0ZS4gRHVyaW5nIHJlcGxhY2VtZW50LFxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gcmV0YWlucyB0aGUgb2xkIGdyb3VwIHVudGlsIGl0IGZpbmlzaGVzIGNyZWF0aW5nIHRoZSBuZXcgb25lLiBJZiB0aGUgdXBkYXRlIGZhaWxzLCBBV1MgQ2xvdWRGb3JtYXRpb25cbiAgICogY2FuIHJvbGwgYmFjayB0byB0aGUgb2xkIEF1dG8gU2NhbGluZyBncm91cCBhbmQgZGVsZXRlIHRoZSBuZXcgQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKi9cbiAgYXV0b1NjYWxpbmdSZXBsYWNpbmdVcGRhdGU/OiBBdXRvU2NhbGluZ1JlcGxhY2luZ1VwZGF0ZTtcblxuICAvKipcbiAgICogVG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgcm9sbGluZyB1cGRhdGVzIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHVzZSB0aGUgQXV0b1NjYWxpbmdSb2xsaW5nVXBkYXRlXG4gICAqIHBvbGljeS4gUm9sbGluZyB1cGRhdGVzIGVuYWJsZSB5b3UgdG8gc3BlY2lmeSB3aGV0aGVyIEFXUyBDbG91ZEZvcm1hdGlvbiB1cGRhdGVzIGluc3RhbmNlcyB0aGF0IGFyZSBpbiBhbiBBdXRvIFNjYWxpbmdcbiAgICogZ3JvdXAgaW4gYmF0Y2hlcyBvciBhbGwgYXQgb25jZS5cbiAgICovXG4gIGF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZT86IEF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZTtcblxuICAvKipcbiAgICogVG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdXBkYXRlcyBmb3IgdGhlIE1pblNpemUsIE1heFNpemUsIGFuZCBEZXNpcmVkQ2FwYWNpdHkgcHJvcGVydGllcyB3aGVuXG4gICAqIHRoZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwIHJlc291cmNlIGhhcyBhbiBhc3NvY2lhdGVkIHNjaGVkdWxlZCBhY3Rpb24sIHVzZSB0aGUgQXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb25cbiAgICogcG9saWN5LlxuICAgKi9cbiAgYXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb24/OiBBdXRvU2NhbGluZ1NjaGVkdWxlZEFjdGlvbjtcblxufVxuXG4vKipcbiAqIFRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHJvbGxpbmcgdXBkYXRlcyBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB1c2UgdGhlIEF1dG9TY2FsaW5nUm9sbGluZ1VwZGF0ZVxuICogcG9saWN5LiBSb2xsaW5nIHVwZGF0ZXMgZW5hYmxlIHlvdSB0byBzcGVjaWZ5IHdoZXRoZXIgQVdTIENsb3VkRm9ybWF0aW9uIHVwZGF0ZXMgaW5zdGFuY2VzIHRoYXQgYXJlIGluIGFuIEF1dG8gU2NhbGluZ1xuICogZ3JvdXAgaW4gYmF0Y2hlcyBvciBhbGwgYXQgb25jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU2NhbGluZ1JvbGxpbmdVcGRhdGUge1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiB1cGRhdGVzLlxuICAgKi9cbiAgbWF4QmF0Y2hTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IG11c3QgYmUgaW4gc2VydmljZSB3aXRoaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCB3aGlsZSBBV1NcbiAgICogQ2xvdWRGb3JtYXRpb24gdXBkYXRlcyBvbGQgaW5zdGFuY2VzLlxuICAgKi9cbiAgbWluSW5zdGFuY2VzSW5TZXJ2aWNlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyByb2xsaW5nIHVwZGF0ZSB0aGF0IG11c3Qgc2lnbmFsIHN1Y2Nlc3MgZm9yIGFuIHVwZGF0ZSB0byBzdWNjZWVkLlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSBmcm9tIDAgdG8gMTAwLiBBV1MgQ2xvdWRGb3JtYXRpb24gcm91bmRzIHRvIHRoZSBuZWFyZXN0IHRlbnRoIG9mIGEgcGVyY2VudC4gRm9yIGV4YW1wbGUsIGlmIHlvdVxuICAgKiB1cGRhdGUgZml2ZSBpbnN0YW5jZXMgd2l0aCBhIG1pbmltdW0gc3VjY2Vzc2Z1bCBwZXJjZW50YWdlIG9mIDUwLCB0aHJlZSBpbnN0YW5jZXMgbXVzdCBzaWduYWwgc3VjY2Vzcy5cbiAgICpcbiAgICogSWYgYW4gaW5zdGFuY2UgZG9lc24ndCBzZW5kIGEgc2lnbmFsIHdpdGhpbiB0aGUgdGltZSBzcGVjaWZpZWQgaW4gdGhlIFBhdXNlVGltZSBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGFzc3VtZXNcbiAgICogdGhhdCB0aGUgaW5zdGFuY2Ugd2Fzbid0IHVwZGF0ZWQuXG4gICAqXG4gICAqIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IGFsc28gZW5hYmxlIHRoZSBXYWl0T25SZXNvdXJjZVNpZ25hbHMgYW5kIFBhdXNlVGltZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgbWluU3VjY2Vzc2Z1bEluc3RhbmNlc1BlcmNlbnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBwYXVzZXMgYWZ0ZXIgbWFraW5nIGEgY2hhbmdlIHRvIGEgYmF0Y2ggb2YgaW5zdGFuY2VzIHRvIGdpdmUgdGhvc2UgaW5zdGFuY2VzXG4gICAqIHRpbWUgdG8gc3RhcnQgc29mdHdhcmUgYXBwbGljYXRpb25zLiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IG5lZWQgdG8gc3BlY2lmeSBQYXVzZVRpbWUgd2hlbiBzY2FsaW5nIHVwIHRoZSBudW1iZXIgb2ZcbiAgICogaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cC5cbiAgICpcbiAgICogSWYgeW91IGVuYWJsZSB0aGUgV2FpdE9uUmVzb3VyY2VTaWduYWxzIHByb3BlcnR5LCBQYXVzZVRpbWUgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgQVdTIENsb3VkRm9ybWF0aW9uIHNob3VsZCB3YWl0XG4gICAqIGZvciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHJlY2VpdmUgdGhlIHJlcXVpcmVkIG51bWJlciBvZiB2YWxpZCBzaWduYWxzIGZyb20gYWRkZWQgb3IgcmVwbGFjZWQgaW5zdGFuY2VzLiBJZiB0aGVcbiAgICogUGF1c2VUaW1lIGlzIGV4Y2VlZGVkIGJlZm9yZSB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHJlY2VpdmVzIHRoZSByZXF1aXJlZCBudW1iZXIgb2Ygc2lnbmFscywgdGhlIHVwZGF0ZSBmYWlscy4gRm9yIGJlc3RcbiAgICogcmVzdWx0cywgc3BlY2lmeSBhIHRpbWUgcGVyaW9kIHRoYXQgZ2l2ZXMgeW91ciBhcHBsaWNhdGlvbnMgc3VmZmljaWVudCB0aW1lIHRvIGdldCBzdGFydGVkLiBJZiB0aGUgdXBkYXRlIG5lZWRzIHRvIGJlXG4gICAqIHJvbGxlZCBiYWNrLCBhIHNob3J0IFBhdXNlVGltZSBjYW4gY2F1c2UgdGhlIHJvbGxiYWNrIHRvIGZhaWwuXG4gICAqXG4gICAqIFNwZWNpZnkgUGF1c2VUaW1lIGluIHRoZSBJU084NjAxIGR1cmF0aW9uIGZvcm1hdCAoaW4gdGhlIGZvcm1hdCBQVCNII00jUywgd2hlcmUgZWFjaCAjIGlzIHRoZSBudW1iZXIgb2YgaG91cnMsIG1pbnV0ZXMsXG4gICAqIGFuZCBzZWNvbmRzLCByZXNwZWN0aXZlbHkpLiBUaGUgbWF4aW11bSBQYXVzZVRpbWUgaXMgb25lIGhvdXIgKFBUMUgpLlxuICAgKi9cbiAgcGF1c2VUaW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEF1dG8gU2NhbGluZyBwcm9jZXNzZXMgdG8gc3VzcGVuZCBkdXJpbmcgYSBzdGFjayB1cGRhdGUuIFN1c3BlbmRpbmcgcHJvY2Vzc2VzIHByZXZlbnRzIEF1dG8gU2NhbGluZyBmcm9tXG4gICAqIGludGVyZmVyaW5nIHdpdGggYSBzdGFjayB1cGRhdGUuIEZvciBleGFtcGxlLCB5b3UgY2FuIHN1c3BlbmQgYWxhcm1pbmcgc28gdGhhdCBBdXRvIFNjYWxpbmcgZG9lc24ndCBleGVjdXRlIHNjYWxpbmdcbiAgICogcG9saWNpZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFsYXJtLiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgdGhlIFNjYWxpbmdQcm9jZXNzZXMubWVtYmVyLk4gcGFyYW1ldGVyIGZvciB0aGUgU3VzcGVuZFByb2Nlc3Nlc1xuICAgKiBhY3Rpb24gaW4gdGhlIEF1dG8gU2NhbGluZyBBUEkgUmVmZXJlbmNlLlxuICAgKi9cbiAgc3VzcGVuZFByb2Nlc3Nlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHdhaXRzIG9uIHNpZ25hbHMgZnJvbSBuZXcgaW5zdGFuY2VzIGR1cmluZyBhbiB1cGRhdGUuIFVzZSB0aGlzIHByb3BlcnR5IHRvXG4gICAqIGVuc3VyZSB0aGF0IGluc3RhbmNlcyBoYXZlIGNvbXBsZXRlZCBpbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyBhcHBsaWNhdGlvbnMgYmVmb3JlIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXBkYXRlIHByb2NlZWRzLlxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gc3VzcGVuZHMgdGhlIHVwZGF0ZSBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgYWZ0ZXIgbmV3IEVDMiBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGludG8gdGhlIGdyb3VwLlxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gbXVzdCByZWNlaXZlIGEgc2lnbmFsIGZyb20gZWFjaCBuZXcgaW5zdGFuY2Ugd2l0aGluIHRoZSBzcGVjaWZpZWQgUGF1c2VUaW1lIGJlZm9yZSBjb250aW51aW5nIHRoZSB1cGRhdGUuXG4gICAqIFRvIHNpZ25hbCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLCB1c2UgdGhlIGNmbi1zaWduYWwgaGVscGVyIHNjcmlwdCBvciBTaWduYWxSZXNvdXJjZSBBUEkuXG4gICAqXG4gICAqIFRvIGhhdmUgaW5zdGFuY2VzIHdhaXQgZm9yIGFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgaGVhbHRoIGNoZWNrIGJlZm9yZSB0aGV5IHNpZ25hbCBzdWNjZXNzLCBhZGQgYSBoZWFsdGgtY2hlY2tcbiAgICogdmVyaWZpY2F0aW9uIGJ5IHVzaW5nIHRoZSBjZm4taW5pdCBoZWxwZXIgc2NyaXB0LiBGb3IgYW4gZXhhbXBsZSwgc2VlIHRoZSB2ZXJpZnlfaW5zdGFuY2VfaGVhbHRoIGNvbW1hbmQgaW4gdGhlIEF1dG8gU2NhbGluZ1xuICAgKiByb2xsaW5nIHVwZGF0ZXMgc2FtcGxlIHRlbXBsYXRlLlxuICAgKi9cbiAgd2FpdE9uUmVzb3VyY2VTaWduYWxzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIHRoZSBpbnN0YW5jZXMgaXQgY29udGFpbnMgYXJlIHJlcGxhY2VkIGR1cmluZyBhbiB1cGRhdGUuIER1cmluZyByZXBsYWNlbWVudCxcbiAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZXRhaW5zIHRoZSBvbGQgZ3JvdXAgdW50aWwgaXQgZmluaXNoZXMgY3JlYXRpbmcgdGhlIG5ldyBvbmUuIElmIHRoZSB1cGRhdGUgZmFpbHMsIEFXUyBDbG91ZEZvcm1hdGlvblxuICogY2FuIHJvbGwgYmFjayB0byB0aGUgb2xkIEF1dG8gU2NhbGluZyBncm91cCBhbmQgZGVsZXRlIHRoZSBuZXcgQXV0byBTY2FsaW5nIGdyb3VwLlxuICpcbiAqIFdoaWxlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSBuZXcgZ3JvdXAsIGl0IGRvZXNuJ3QgZGV0YWNoIG9yIGF0dGFjaCBhbnkgaW5zdGFuY2VzLiBBZnRlciBzdWNjZXNzZnVsbHkgY3JlYXRpbmdcbiAqIHRoZSBuZXcgQXV0byBTY2FsaW5nIGdyb3VwLCBBV1MgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyB0aGUgb2xkIEF1dG8gU2NhbGluZyBncm91cCBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcy5cbiAqXG4gKiBXaGVuIHlvdSBzZXQgdGhlIFdpbGxSZXBsYWNlIHBhcmFtZXRlciwgcmVtZW1iZXIgdG8gc3BlY2lmeSBhIG1hdGNoaW5nIENyZWF0aW9uUG9saWN5LiBJZiB0aGUgbWluaW11bSBudW1iZXIgb2ZcbiAqIGluc3RhbmNlcyAoc3BlY2lmaWVkIGJ5IHRoZSBNaW5TdWNjZXNzZnVsSW5zdGFuY2VzUGVyY2VudCBwcm9wZXJ0eSkgZG9uJ3Qgc2lnbmFsIHN1Y2Nlc3Mgd2l0aGluIHRoZSBUaW1lb3V0IHBlcmlvZFxuICogKHNwZWNpZmllZCBpbiB0aGUgQ3JlYXRpb25Qb2xpY3kgcG9saWN5KSwgdGhlIHJlcGxhY2VtZW50IHVwZGF0ZSBmYWlscyBhbmQgQVdTIENsb3VkRm9ybWF0aW9uIHJvbGxzIGJhY2sgdG8gdGhlIG9sZFxuICogQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY2FsaW5nUmVwbGFjaW5nVXBkYXRlIHtcbiAgd2lsbFJlcGxhY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdpdGggc2NoZWR1bGVkIGFjdGlvbnMsIHRoZSBncm91cCBzaXplIHByb3BlcnRpZXMgb2YgYW4gQXV0byBTY2FsaW5nIGdyb3VwIGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUuIFdoZW4geW91IHVwZGF0ZSBhXG4gKiBzdGFjayB3aXRoIGFuIEF1dG8gU2NhbGluZyBncm91cCBhbmQgc2NoZWR1bGVkIGFjdGlvbiwgQVdTIENsb3VkRm9ybWF0aW9uIGFsd2F5cyBzZXRzIHRoZSBncm91cCBzaXplIHByb3BlcnR5IHZhbHVlcyBvZlxuICogeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgdG8gdGhlIHZhbHVlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwIHJlc291cmNlIG9mIHlvdXIgdGVtcGxhdGUsXG4gKiBldmVuIGlmIGEgc2NoZWR1bGVkIGFjdGlvbiBpcyBpbiBlZmZlY3QuXG4gKlxuICogSWYgeW91IGRvIG5vdCB3YW50IEFXUyBDbG91ZEZvcm1hdGlvbiB0byBjaGFuZ2UgYW55IG9mIHRoZSBncm91cCBzaXplIHByb3BlcnR5IHZhbHVlcyB3aGVuIHlvdSBoYXZlIGEgc2NoZWR1bGVkIGFjdGlvbiBpblxuICogZWZmZWN0LCB1c2UgdGhlIEF1dG9TY2FsaW5nU2NoZWR1bGVkQWN0aW9uIHVwZGF0ZSBwb2xpY3kgdG8gcHJldmVudCBBV1MgQ2xvdWRGb3JtYXRpb24gZnJvbSBjaGFuZ2luZyB0aGUgTWluU2l6ZSwgTWF4U2l6ZSxcbiAqIG9yIERlc2lyZWRDYXBhY2l0eSBwcm9wZXJ0aWVzIHVubGVzcyB5b3UgaGF2ZSBtb2RpZmllZCB0aGVzZSB2YWx1ZXMgaW4geW91ciB0ZW1wbGF0ZS5cXFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY2FsaW5nU2NoZWR1bGVkQWN0aW9uIHtcbiAgLypcbiAgKiBTcGVjaWZpZXMgd2hldGhlciBBV1MgQ2xvdWRGb3JtYXRpb24gaWdub3JlcyBkaWZmZXJlbmNlcyBpbiBncm91cCBzaXplIHByb3BlcnRpZXMgYmV0d2VlbiB5b3VyIGN1cnJlbnQgQXV0byBTY2FsaW5nXG4gICogZ3JvdXAgYW5kIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgZGVzY3JpYmVkIGluIHRoZSBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwIHJlc291cmNlIG9mIHlvdXIgdGVtcGxhdGUgZHVyaW5nXG4gICogYSBzdGFjayB1cGRhdGUuIElmIHlvdSBtb2RpZnkgYW55IG9mIHRoZSBncm91cCBzaXplIHByb3BlcnR5IHZhbHVlcyBpbiB5b3VyIHRlbXBsYXRlLCBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlcyB0aGUgbW9kaWZpZWRcbiAgKiB2YWx1ZXMgYW5kIHVwZGF0ZXMgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICovXG4gIGlnbm9yZVVubW9kaWZpZWRHcm91cFNpemVQcm9wZXJ0aWVzPzogYm9vbGVhbjtcbn1cbiJdfQ==

@@ -35,5 +35,22 @@ import { Construct } from '../core/construct';

/**
* AWS resource properties
* AWS resource property overrides.
*
* During synthesis, the method "renderProperties(this.overrides)" is called
* with this object, and merged on top of the output of
* "renderProperties(this.properties)".
*
* Derived classes should expose a strongly-typed version of this object as
* a public property called `propertyOverrides`.
*/
protected readonly untypedPropertyOverrides: any;
/**
* AWS resource properties.
*
* This object is rendered via a call to "renderProperties(this.properties)".
*/
protected readonly properties: any;
/**
* An object to be merged on top of the entire resource definition.
*/
private readonly rawOverrides;
private dependsOn;

@@ -58,6 +75,36 @@ /**

/**
* Adds an override to the synthesized CloudFormation resource. To add a
* property override, either use `addPropertyOverride` or prefix `path` with
* "Properties." (i.e. `Properties.TopicName`).
*
* @param path The path of the property, you can use dot notation to
* override values in complex types. Any intermdediate keys
* will be created as needed.
* @param value The value. Could be primitive or complex.
*/
addOverride(path: string, value: any): void;
/**
* Syntactic sugar for `addOverride(path, undefined)`.
* @param path The path of the value to delete
*/
addDeletionOverride(path: string): void;
/**
* Adds an override to a resource property.
*
* Syntactic sugar for `addOverride("Properties.<...>", value)`.
*
* @param propertyPath The path of the property
* @param value The value
*/
addPropertyOverride(propertyPath: string, value: any): void;
/**
* Adds an override that deletes the value of a property from the resource definition.
* @param propertyPath The path to the property.
*/
addPropertyDeletionOverride(propertyPath: string): void;
/**
* Emits CloudFormation for this resource.
*/
toCloudFormation(): object;
protected renderProperties(): {
protected renderProperties(properties: any): {
[key: string]: any;

@@ -102,1 +149,6 @@ };

}
/**
* Merges `source` into `target`, overriding any existing values.
* `null`s will cause a value to be deleted.
*/
export declare function deepMerge(target: any, source: any): any;

@@ -20,2 +20,17 @@ "use strict";

this.options = {};
/**
* AWS resource property overrides.
*
* During synthesis, the method "renderProperties(this.overrides)" is called
* with this object, and merged on top of the output of
* "renderProperties(this.properties)".
*
* Derived classes should expose a strongly-typed version of this object as
* a public property called `propertyOverrides`.
*/
this.untypedPropertyOverrides = {};
/**
* An object to be merged on top of the entire resource definition.
*/
this.rawOverrides = {};
this.dependsOn = new Array();

@@ -65,2 +80,53 @@ if (!props.type) {

/**
* Adds an override to the synthesized CloudFormation resource. To add a
* property override, either use `addPropertyOverride` or prefix `path` with
* "Properties." (i.e. `Properties.TopicName`).
*
* @param path The path of the property, you can use dot notation to
* override values in complex types. Any intermdediate keys
* will be created as needed.
* @param value The value. Could be primitive or complex.
*/
addOverride(path, value) {
const parts = path.split('.');
let curr = this.rawOverrides;
while (parts.length > 1) {
const key = parts.shift();
// if we can't recurse further or the previous value is not an
// object overwrite it with an object.
const isObject = curr[key] != null && typeof (curr[key]) === 'object' && !Array.isArray(curr[key]);
if (!isObject) {
curr[key] = {};
}
curr = curr[key];
}
const lastKey = parts.shift();
curr[lastKey] = value;
}
/**
* Syntactic sugar for `addOverride(path, undefined)`.
* @param path The path of the value to delete
*/
addDeletionOverride(path) {
this.addOverride(path, undefined);
}
/**
* Adds an override to a resource property.
*
* Syntactic sugar for `addOverride("Properties.<...>", value)`.
*
* @param propertyPath The path of the property
* @param value The value
*/
addPropertyOverride(propertyPath, value) {
this.addOverride(`Properties.${propertyPath}`, value);
}
/**
* Adds an override that deletes the value of a property from the resource definition.
* @param propertyPath The path to the property.
*/
addPropertyDeletionOverride(propertyPath) {
this.addPropertyOverride(propertyPath, undefined);
}
/**
* Emits CloudFormation for this resource.

@@ -70,7 +136,9 @@ */

try {
// merge property overrides onto properties and then render (and validate).
const properties = this.renderProperties(deepMerge(this.properties || {}, this.untypedPropertyOverrides));
return {
Resources: {
[this.logicalId]: {
[this.logicalId]: deepMerge({
Type: this.resourceType,
Properties: util_1.ignoreEmpty(this.renderProperties()),
Properties: util_1.ignoreEmpty(properties),
DependsOn: util_1.ignoreEmpty(this.renderDependsOn()),

@@ -82,3 +150,3 @@ CreationPolicy: util_1.capitalizePropertyNames(this.options.creationPolicy),

Condition: this.options.condition && this.options.condition.logicalId
}
}, this.rawOverrides)
}

@@ -91,5 +159,5 @@ };

// Adjust stack trace (make it look like node built it, too...)
const creationStack = ['--- resource created at ---', ...this.creationStackTrace].join('\n at ');
const creationStack = ['--- resource created at ---', ...this.creationStackTrace].join('\n at ');
const problemTrace = e.stack.substr(e.stack.indexOf(e.message) + e.message.length);
e.stack = `${e.message}\n ${creationStack}\n --- problem discovered at ---${problemTrace}`;
e.stack = `${e.message}\n ${creationStack}\n --- problem discovered at ---${problemTrace}`;
// Re-throw

@@ -99,5 +167,4 @@ throw e;

}
renderProperties() {
// FIXME: default implementation is not great, it should throw, but it avoids breaking all unit tests for now.
return this.properties;
renderProperties(properties) {
return properties;
}

@@ -128,2 +195,37 @@ renderDependsOn() {

exports.Resource = Resource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW1FO0FBY25FOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQWE7SUFrQ3ZDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDN0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXRCeEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQVl0QyxjQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQVN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRyxDQUFDO1FBRTFDLDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQXBERDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFtQjtRQUN2QyxPQUFPLENBQUMsU0FBYyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFDL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNsQyxHQUFHO29CQUNDLE9BQVEsSUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsQ0FBQzthQUNK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U0FBUyxDQUFDLENBQUM7aUJBQzdCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwRSxPQUFPO2FBQ1Y7aUJBQU07Z0JBQ0gsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJJRCw0QkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcywgaWdub3JlRW1wdHkgfSBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ3JlYXRpb25Qb2xpY3ksIERlbGV0aW9uUG9saWN5LCBVcGRhdGVQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5pbXBvcnQgeyBJRGVwZW5kYWJsZSwgUmVmZXJlbmNlYWJsZSwgU3RhY2tFbGVtZW50IH0gZnJvbSAnLi9zdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wcyB7XG4gICAgLyoqXG4gICAgICogQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHByb3BlcnRpZXM/OiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBSZWZlcmVuY2VhYmxlIHtcbiAgICAvKipcbiAgICAgKiBBIGRlY29yYXRpb24gdXNlZCB0byBjcmVhdGUgYSBDbG91ZEZvcm1hdGlvbiBhdHRyaWJ1dGUgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGN1c3RvbU5hbWUgQ3VzdG9tIG5hbWUgZm9yIHRoZSBhdHRyaWJ1dGUgKGRlZmF1bHQgaXMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5KVxuICAgICAqIE5PVEU6IHdlIHJldHVybiBcImFueVwiIGhlcmUgdG8gc2F0aXN0ZnkganNpaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGxhbWJkYXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBhdHRyaWJ1dGUoY3VzdG9tTmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiAocHJvdG90eXBlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gY3VzdG9tTmFtZSB8fCBrZXk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLmdldEF0dChuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGZvciB0aGlzIHJlc291cmNlLCBzdWNoIGFzIGNvbmRpdGlvbiwgdXBkYXRlIHBvbGljeSBldGMuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlc291cmNlT3B0aW9ucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQVdTIHJlc291cmNlIHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQVdTIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvcGVydGllczogYW55O1xuXG4gICAgcHJpdmF0ZSBkZXBlbmRzT24gPSBuZXcgQXJyYXk8SURlcGVuZGFibGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVzb3VyY2UgY29uc3RydWN0LlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGUgVGhlIENsb3VkRm9ybWF0aW9uIHR5cGUgb2YgdGhpcyByZXNvdXJjZSAoZS5nLiBBV1M6OkR5bmFtb0RCOjpUYWJsZSlcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUmVzb3VyY2VQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIGlmICghcHJvcHMudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHR5cGVgIHByb3BlcnR5IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc291cmNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BzLnByb3BlcnRpZXMgfHwgeyB9O1xuXG4gICAgICAgIC8vICduYW1lJyBpcyBhIHNwZWNpYWwgcHJvcGVydHkgaW5jbHVkZWQgZm9yIHJlc291cmNlIGNvbnN0cnVjdHMgYW5kIHBhc3NlZFxuICAgICAgICAvLyBhcyAnbmFtZScsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubmFtZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucHJvcGVydGllcy5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRva2VuIGZvciBhbiBydW50aW1lIGF0dHJpYnV0ZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqIElkZWFsbHksIHVzZSBnZW5lcmF0ZWQgYXR0cmlidXRlIGFjY2Vzc29ycyAoZS5nLiBgcmVzb3VyY2UuYXJuYCksIGJ1dCB0aGlzIGNhbiBiZSB1c2VkIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eVxuICAgICAqIGluIGNhc2UgdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBdHQoYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbih7ICdGbjo6R2V0QXR0JzogW3RoaXMubG9naWNhbElkLCBhdHRyaWJ1dGVOYW1lXSB9LCBgJHt0aGlzLmxvZ2ljYWxJZH0uJHthdHRyaWJ1dGVOYW1lfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG90aGVyIFRoZSBvdGhlciByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRGVwZW5kZW5jeSguLi5vdGhlcjogSURlcGVuZGFibGVbXSkge1xuICAgICAgICB0aGlzLmRlcGVuZHNPbi5wdXNoKC4uLm90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBDbG91ZEZvcm1hdGlvbiBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiBpZ25vcmVFbXB0eSh0aGlzLnJlbmRlclByb3BlcnRpZXMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRzT246IGlnbm9yZUVtcHR5KHRoaXMucmVuZGVyRGVwZW5kc09uKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb25Qb2xpY3k6ICBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMuY3JlYXRpb25Qb2xpY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlUG9saWN5OiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMudXBkYXRlUG9saWN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uUG9saWN5OiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMuZGVsZXRpb25Qb2xpY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGE6IGlnbm9yZUVtcHR5KHRoaXMub3B0aW9ucy5tZXRhZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb246IHRoaXMub3B0aW9ucy5jb25kaXRpb24gJiYgdGhpcy5vcHRpb25zLmNvbmRpdGlvbi5sb2dpY2FsSWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIENoYW5nZSBtZXNzYWdlXG4gICAgICAgICAgICBlLm1lc3NhZ2UgPSBgV2hpbGUgc3ludGhlc2l6aW5nICR7dGhpcy5wYXRofTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIC8vIEFkanVzdCBzdGFjayB0cmFjZSAobWFrZSBpdCBsb29rIGxpa2Ugbm9kZSBidWlsdCBpdCwgdG9vLi4uKVxuICAgICAgICAgICAgY29uc3QgY3JlYXRpb25TdGFjayA9IFsnLS0tIHJlc291cmNlIGNyZWF0ZWQgYXQgLS0tJywgLi4udGhpcy5jcmVhdGlvblN0YWNrVHJhY2VdLmpvaW4oJ1xcbiAgICBhdCAnKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2JsZW1UcmFjZSA9IGUuc3RhY2suc3Vic3RyKGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpICsgZS5tZXNzYWdlLmxlbmd0aCk7XG4gICAgICAgICAgICBlLnN0YWNrID0gYCR7ZS5tZXNzYWdlfVxcbiAgICAke2NyZWF0aW9uU3RhY2t9XFxuICAgIC0tLSBwcm9ibGVtIGRpc2NvdmVyZWQgYXQgLS0tJHtwcm9ibGVtVHJhY2V9YDtcbiAgICAgICAgICAgIC8vIFJlLXRocm93XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlclByb3BlcnRpZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIC8vIEZJWE1FOiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIG5vdCBncmVhdCwgaXQgc2hvdWxkIHRocm93LCBidXQgaXQgYXZvaWRzIGJyZWFraW5nIGFsbCB1bml0IHRlc3RzIGZvciBub3cuXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJEZXBlbmRzT24oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxJRHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIHRoaXMuZGVwZW5kc09uKSB7XG4gICAgICAgICAgICBhZGREZXBlbmRlbmN5KGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obG9naWNhbElEcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShkOiBJRGVwZW5kYWJsZSkge1xuICAgICAgICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IChkZXAgYXMgU3RhY2tFbGVtZW50KS5sb2dpY2FsSWQ7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxJZCkge1xuICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSURzLmFkZChsb2dpY2FsSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBicmVhayBpZiBkZXBlbmRlbmN5RWxlbWVudHMgaW5jbHVkZSBvbmx5ICdkJywgd2hpY2ggbWVhbnMgd2UgcmVhY2hlZCBhIHRlcm1pbmFsLlxuICAgICAgICAgICAgaWYgKGQuZGVwZW5kZW5jeUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBkLmRlcGVuZGVuY3lFbGVtZW50c1swXSA9PT0gZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4gYWRkRGVwZW5kZW5jeShkZXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvICd0cnVlJyB3aGVuIHRoZSBzdGFja1xuICAgICAqIGlzIGRlcGxveWVkLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBpbmNsdWRlZC4gVGhpcyBpcyBwcm92aWRlZCB0byBhbGxvdyBDREsgcHJvamVjdHMgdG8gcHJvZHVjZSBsZWdhY3kgdGVtcGxhdGVzLCBidXQgbm9yYW1sbHlcbiAgICAgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBpdCBpbiBDREsgcHJvamVjdHMuXG4gICAgICovXG4gICAgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQXNzb2NpYXRlIHRoZSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgd2l0aCBhIHJlc291cmNlIHRvIHByZXZlbnQgaXRzIHN0YXR1cyBmcm9tIHJlYWNoaW5nIGNyZWF0ZSBjb21wbGV0ZSB1bnRpbFxuICAgICAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZWNlaXZlcyBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc3VjY2VzcyBzaWduYWxzIG9yIHRoZSB0aW1lb3V0IHBlcmlvZCBpcyBleGNlZWRlZC4gVG8gc2lnbmFsIGFcbiAgICAgKiByZXNvdXJjZSwgeW91IGNhbiB1c2UgdGhlIGNmbi1zaWduYWwgaGVscGVyIHNjcmlwdCBvciBTaWduYWxSZXNvdXJjZSBBUEkuIEFXUyBDbG91ZEZvcm1hdGlvbiBwdWJsaXNoZXMgdmFsaWQgc2lnbmFsc1xuICAgICAqIHRvIHRoZSBzdGFjayBldmVudHMgc28gdGhhdCB5b3UgdHJhY2sgdGhlIG51bWJlciBvZiBzaWduYWxzIHNlbnQuXG4gICAgICovXG4gICAgY3JlYXRpb25Qb2xpY3k/OiBDcmVhdGlvblBvbGljeTtcblxuICAgIC8qKlxuICAgICAqIFdpdGggdGhlIERlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSB5b3UgY2FuIHByZXNlcnZlIG9yIChpbiBzb21lIGNhc2VzKSBiYWNrdXAgYSByZXNvdXJjZSB3aGVuIGl0cyBzdGFjayBpcyBkZWxldGVkLlxuICAgICAqIFlvdSBzcGVjaWZ5IGEgRGVsZXRpb25Qb2xpY3kgYXR0cmlidXRlIGZvciBlYWNoIHJlc291cmNlIHRoYXQgeW91IHdhbnQgdG8gY29udHJvbC4gSWYgYSByZXNvdXJjZSBoYXMgbm8gRGVsZXRpb25Qb2xpY3lcbiAgICAgKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICAgICAqIHRoYXQgbGVhZCB0byByZXNvdXJjZXMgYmVpbmcgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGlvblBvbGljeT86IERlbGV0aW9uUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogVXNlIHRoZSBVcGRhdGVQb2xpY3kgYXR0cmlidXRlIHRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcbiAgICAgKiByZXNvdXJjZS4gQVdTIENsb3VkRm9ybWF0aW9uIGludm9rZXMgb25lIG9mIHRocmVlIHVwZGF0ZSBwb2xpY2llcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY2hhbmdlIHlvdSBtYWtlIG9yIHdoZXRoZXIgYVxuICAgICAqIHNjaGVkdWxlZCBhY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAgICovXG4gICAgdXBkYXRlUG9saWN5PzogVXBkYXRlUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZS4gVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNvbnN0cnVjdCBtZXRhZGF0YSB3aGljaCBjYW4gYmUgYWRkZWRcbiAgICAgKiB1c2luZyBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoKSwgYnV0IHdvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuIl19
/**
* Merges `source` into `target`, overriding any existing values.
* `null`s will cause a value to be deleted.
*/
function deepMerge(target, source) {
if (typeof (source) !== 'object' || typeof (target) !== 'object') {
throw new Error(`Invalid usage. Both source (${JSON.stringify(source)}) and target (${JSON.stringify(target)}) must be objects`);
}
for (const key of Object.keys(source)) {
const value = source[key];
if (typeof (value) === 'object' && value != null && !Array.isArray(value)) {
// if the value at the target is not an object, override it with an
// object so we can continue the recursion
if (typeof (target[key]) !== 'object') {
target[key] = {};
}
deepMerge(target[key], value);
// if the result of the merge is an empty object, it's because the
// eventual value we assigned is `undefined`, and there are no
// sibling concrete values alongside, so we can delete this tree.
const output = target[key];
if (typeof (output) === 'object' && Object.keys(output).length === 0) {
delete target[key];
}
}
else if (value === undefined) {
delete target[key];
}
else {
target[key] = value;
}
}
return target;
}
exports.deepMerge = deepMerge;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW1FO0FBY25FOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQWE7SUFxRHpDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDL0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXpDdEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQU85Qzs7Ozs7Ozs7O1dBU0c7UUFDZ0IsNkJBQXdCLEdBQVEsRUFBRyxDQUFDO1FBU3ZEOztXQUVHO1FBQ2MsaUJBQVksR0FBUSxFQUFHLENBQUM7UUFFakMsY0FBUyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFTM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUcsQ0FBQztRQUUxQywyRUFBMkU7UUFDM0Usc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7SUF2RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBbUI7UUFDekMsT0FBTyxDQUFDLFNBQWMsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFF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QUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hFLG1FQUFtRTtZQUNuRSwwQ0FBMEM7WUFDMUMsSUFBSSxPQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRyxDQUFDO2FBQ25CO1lBRUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUU5QixrRUFBa0U7WUFDbEUsOERBQThEO1lBQzlELGlFQUFpRTtZQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxPQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7U0FDRjthQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjthQUFNO1lBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNyQjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQS9CRCw4QkErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcywgaWdub3JlRW1wdHkgfSBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ3JlYXRpb25Qb2xpY3ksIERlbGV0aW9uUG9saWN5LCBVcGRhdGVQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5pbXBvcnQgeyBJRGVwZW5kYWJsZSwgUmVmZXJlbmNlYWJsZSwgU3RhY2tFbGVtZW50IH0gZnJvbSAnLi9zdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlLlxuICAgKi9cbiAgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJvcGVydGllcz86IGFueTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZSBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAvKipcbiAgICogQSBkZWNvcmF0aW9uIHVzZWQgdG8gY3JlYXRlIGEgQ2xvdWRGb3JtYXRpb24gYXR0cmlidXRlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gY3VzdG9tTmFtZSBDdXN0b20gbmFtZSBmb3IgdGhlIGF0dHJpYnV0ZSAoZGVmYXVsdCBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkpXG4gICAqIE5PVEU6IHdlIHJldHVybiBcImFueVwiIGhlcmUgdG8gc2F0aXN0ZnkganNpaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGxhbWJkYXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0dHJpYnV0ZShjdXN0b21OYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gKHByb3RvdHlwZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbU5hbWUgfHwga2V5O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5nZXRBdHQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhpcyByZXNvdXJjZSwgc3VjaCBhcyBjb25kaXRpb24sIHVwZGF0ZSBwb2xpY3kgZXRjLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlc291cmNlT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBV1MgcmVzb3VyY2UgdHlwZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIHJlc291cmNlIHByb3BlcnR5IG92ZXJyaWRlcy5cbiAgICpcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgdGhlIG1ldGhvZCBcInJlbmRlclByb3BlcnRpZXModGhpcy5vdmVycmlkZXMpXCIgaXMgY2FsbGVkXG4gICAqIHdpdGggdGhpcyBvYmplY3QsIGFuZCBtZXJnZWQgb24gdG9wIG9mIHRoZSBvdXRwdXQgb2ZcbiAgICogXCJyZW5kZXJQcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcylcIi5cbiAgICpcbiAgICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBleHBvc2UgYSBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IGFzXG4gICAqIGEgcHVibGljIHByb3BlcnR5IGNhbGxlZCBgcHJvcGVydHlPdmVycmlkZXNgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHVudHlwZWRQcm9wZXJ0eU92ZXJyaWRlczogYW55ID0geyB9O1xuXG4gIC8qKlxuICAgKiBBV1MgcmVzb3VyY2UgcHJvcGVydGllcy5cbiAgICpcbiAgICogVGhpcyBvYmplY3QgaXMgcmVuZGVyZWQgdmlhIGEgY2FsbCB0byBcInJlbmRlclByb3BlcnRpZXModGhpcy5wcm9wZXJ0aWVzKVwiLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb3BlcnRpZXM6IGFueTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHRvIGJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIGVudGlyZSByZXNvdXJjZSBkZWZpbml0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByYXdPdmVycmlkZXM6IGFueSA9IHsgfTtcblxuICBwcml2YXRlIGRlcGVuZHNPbiA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlc291cmNlIGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHJlc291cmNlVHlwZSBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGlzIHJlc291cmNlIChlLmcuIEFXUzo6RHluYW1vREI6OlRhYmxlKVxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgaWYgKCFwcm9wcy50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgdHlwZWAgcHJvcGVydHkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHMucHJvcGVydGllcyB8fCB7IH07XG5cbiAgICAvLyAnbmFtZScgaXMgYSBzcGVjaWFsIHByb3BlcnR5IGluY2x1ZGVkIGZvciByZXNvdXJjZSBjb25zdHJ1Y3RzIGFuZCBwYXNzZWRcbiAgICAvLyBhcyAnbmFtZScsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgaWYgKHRoaXMucHJvcGVydGllcy5uYW1lKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiBmb3IgYW4gcnVudGltZSBhdHRyaWJ1dGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICogSWRlYWxseSwgdXNlIGdlbmVyYXRlZCBhdHRyaWJ1dGUgYWNjZXNzb3JzIChlLmcuIGByZXNvdXJjZS5hcm5gKSwgYnV0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5XG4gICAqIGluIGNhc2UgdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRBdHQoYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHsgJ0ZuOjpHZXRBdHQnOiBbdGhpcy5sb2dpY2FsSWQsIGF0dHJpYnV0ZU5hbWVdIH0sIGAke3RoaXMubG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciByZXNvdXJjZS5cbiAgICogQHBhcmFtIG90aGVyIFRoZSBvdGhlciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLm90aGVyOiBJRGVwZW5kYWJsZVtdKSB7XG4gICAgdGhpcy5kZXBlbmRzT24ucHVzaCguLi5vdGhlcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBvdmVycmlkZSB0byB0aGUgc3ludGhlc2l6ZWQgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuIFRvIGFkZCBhXG4gICAqIHByb3BlcnR5IG92ZXJyaWRlLCBlaXRoZXIgdXNlIGBhZGRQcm9wZXJ0eU92ZXJyaWRlYCBvciBwcmVmaXggYHBhdGhgIHdpdGhcbiAgICogXCJQcm9wZXJ0aWVzLlwiIChpLmUuIGBQcm9wZXJ0aWVzLlRvcGljTmFtZWApLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5LCB5b3UgY2FuIHVzZSBkb3Qgbm90YXRpb24gdG9cbiAgICogICAgICAgIG92ZXJyaWRlIHZhbHVlcyBpbiBjb21wbGV4IHR5cGVzLiBBbnkgaW50ZXJtZGVkaWF0ZSBrZXlzXG4gICAqICAgICAgICB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLiBDb3VsZCBiZSBwcmltaXRpdmUgb3IgY29tcGxleC5cbiAgICovXG4gIHB1YmxpYyBhZGRPdmVycmlkZShwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycjogYW55ID0gdGhpcy5yYXdPdmVycmlkZXM7XG5cbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKSE7XG5cbiAgICAgIC8vIGlmIHdlIGNhbid0IHJlY3Vyc2UgZnVydGhlciBvciB0aGUgcHJldmlvdXMgdmFsdWUgaXMgbm90IGFuXG4gICAgICAvLyBvYmplY3Qgb3ZlcndyaXRlIGl0IHdpdGggYW4gb2JqZWN0LlxuICAgICAgY29uc3QgaXNPYmplY3QgPSBjdXJyW2tleV0gIT0gbnVsbCAmJiB0eXBlb2YoY3VycltrZXldKSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY3VycltrZXldKTtcbiAgICAgIGlmICghaXNPYmplY3QpIHtcbiAgICAgICAgY3VycltrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBjdXJyID0gY3VycltrZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RLZXkgPSBwYXJ0cy5zaGlmdCgpITtcbiAgICBjdXJyW2xhc3RLZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU3ludGFjdGljIHN1Z2FyIGZvciBgYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKWAuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSB2YWx1ZSB0byBkZWxldGVcbiAgICovXG4gIHB1YmxpYyBhZGREZWxldGlvbk92ZXJyaWRlKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIG92ZXJyaWRlIHRvIGEgcmVzb3VyY2UgcHJvcGVydHkuXG4gICAqXG4gICAqIFN5bnRhY3RpYyBzdWdhciBmb3IgYGFkZE92ZXJyaWRlKFwiUHJvcGVydGllcy48Li4uPlwiLCB2YWx1ZSlgLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUoYFByb3BlcnRpZXMuJHtwcm9wZXJ0eVBhdGh9YCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gb3ZlcnJpZGUgdGhhdCBkZWxldGVzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGZyb20gdGhlIHJlc291cmNlIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgQ2xvdWRGb3JtYXRpb24gZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHRyeSB7XG4gICAgICAvLyBtZXJnZSBwcm9wZXJ0eSBvdmVycmlkZXMgb250byBwcm9wZXJ0aWVzIGFuZCB0aGVuIHJlbmRlciAoYW5kIHZhbGlkYXRlKS5cbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnJlbmRlclByb3BlcnRpZXMoZGVlcE1lcmdlKHRoaXMucHJvcGVydGllcyB8fCB7IH0sIHRoaXMudW50eXBlZFByb3BlcnR5T3ZlcnJpZGVzKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IGRlZXBNZXJnZSh7XG4gICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIFByb3BlcnRpZXM6IGlnbm9yZUVtcHR5KHByb3BlcnRpZXMpLFxuICAgICAgICAgICAgRGVwZW5kc09uOiBpZ25vcmVFbXB0eSh0aGlzLnJlbmRlckRlcGVuZHNPbigpKSxcbiAgICAgICAgICAgIENyZWF0aW9uUG9saWN5OiAgY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmNyZWF0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIFVwZGF0ZVBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLnVwZGF0ZVBvbGljeSksXG4gICAgICAgICAgICBEZWxldGlvblBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmRlbGV0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIE1ldGFkYXRhOiBpZ25vcmVFbXB0eSh0aGlzLm9wdGlvbnMubWV0YWRhdGEpLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiB0aGlzLm9wdGlvbnMuY29uZGl0aW9uICYmIHRoaXMub3B0aW9ucy5jb25kaXRpb24ubG9naWNhbElkXG4gICAgICAgICAgfSwgdGhpcy5yYXdPdmVycmlkZXMpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2hhbmdlIG1lc3NhZ2VcbiAgICAgIGUubWVzc2FnZSA9IGBXaGlsZSBzeW50aGVzaXppbmcgJHt0aGlzLnBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgICAgLy8gQWRqdXN0IHN0YWNrIHRyYWNlIChtYWtlIGl0IGxvb2sgbGlrZSBub2RlIGJ1aWx0IGl0LCB0b28uLi4pXG4gICAgICBjb25zdCBjcmVhdGlvblN0YWNrID0gWyctLS0gcmVzb3VyY2UgY3JlYXRlZCBhdCAtLS0nLCAuLi50aGlzLmNyZWF0aW9uU3RhY2tUcmFjZV0uam9pbignXFxuICBhdCAnKTtcbiAgICAgIGNvbnN0IHByb2JsZW1UcmFjZSA9IGUuc3RhY2suc3Vic3RyKGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpICsgZS5tZXNzYWdlLmxlbmd0aCk7XG4gICAgICBlLnN0YWNrID0gYCR7ZS5tZXNzYWdlfVxcbiAgJHtjcmVhdGlvblN0YWNrfVxcbiAgLS0tIHByb2JsZW0gZGlzY292ZXJlZCBhdCAtLS0ke3Byb2JsZW1UcmFjZX1gO1xuICAgICAgLy8gUmUtdGhyb3dcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclByb3BlcnRpZXMocHJvcGVydGllczogYW55KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlcGVuZHNPbigpIHtcbiAgICBjb25zdCBsb2dpY2FsSURzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBkIG9mIHRoaXMuZGVwZW5kc09uKSB7XG4gICAgICBhZGREZXBlbmRlbmN5KGQpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGxvZ2ljYWxJRHMpO1xuXG4gICAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShkOiBJRGVwZW5kYWJsZSkge1xuICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICBjb25zdCBsb2dpY2FsSWQgPSAoZGVwIGFzIFN0YWNrRWxlbWVudCkubG9naWNhbElkO1xuICAgICAgICBpZiAobG9naWNhbElkKSB7XG4gICAgICAgICAgbG9naWNhbElEcy5hZGQobG9naWNhbElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGJyZWFrIGlmIGRlcGVuZGVuY3lFbGVtZW50cyBpbmNsdWRlIG9ubHkgJ2QnLCB3aGljaCBtZWFucyB3ZSByZWFjaGVkIGEgdGVybWluYWwuXG4gICAgICBpZiAoZC5kZXBlbmRlbmN5RWxlbWVudHMubGVuZ3RoID09PSAxICYmIGQuZGVwZW5kZW5jeUVsZW1lbnRzWzBdID09PSBkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQuZGVwZW5kZW5jeUVsZW1lbnRzLmZvckVhY2goZGVwID0+IGFkZERlcGVuZGVuY3koZGVwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY29uZGl0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvICd0cnVlJyB3aGVuIHRoZSBzdGFja1xuICAgKiBpcyBkZXBsb3llZCwgdGhlIHJlc291cmNlIHdpbGwgYmUgaW5jbHVkZWQuIFRoaXMgaXMgcHJvdmlkZWQgdG8gYWxsb3cgQ0RLIHByb2plY3RzIHRvIHByb2R1Y2UgbGVnYWN5IHRlbXBsYXRlcywgYnV0IG5vcmFtbGx5XG4gICAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGl0IGluIENESyBwcm9qZWN0cy5cbiAgICovXG4gIGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAvKipcbiAgICogQXNzb2NpYXRlIHRoZSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgd2l0aCBhIHJlc291cmNlIHRvIHByZXZlbnQgaXRzIHN0YXR1cyBmcm9tIHJlYWNoaW5nIGNyZWF0ZSBjb21wbGV0ZSB1bnRpbFxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVjZWl2ZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHN1Y2Nlc3Mgc2lnbmFscyBvciB0aGUgdGltZW91dCBwZXJpb2QgaXMgZXhjZWVkZWQuIFRvIHNpZ25hbCBhXG4gICAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gICAqIHRvIHRoZSBzdGFjayBldmVudHMgc28gdGhhdCB5b3UgdHJhY2sgdGhlIG51bWJlciBvZiBzaWduYWxzIHNlbnQuXG4gICAqL1xuICBjcmVhdGlvblBvbGljeT86IENyZWF0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgeW91IGNhbiBwcmVzZXJ2ZSBvciAoaW4gc29tZSBjYXNlcykgYmFja3VwIGEgcmVzb3VyY2Ugd2hlbiBpdHMgc3RhY2sgaXMgZGVsZXRlZC5cbiAgICogWW91IHNwZWNpZnkgYSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCB5b3Ugd2FudCB0byBjb250cm9sLiBJZiBhIHJlc291cmNlIGhhcyBubyBEZWxldGlvblBvbGljeVxuICAgKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICAgKiB0aGF0IGxlYWQgdG8gcmVzb3VyY2VzIGJlaW5nIHJlbW92ZWQuXG4gICAqL1xuICBkZWxldGlvblBvbGljeT86IERlbGV0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIFVwZGF0ZVBvbGljeSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxuICAgKiByZXNvdXJjZS4gQVdTIENsb3VkRm9ybWF0aW9uIGludm9rZXMgb25lIG9mIHRocmVlIHVwZGF0ZSBwb2xpY2llcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY2hhbmdlIHlvdSBtYWtlIG9yIHdoZXRoZXIgYVxuICAgKiBzY2hlZHVsZWQgYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKi9cbiAgdXBkYXRlUG9saWN5PzogVXBkYXRlUG9saWN5O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29uc3RydWN0IG1ldGFkYXRhIHdoaWNoIGNhbiBiZSBhZGRlZFxuICAgKiB1c2luZyBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoKSwgYnV0IHdvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogTWVyZ2VzIGBzb3VyY2VgIGludG8gYHRhcmdldGAsIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIHZhbHVlcy5cbiAqIGBudWxsYHMgd2lsbCBjYXVzZSBhIHZhbHVlIHRvIGJlIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2UodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gIGlmICh0eXBlb2Yoc291cmNlKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mKHRhcmdldCkgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzYWdlLiBCb3RoIHNvdXJjZSAoJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpfSkgYW5kIHRhcmdldCAoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfSkgbXVzdCBiZSBvYmplY3RzYCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzb3VyY2UpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBhdCB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBvYmplY3QsIG92ZXJyaWRlIGl0IHdpdGggYW5cbiAgICAgIC8vIG9iamVjdCBzbyB3ZSBjYW4gY29udGludWUgdGhlIHJlY3Vyc2lvblxuICAgICAgaWYgKHR5cGVvZih0YXJnZXRba2V5XSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBkZWVwTWVyZ2UodGFyZ2V0W2tleV0sIHZhbHVlKTtcblxuICAgICAgLy8gaWYgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UgaXMgYW4gZW1wdHkgb2JqZWN0LCBpdCdzIGJlY2F1c2UgdGhlXG4gICAgICAvLyBldmVudHVhbCB2YWx1ZSB3ZSBhc3NpZ25lZCBpcyBgdW5kZWZpbmVkYCwgYW5kIHRoZXJlIGFyZSBub1xuICAgICAgLy8gc2libGluZyBjb25jcmV0ZSB2YWx1ZXMgYWxvbmdzaWRlLCBzbyB3ZSBjYW4gZGVsZXRlIHRoaXMgdHJlZS5cbiAgICAgIGNvbnN0IG91dHB1dCA9IHRhcmdldFtrZXldO1xuICAgICAgaWYgKHR5cGVvZihvdXRwdXQpID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvdXRwdXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbiJdfQ==

@@ -57,2 +57,2 @@ "use strict";

exports.Rule = Rule;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSx1Q0FBdUQ7QUFFdkQsbUNBQXdDO0FBb0N4Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsSUFBSyxTQUFRLHFCQUFhO0lBWW5DOzs7O09BSUc7SUFDSCxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQWlCO1FBQzFELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLFNBQXNCLEVBQUUsV0FBbUI7UUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqQixNQUFNLEVBQUUsU0FBUztZQUNqQixpQkFBaUIsRUFBRSxXQUFXO1NBQ2pDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILEtBQUssRUFBRTtnQkFDSCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ2pDLFVBQVUsRUFBRSw4QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUN2RDthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSjtBQWxERCxvQkFrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyB9IGZyb20gJy4uL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBGbkNvbmRpdGlvbiB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgUmVmZXJlbmNlYWJsZSB9IGZyb20gJy4vc3RhY2snO1xuXG4vKipcbiAqIEEgcnVsZSBjYW4gaW5jbHVkZSBhIFJ1bGVDb25kaXRpb24gcHJvcGVydHkgYW5kIG11c3QgaW5jbHVkZSBhbiBBc3NlcnRpb25zIHByb3BlcnR5LlxuICogRm9yIGVhY2ggcnVsZSwgeW91IGNhbiBkZWZpbmUgb25seSBvbmUgcnVsZSBjb25kaXRpb247IHlvdSBjYW4gZGVmaW5lIG9uZSBvciBtb3JlIGFzc2VydHMgd2l0aGluIHRoZSBBc3NlcnRpb25zIHByb3BlcnR5LlxuICogWW91IGRlZmluZSBhIHJ1bGUgY29uZGl0aW9uIGFuZCBhc3NlcnRpb25zIGJ5IHVzaW5nIHJ1bGUtc3BlY2lmaWMgaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHJ1bGUtc3BlY2lmaWMgaW50cmluc2ljIGZ1bmN0aW9ucyB0byBkZWZpbmUgcnVsZSBjb25kaXRpb25zIGFuZCBhc3NlcnRpb25zOlxuICpcbiAqICBGbjo6QW5kXG4gKiAgRm46OkNvbnRhaW5zXG4gKiAgRm46OkVhY2hNZW1iZXJFcXVhbHNcbiAqICBGbjo6RWFjaE1lbWJlckluXG4gKiAgRm46OkVxdWFsc1xuICogIEZuOjpJZlxuICogIEZuOjpOb3RcbiAqICBGbjo6T3JcbiAqICBGbjo6UmVmQWxsXG4gKiAgRm46OlZhbHVlT2ZcbiAqICBGbjo6VmFsdWVPZkFsbFxuICpcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlY2F0YWxvZy9sYXRlc3QvYWRtaW5ndWlkZS9yZWZlcmVuY2UtdGVtcGxhdGVfY29uc3RyYWludF9ydWxlcy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcnVsZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlLCB0aGUgcnVsZSBkb2Vzbid0IHRha2UgZWZmZWN0LlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiBpbiB0aGUgcnVsZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIGV4cHJlc3Npb25zIGluIGVhY2ggYXNzZXJ0IGFyZSBldmFsdWF0ZWQgYW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgcnVsZUNvbmRpdGlvbj86IEZuQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQXNzZXJ0aW9ucyB3aGljaCBkZWZpbmUgdGhlIHJ1bGUuXG4gICAgICovXG4gICAgYXNzZXJ0aW9ucz86IFJ1bGVBc3NlcnRpb25bXTtcbn1cblxuLyoqXG4gKiBUaGUgUnVsZXMgdGhhdCBkZWZpbmUgdGVtcGxhdGUgY29uc3RyYWludHMgaW4gYW4gQVdTIFNlcnZpY2UgQ2F0YWxvZyBwb3J0Zm9saW8gZGVzY3JpYmUgd2hlblxuICogZW5kIHVzZXJzIGNhbiB1c2UgdGhlIHRlbXBsYXRlIGFuZCB3aGljaCB2YWx1ZXMgdGhleSBjYW4gc3BlY2lmeSBmb3IgcGFyYW1ldGVycyB0aGF0IGFyZSBkZWNsYXJlZFxuICogaW4gdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB1c2VkIHRvIGNyZWF0ZSB0aGUgcHJvZHVjdCB0aGV5IGFyZSBhdHRlbXB0aW5nIHRvIHVzZS4gUnVsZXNcbiAqIGFyZSB1c2VmdWwgZm9yIHByZXZlbnRpbmcgZW5kIHVzZXJzIGZyb20gaW5hZHZlcnRlbnRseSBzcGVjaWZ5aW5nIGFuIGluY29ycmVjdCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCBhIHJ1bGUgdG8gdmVyaWZ5IHdoZXRoZXIgZW5kIHVzZXJzIHNwZWNpZmllZCBhIHZhbGlkIHN1Ym5ldCBpbiBhXG4gKiBnaXZlbiBWUEMgb3IgdXNlZCBtMS5zbWFsbCBpbnN0YW5jZSB0eXBlcyBmb3IgdGVzdCBlbnZpcm9ubWVudHMuIEFXUyBDbG91ZEZvcm1hdGlvbiB1c2VzXG4gKiBydWxlcyB0byB2YWxpZGF0ZSBwYXJhbWV0ZXIgdmFsdWVzIGJlZm9yZSBpdCBjcmVhdGVzIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBwcm9kdWN0LlxuICpcbiAqIEEgcnVsZSBjYW4gaW5jbHVkZSBhIFJ1bGVDb25kaXRpb24gcHJvcGVydHkgYW5kIG11c3QgaW5jbHVkZSBhbiBBc3NlcnRpb25zIHByb3BlcnR5LlxuICogRm9yIGVhY2ggcnVsZSwgeW91IGNhbiBkZWZpbmUgb25seSBvbmUgcnVsZSBjb25kaXRpb247IHlvdSBjYW4gZGVmaW5lIG9uZSBvciBtb3JlIGFzc2VydHMgd2l0aGluIHRoZSBBc3NlcnRpb25zIHByb3BlcnR5LlxuICogWW91IGRlZmluZSBhIHJ1bGUgY29uZGl0aW9uIGFuZCBhc3NlcnRpb25zIGJ5IHVzaW5nIHJ1bGUtc3BlY2lmaWMgaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAqXG4gKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZWNhdGFsb2cvbGF0ZXN0L2FkbWluZ3VpZGUvcmVmZXJlbmNlLXRlbXBsYXRlX2NvbnN0cmFpbnRfcnVsZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgUnVsZSBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBydWxlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIHRoZSBydWxlIGRvZXNuJ3QgdGFrZSBlZmZlY3QuXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIGluIHRoZSBydWxlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZXhwcmVzc2lvbnMgaW4gZWFjaCBhc3NlcnQgYXJlIGV2YWx1YXRlZCBhbmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVsZUNvbmRpdGlvbj86IEZuQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQXNzZXJ0aW9ucyB3aGljaCBkZWZpbmUgdGhlIHJ1bGUuXG4gICAgICovXG4gICAgcHVibGljIGFzc2VydGlvbnM/OiBSdWxlQXNzZXJ0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuZCBhZGRzIGEgcnVsZS5cbiAgICAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29uc3RydWN0LlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcnVsZSBwcm9wcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wcz86IFJ1bGVQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMucnVsZUNvbmRpdGlvbiA9IHByb3BzICYmIHByb3BzLnJ1bGVDb25kaXRpb247XG4gICAgICAgIHRoaXMuYXNzZXJ0aW9ucyA9IHByb3BzICYmIHByb3BzLmFzc2VydGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBhc3NlcnRpb24gdG8gdGhlIHJ1bGUuXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgZXhwcmVzc2lvbiB0byBldmFsdWF0aW9uLlxuICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGFzc2VydGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQXNzZXJ0aW9uKGNvbmRpdGlvbjogRm5Db25kaXRpb24sIGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFzc2VydGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0aW9ucyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hc3NlcnRpb25zLnB1c2goe1xuICAgICAgICAgICAgYXNzZXJ0OiBjb25kaXRpb24sXG4gICAgICAgICAgICBhc3NlcnREZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ2xvdWRGb3JtYXRpb24oKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgICAgICAgICAgICBSdWxlQ29uZGl0aW9uOiB0aGlzLnJ1bGVDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIEFzc2VydGlvbnM6IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHRoaXMuYXNzZXJ0aW9ucylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIEEgcnVsZSBhc3NlcnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUFzc2VydGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGFzc2VydGlvbi5cbiAgICAgKi9cbiAgICBhc3NlcnQ6IEZuQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFzc2VydGlvbiBkZXNjcmlwdGlvbi5cbiAgICAgKi9cbiAgICBhc3NlcnREZXNjcmlwdGlvbjogc3RyaW5nO1xufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSx1Q0FBdUQ7QUFFdkQsbUNBQXdDO0FBb0N4Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsSUFBSyxTQUFRLHFCQUFhO0lBWXJDOzs7O09BSUc7SUFDSCxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQWlCO1FBQzVELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLFNBQXNCLEVBQUUsV0FBbUI7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixNQUFNLEVBQUUsU0FBUztZQUNqQixpQkFBaUIsRUFBRSxXQUFXO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDaEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO29CQUNqQyxVQUFVLEVBQUUsOEJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDckQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsREQsb0JBa0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMgfSBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgRm5Db25kaXRpb24gfSBmcm9tICcuL2ZuJztcbmltcG9ydCB7IFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuLyoqXG4gKiBBIHJ1bGUgY2FuIGluY2x1ZGUgYSBSdWxlQ29uZGl0aW9uIHByb3BlcnR5IGFuZCBtdXN0IGluY2x1ZGUgYW4gQXNzZXJ0aW9ucyBwcm9wZXJ0eS5cbiAqIEZvciBlYWNoIHJ1bGUsIHlvdSBjYW4gZGVmaW5lIG9ubHkgb25lIHJ1bGUgY29uZGl0aW9uOyB5b3UgY2FuIGRlZmluZSBvbmUgb3IgbW9yZSBhc3NlcnRzIHdpdGhpbiB0aGUgQXNzZXJ0aW9ucyBwcm9wZXJ0eS5cbiAqIFlvdSBkZWZpbmUgYSBydWxlIGNvbmRpdGlvbiBhbmQgYXNzZXJ0aW9ucyBieSB1c2luZyBydWxlLXNwZWNpZmljIGludHJpbnNpYyBmdW5jdGlvbnMuXG4gKlxuICogWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBydWxlLXNwZWNpZmljIGludHJpbnNpYyBmdW5jdGlvbnMgdG8gZGVmaW5lIHJ1bGUgY29uZGl0aW9ucyBhbmQgYXNzZXJ0aW9uczpcbiAqXG4gKiAgRm46OkFuZFxuICogIEZuOjpDb250YWluc1xuICogIEZuOjpFYWNoTWVtYmVyRXF1YWxzXG4gKiAgRm46OkVhY2hNZW1iZXJJblxuICogIEZuOjpFcXVhbHNcbiAqICBGbjo6SWZcbiAqICBGbjo6Tm90XG4gKiAgRm46Ok9yXG4gKiAgRm46OlJlZkFsbFxuICogIEZuOjpWYWx1ZU9mXG4gKiAgRm46OlZhbHVlT2ZBbGxcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZWNhdGFsb2cvbGF0ZXN0L2FkbWluZ3VpZGUvcmVmZXJlbmNlLXRlbXBsYXRlX2NvbnN0cmFpbnRfcnVsZXMuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVQcm9wcyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgcnVsZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlLCB0aGUgcnVsZSBkb2Vzbid0IHRha2UgZWZmZWN0LlxuICAgKiBJZiB0aGUgZnVuY3Rpb24gaW4gdGhlIHJ1bGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCBleHByZXNzaW9ucyBpbiBlYWNoIGFzc2VydCBhcmUgZXZhbHVhdGVkIGFuZCBhcHBsaWVkLlxuICAgKi9cbiAgcnVsZUNvbmRpdGlvbj86IEZuQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBBc3NlcnRpb25zIHdoaWNoIGRlZmluZSB0aGUgcnVsZS5cbiAgICovXG4gIGFzc2VydGlvbnM/OiBSdWxlQXNzZXJ0aW9uW107XG59XG5cbi8qKlxuICogVGhlIFJ1bGVzIHRoYXQgZGVmaW5lIHRlbXBsYXRlIGNvbnN0cmFpbnRzIGluIGFuIEFXUyBTZXJ2aWNlIENhdGFsb2cgcG9ydGZvbGlvIGRlc2NyaWJlIHdoZW5cbiAqIGVuZCB1c2VycyBjYW4gdXNlIHRoZSB0ZW1wbGF0ZSBhbmQgd2hpY2ggdmFsdWVzIHRoZXkgY2FuIHNwZWNpZnkgZm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUgZGVjbGFyZWRcbiAqIGluIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgdXNlZCB0byBjcmVhdGUgdGhlIHByb2R1Y3QgdGhleSBhcmUgYXR0ZW1wdGluZyB0byB1c2UuIFJ1bGVzXG4gKiBhcmUgdXNlZnVsIGZvciBwcmV2ZW50aW5nIGVuZCB1c2VycyBmcm9tIGluYWR2ZXJ0ZW50bHkgc3BlY2lmeWluZyBhbiBpbmNvcnJlY3QgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQgYSBydWxlIHRvIHZlcmlmeSB3aGV0aGVyIGVuZCB1c2VycyBzcGVjaWZpZWQgYSB2YWxpZCBzdWJuZXQgaW4gYVxuICogZ2l2ZW4gVlBDIG9yIHVzZWQgbTEuc21hbGwgaW5zdGFuY2UgdHlwZXMgZm9yIHRlc3QgZW52aXJvbm1lbnRzLiBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlc1xuICogcnVsZXMgdG8gdmFsaWRhdGUgcGFyYW1ldGVyIHZhbHVlcyBiZWZvcmUgaXQgY3JlYXRlcyB0aGUgcmVzb3VyY2VzIGZvciB0aGUgcHJvZHVjdC5cbiAqXG4gKiBBIHJ1bGUgY2FuIGluY2x1ZGUgYSBSdWxlQ29uZGl0aW9uIHByb3BlcnR5IGFuZCBtdXN0IGluY2x1ZGUgYW4gQXNzZXJ0aW9ucyBwcm9wZXJ0eS5cbiAqIEZvciBlYWNoIHJ1bGUsIHlvdSBjYW4gZGVmaW5lIG9ubHkgb25lIHJ1bGUgY29uZGl0aW9uOyB5b3UgY2FuIGRlZmluZSBvbmUgb3IgbW9yZSBhc3NlcnRzIHdpdGhpbiB0aGUgQXNzZXJ0aW9ucyBwcm9wZXJ0eS5cbiAqIFlvdSBkZWZpbmUgYSBydWxlIGNvbmRpdGlvbiBhbmQgYXNzZXJ0aW9ucyBieSB1c2luZyBydWxlLXNwZWNpZmljIGludHJpbnNpYyBmdW5jdGlvbnMuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2VjYXRhbG9nL2xhdGVzdC9hZG1pbmd1aWRlL3JlZmVyZW5jZS10ZW1wbGF0ZV9jb25zdHJhaW50X3J1bGVzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bGUgZXh0ZW5kcyBSZWZlcmVuY2VhYmxlIHtcbiAgLyoqXG4gICAqIElmIHRoZSBydWxlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIHRoZSBydWxlIGRvZXNuJ3QgdGFrZSBlZmZlY3QuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBpbiB0aGUgcnVsZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIGV4cHJlc3Npb25zIGluIGVhY2ggYXNzZXJ0IGFyZSBldmFsdWF0ZWQgYW5kIGFwcGxpZWQuXG4gICAqL1xuICBwdWJsaWMgcnVsZUNvbmRpdGlvbj86IEZuQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBBc3NlcnRpb25zIHdoaWNoIGRlZmluZSB0aGUgcnVsZS5cbiAgICovXG4gIHB1YmxpYyBhc3NlcnRpb25zPzogUnVsZUFzc2VydGlvbltdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBhZGRzIGEgcnVsZS5cbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHByb3BzIFRoZSBydWxlIHByb3BzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM/OiBSdWxlUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy5ydWxlQ29uZGl0aW9uID0gcHJvcHMgJiYgcHJvcHMucnVsZUNvbmRpdGlvbjtcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBwcm9wcyAmJiBwcm9wcy5hc3NlcnRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYXNzZXJ0aW9uIHRvIHRoZSBydWxlLlxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRpb24uXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGFzc2VydGlvbi5cbiAgICovXG4gIHB1YmxpYyBhZGRBc3NlcnRpb24oY29uZGl0aW9uOiBGbkNvbmRpdGlvbiwgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hc3NlcnRpb25zKSB7XG4gICAgICB0aGlzLmFzc2VydGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaCh7XG4gICAgICBhc3NlcnQ6IGNvbmRpdGlvbixcbiAgICAgIGFzc2VydERlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRvQ2xvdWRGb3JtYXRpb24oKTogb2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgUnVsZXM6IHtcbiAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgIFJ1bGVDb25kaXRpb246IHRoaXMucnVsZUNvbmRpdGlvbixcbiAgICAgICAgICBBc3NlcnRpb25zOiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLmFzc2VydGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSBydWxlIGFzc2VydGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlQXNzZXJ0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24uXG4gICAqL1xuICBhc3NlcnQ6IEZuQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgYXNzZXJ0RGVzY3JpcHRpb246IHN0cmluZztcbn1cbiJdfQ==

@@ -50,2 +50,2 @@ "use strict";

exports.SecretParameter = SecretParameter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBd0M7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxNQUFPLFNBQVEsY0FBSztDQUFJO0FBQXJDLHdCQUFxQztBQTJDckM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBTTFDLFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBa0I7UUFDM0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUMzQyxJQUFJLEVBQUUsb0NBQW9DO1lBQzFDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWTtZQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQXFCO1lBQ2xELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUF2QkQsMENBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuL3BhcmFtZXRlcic7XG5cbi8qKlxuICogQSB0b2tlbiB0aGF0IHJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0J3MgZXhwZWN0ZWQgdG8gYmUgYSBzZWNyZXQsIGxpa2VcbiAqIHBhc3N3b3JkcyBhbmQga2V5cy5cbiAqXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBTZWNyZXRQYXJhbWV0ZXJgIGNvbnN0cnVjdCBpbiBvcmRlciB0byBpbXBvcnRcbiAqIHNlY3JldCB2YWx1ZXMgZnJvbSB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlbSBpbiB5b3VyXG4gKiBjb2RlLlxuICpcbiAqIEhvd2V2ZXIsIHlvdSBjYW4gYWxzbyBqdXN0IHBhc3MgaW4gdmFsdWVzLCBsaWtlIGFueSBvdGhlciB0b2tlbjogYG5ldyBTZWNyZXQoJ2JsYScpYFxuICovXG5leHBvcnQgY2xhc3MgU2VjcmV0IGV4dGVuZHMgVG9rZW4geyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0UHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyIHdoZXJlIHRoZSBzZWNyZXQgdmFsdWUgaXMgc3RvcmVkLlxuICAgICAqL1xuICAgIHNzbVBhcmFtZXRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICogQGRlZmF1bHQgTm8gZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgcGF0dGVybnMgdG8gYWxsb3cgZm9yIFN0cmluZyB0eXBlcy5cbiAgICAgKi9cbiAgICBhbGxvd2VkUGF0dGVybj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdmFsdWVzIGFsbG93ZWQgZm9yIHRoZSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgYWxsb3dlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdGhhdCBleHBsYWlucyBhIGNvbnN0cmFpbnQgd2hlbiB0aGUgY29uc3RyYWludCBpcyB2aW9sYXRlZC5cbiAgICAgKiBGb3IgZXhhbXBsZSwgd2l0aG91dCBhIGNvbnN0cmFpbnQgZGVzY3JpcHRpb24sIGEgcGFyYW1ldGVyIHRoYXQgaGFzIGFuIGFsbG93ZWRcbiAgICAgKiBwYXR0ZXJuIG9mIFtBLVphLXowLTldKyBkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdXNlciBzcGVjaWZpZXNcbiAgICAgKiBhbiBpbnZhbGlkIHZhbHVlOlxuICAgICAqL1xuICAgIGNvbnN0cmFpbnREZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBzZWNyZXQgdmFsdWUgcmVzb2x2ZWQgZnJvbSB0aGUgU3lzdGVtcyBNYW5hZ2VyIChTU00pIFBhcmFtZXRlclxuICogU3RvcmUgZHVyaW5nIGRlcGxveW1lbnQuIFRoaXMgaXMgdXNlZnVsIGZvciByZWZlcmVuY2luZyB2YWx1ZXMgdGhhdCB5b3UgZG9cbiAqIG5vdCB3aXNoIHRvIGluY2x1ZGUgaW4geW91ciBjb2RlIGJhc2UsIHN1Y2ggYXMgc2VjcmV0cywgcGFzc3dvcmRzIGFuZCBrZXlzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IHdpbGwgYWRkIGEgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVyIHRvIHlvdXIgdGVtcGxhdGUgYm91bmQgdG9cbiAqIGFuIFNTTSBwYXJhbWV0ZXIgKG9mIHR5cGUgXCJBV1M6OlNTTTo6UGFyYW1ldGVyOjpWYWx1ZTxTdHJpbmc+XCIpLiBEZXBsb3ltZW50XG4gKiB3aWxsIGZhaWwgaWYgdGhlIHZhbHVlIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cbiAqXG4gKiBJbXBvcnRhbnQ6IEZvciB2YWx1ZXMgb3RoZXIgdGhhbiBzZWNyZXRzLCBwcmVmZXIgdG8gdXNlIHRoZVxuICogYFNTTVBhcmFtZXRlclByb3ZpZGVyYCB3aGljaCByZXNvbHZlcyBTU00gcGFyYW1ldGVyIGluIGRlc2lnbi10aW1lLCBhbmRcbiAqIGVuc3VyZXMgdGhhdCBzdGFjayBkZXBsb3ltZW50cyBhcmUgZGV0ZXJtaW5pc3RpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldFBhcmFtZXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBzZWNyZXQgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWx1ZTogU2VjcmV0O1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFNlY3JldFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKHRoaXMsICdQYXJhbWV0ZXInLCB7XG4gICAgICAgICAgICB0eXBlOiAnQVdTOjpTU006OlBhcmFtZXRlcjo6VmFsdWU8U3RyaW5nPicsXG4gICAgICAgICAgICBkZWZhdWx0OiBwcm9wcy5zc21QYXJhbWV0ZXIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhbGxvd2VkUGF0dGVybjogcHJvcHMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBwcm9wcy5hbGxvd2VkVmFsdWVzLFxuICAgICAgICAgICAgY29uc3RyYWludERlc2NyaXB0aW9uOiBwcm9wcy5jb25zdHJhaW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtYXhMZW5ndGg6IHByb3BzLm1heExlbmd0aCxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogcHJvcHMubWluTGVuZ3RoLFxuICAgICAgICAgICAgbm9FY2hvOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFNlY3JldChwYXJhbS5yZWYpO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBd0M7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxNQUFPLFNBQVEsY0FBSztDQUFJO0FBQXJDLHdCQUFxQztBQTJDckM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBTTVDLFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBa0I7UUFDN0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM3QyxJQUFJLEVBQUUsb0NBQW9DO1lBQzFDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWTtZQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQXFCO1lBQ2xELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUF2QkQsMENBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuL3BhcmFtZXRlcic7XG5cbi8qKlxuICogQSB0b2tlbiB0aGF0IHJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0J3MgZXhwZWN0ZWQgdG8gYmUgYSBzZWNyZXQsIGxpa2VcbiAqIHBhc3N3b3JkcyBhbmQga2V5cy5cbiAqXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBTZWNyZXRQYXJhbWV0ZXJgIGNvbnN0cnVjdCBpbiBvcmRlciB0byBpbXBvcnRcbiAqIHNlY3JldCB2YWx1ZXMgZnJvbSB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlbSBpbiB5b3VyXG4gKiBjb2RlLlxuICpcbiAqIEhvd2V2ZXIsIHlvdSBjYW4gYWxzbyBqdXN0IHBhc3MgaW4gdmFsdWVzLCBsaWtlIGFueSBvdGhlciB0b2tlbjogYG5ldyBTZWNyZXQoJ2JsYScpYFxuICovXG5leHBvcnQgY2xhc3MgU2VjcmV0IGV4dGVuZHMgVG9rZW4geyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIgd2hlcmUgdGhlIHNlY3JldCB2YWx1ZSBpcyBzdG9yZWQuXG4gICAqL1xuICBzc21QYXJhbWV0ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEBkZWZhdWx0IE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoZSBwYXR0ZXJucyB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgKi9cbiAgYWxsb3dlZFBhdHRlcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdmFsdWVzIGFsbG93ZWQgZm9yIHRoZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRoYXQgZXhwbGFpbnMgYSBjb25zdHJhaW50IHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQuXG4gICAqIEZvciBleGFtcGxlLCB3aXRob3V0IGEgY29uc3RyYWludCBkZXNjcmlwdGlvbiwgYSBwYXJhbWV0ZXIgdGhhdCBoYXMgYW4gYWxsb3dlZFxuICAgKiBwYXR0ZXJuIG9mIFtBLVphLXowLTldKyBkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdXNlciBzcGVjaWZpZXNcbiAgICogYW4gaW52YWxpZCB2YWx1ZTpcbiAgICovXG4gIGNvbnN0cmFpbnREZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYXJhY3RlcnMgeW91IHdhbnQgdG8gYWxsb3cgZm9yIFN0cmluZyB0eXBlcy5cbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAqL1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIHNlY3JldCB2YWx1ZSByZXNvbHZlZCBmcm9tIHRoZSBTeXN0ZW1zIE1hbmFnZXIgKFNTTSkgUGFyYW1ldGVyXG4gKiBTdG9yZSBkdXJpbmcgZGVwbG95bWVudC4gVGhpcyBpcyB1c2VmdWwgZm9yIHJlZmVyZW5jaW5nIHZhbHVlcyB0aGF0IHlvdSBkb1xuICogbm90IHdpc2ggdG8gaW5jbHVkZSBpbiB5b3VyIGNvZGUgYmFzZSwgc3VjaCBhcyBzZWNyZXRzLCBwYXNzd29yZHMgYW5kIGtleXMuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgd2lsbCBhZGQgYSBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXIgdG8geW91ciB0ZW1wbGF0ZSBib3VuZCB0b1xuICogYW4gU1NNIHBhcmFtZXRlciAob2YgdHlwZSBcIkFXUzo6U1NNOjpQYXJhbWV0ZXI6OlZhbHVlPFN0cmluZz5cIikuIERlcGxveW1lbnRcbiAqIHdpbGwgZmFpbCBpZiB0aGUgdmFsdWUgZG9lc24ndCBleGlzdCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LlxuICpcbiAqIEltcG9ydGFudDogRm9yIHZhbHVlcyBvdGhlciB0aGFuIHNlY3JldHMsIHByZWZlciB0byB1c2UgdGhlXG4gKiBgU1NNUGFyYW1ldGVyUHJvdmlkZXJgIHdoaWNoIHJlc29sdmVzIFNTTSBwYXJhbWV0ZXIgaW4gZGVzaWduLXRpbWUsIGFuZFxuICogZW5zdXJlcyB0aGF0IHN0YWNrIGRlcGxveW1lbnRzIGFyZSBkZXRlcm1pbmlzdGljLlxuICovXG5leHBvcnQgY2xhc3MgU2VjcmV0UGFyYW1ldGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgc2VjcmV0IHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyB2YWx1ZTogU2VjcmV0O1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTZWNyZXRQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICBjb25zdCBwYXJhbSA9IG5ldyBQYXJhbWV0ZXIodGhpcywgJ1BhcmFtZXRlcicsIHtcbiAgICAgIHR5cGU6ICdBV1M6OlNTTTo6UGFyYW1ldGVyOjpWYWx1ZTxTdHJpbmc+JyxcbiAgICAgIGRlZmF1bHQ6IHByb3BzLnNzbVBhcmFtZXRlcixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGFsbG93ZWRQYXR0ZXJuOiBwcm9wcy5hbGxvd2VkUGF0dGVybixcbiAgICAgIGFsbG93ZWRWYWx1ZXM6IHByb3BzLmFsbG93ZWRWYWx1ZXMsXG4gICAgICBjb25zdHJhaW50RGVzY3JpcHRpb246IHByb3BzLmNvbnN0cmFpbnREZXNjcmlwdGlvbixcbiAgICAgIG1heExlbmd0aDogcHJvcHMubWF4TGVuZ3RoLFxuICAgICAgbWluTGVuZ3RoOiBwcm9wcy5taW5MZW5ndGgsXG4gICAgICBub0VjaG86IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbHVlID0gbmV3IFNlY3JldChwYXJhbS5yZWYpO1xuICB9XG59XG4iXX0=

@@ -158,4 +158,4 @@ import cxapi = require('@aws-cdk/cx-api');

* @returns the stack trace of the point where this Resource was created from, sourced
* from the +metadata+ entry typed +aws:cdk:logicalId+, and with the bottom-most
* node +internal+ entries filtered.
* from the +metadata+ entry typed +aws:cdk:logicalId+, and with the bottom-most
* node +internal+ entries filtered.
*/

@@ -174,9 +174,9 @@ readonly creationStackTrace: string[];

* {
* Resources: {
* [this.logicalId]: {
* Type: this.resourceType,
* Properties: this.props,
* Condition: this.condition
* }
* Resources: {
* [this.logicalId]: {
* Type: this.resourceType,
* Properties: this.props,
* Condition: this.condition
* }
* }
* }

@@ -183,0 +183,0 @@ */

@@ -233,4 +233,4 @@ "use strict";

* @returns the stack trace of the point where this Resource was created from, sourced
* from the +metadata+ entry typed +aws:cdk:logicalId+, and with the bottom-most
* node +internal+ entries filtered.
* from the +metadata+ entry typed +aws:cdk:logicalId+, and with the bottom-most
* node +internal+ entries filtered.
*/

@@ -315,2 +315,2 @@ get creationStackTrace() {

exports.Ref = Ref;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUEwQztBQUUxQyxpREFBd0Q7QUFDeEQsMkNBQWdEO0FBRWhELGlFQUE2RDtBQUM3RCw2Q0FBcUY7QUFvQnJGOztHQUVHO0FBQ0gsTUFBYSxLQUFNLFNBQVEscUJBQVM7SUFpRWhDOzs7Ozs7T0FNRztJQUNILFlBQW1CLE1BQVksRUFBRSxJQUFhLEVBQUUsS0FBa0I7UUFDOUQsb0dBQW9HO1FBQ3BHLEtBQUssQ0FBQyxNQUFPLEVBQUUsSUFBSyxDQUFDLENBQUM7UUF6QzFCOzs7O1dBSUc7UUFDYSxtQkFBYyxHQUE0QyxFQUFHLENBQUM7UUFPOUU7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBTy9COztXQUVHO1FBQ2Esb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBaUJsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxtQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUE5RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBZTtRQUM5QixJQUFJLElBQUksR0FBMEIsSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNkLE1B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cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBQQVRIX1NFUCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi10b2tlbic7XG5pbXBvcnQgeyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJQWRkcmVzc2luZ1NjaGVtZSwgTG9naWNhbElEcyB9IGZyb20gJy4vbG9naWNhbC1pZCc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBBV1MgZW52aXJvbm1lbnQgKGFjY291bnQvcmVnaW9uKSB3aGVyZSB0aGlzIHN0YWNrIHdpbGwgYmUgZGVwbG95ZWQuXG4gICAgICpcbiAgICAgKiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBgZGVmYXVsdC1hY2NvdW50YCBhbmQgYGRlZmF1bHQtcmVnaW9uYCBjb250ZXh0IHBhcmFtZXRlcnMgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXkgYXJlIHVuZGVmaW5lZCwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZGVwbG95IHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBlbnY/OiBFbnZpcm9ubWVudDtcblxuICAgIC8qKlxuICAgICAqIFN0cmF0ZWd5IGZvciBsb2dpY2FsIElEIGdlbmVyYXRpb25cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBIYXNoZWROYW1pbmdTY2hlbWUgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIG5hbWluZ1NjaGVtZT86IElBZGRyZXNzaW5nU2NoZW1lO1xufVxuXG4vKipcbiAqIEEgcm9vdCBjb25zdHJ1Y3Qgd2hpY2ggcmVwcmVzZW50cyBhIHNpbmdsZSBDbG91ZEZvcm1hdGlvbiBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIHRyZWUgYW5kIGxvb2tzIHVwIGZvciB0aGUgU3RhY2sgcm9vdC5cbiAgICAgKiBAcGFyYW0gbm9kZSBBIGNvbnN0cnVjdCBpbiB0aGUgdHJlZVxuICAgICAqIEByZXR1cm5zIFRoZSBTdGFjayBvYmplY3QgKHRocm93cyBpZiB0aGUgbm9kZSBpcyBub3QgcGFydCBvZiBhIFN0YWNrLXJvb3RlZCB0cmVlKVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZChub2RlOiBDb25zdHJ1Y3QpOiBTdGFjayB7XG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQgPSBub2RlO1xuICAgICAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmICFpc1N0YWNrKGN1cnIpKSB7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VyciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgU3RhY2sgcGFyZW50IGZvciAnJHtub2RlLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIFwiYXdzOmNkazpwaHlzaWNhbC1uYW1lXCIgdG8gdGhlIGNvbnN0cnVjdCBpZiBwaHlzaWNhbE5hbWVcbiAgICAgKiBpcyBub24tbnVsbC4gVGhpcyBjYW4gYmUgdXNlZCBsYXRlciBieSB0b29scyBhbmQgYXNwZWN0cyB0byBkZXRlcm1pbmUgaWYgcmVzb3VyY2VzXG4gICAgICogaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCBwaHlzaWNhbCBuYW1lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFubm90YXRlUGh5c2ljYWxOYW1lKGNvbnN0cnVjdDogQ29uc3RydWN0LCBwaHlzaWNhbE5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBoeXNpY2FsTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoJ2F3czpjZGs6cGh5c2ljYWwtbmFtZScsIHBoeXNpY2FsTmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVkFMSURfU1RBQ0tfTkFNRV9SRUdFWCA9IC9eW0EtWmEtel1bQS1aYS16MC05LV0qJC87XG5cbiAgICAvKipcbiAgICAgKiBMaXN0cyBhbGwgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLlxuICAgICAqIFRoaXMgaXMgcmV0dXJuZWQgd2hlbiB0aGUgc3RhY2sgaXMgc3ludGhlc2l6ZWQgdW5kZXIgdGhlICdtaXNzaW5nJyBhdHRyaWJ1dGVcbiAgICAgKiBhbmQgYWxsb3dzIHRvb2xpbmcgdG8gb2J0YWluIHRoZSBjb250ZXh0IGFuZCByZS1zeW50aGVzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtaXNzaW5nQ29udGV4dDogeyBba2V5OiBzdHJpbmddOiBjeGFwaS5NaXNzaW5nQ29udGV4dCB9ID0geyB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvbnN0cnVjdCBpcyBhIHN0YWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc1N0YWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExvZ2ljYWwgSUQgZ2VuZXJhdGlvbiBzdHJhdGVneVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWRzOiBMb2dpY2FsSURzO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgKGxpa2UgdmVyc2lvbiwgdHJhbnNmb3JtLCBkZXNjcmlwdGlvbikuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoaXMgc3RhY2ssIHVzdWFsbHkgYSBQcm9ncmFtIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjay4gRGVmYXVsdHMgdG8gXCJTdGFja1wiLlxuICAgICAqIEBwYXJhbSBwcm9wcyBTdGFjayBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBBcHAsIG5hbWU/OiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0IGNvbnZlbmllbmNlIHBhcmVudHMgYXJlIG9wdGlvbmFsLCBzbyBieXBhc3MgdGhlIHR5cGUgY2hlY2sgd2hlbiBjYWxsaW5nIHRoZSBwYXJlbnQuXG4gICAgICAgIHN1cGVyKHBhcmVudCEsIG5hbWUhKTtcbiAgICAgICAgdGhpcy5lbnYgPSB0aGlzLnBhcnNlRW52aXJvbm1lbnQocHJvcHMpO1xuXG4gICAgICAgIHRoaXMubG9naWNhbElkcyA9IG5ldyBMb2dpY2FsSURzKHByb3BzICYmIHByb3BzLm5hbWluZ1NjaGVtZSA/IHByb3BzLm5hbWluZ1NjaGVtZSA6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCkpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lIHx8ICdTdGFjayc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9va3MgdXAgYSByZXNvdXJjZSBieSBwYXRoLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZFJlc291cmNlKHBhdGg6IHN0cmluZyk6IFJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZmluZENoaWxkKHBhdGgpO1xuICAgICAgICBpZiAoIXIpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgICAgIC8vIGZvdW5kIGFuIGVsZW1lbnQsIGNoZWNrIGlmIGl0J3MgYSByZXNvdXJjZSAoZHVjay10eXBlKVxuICAgICAgICBpZiAoISgncmVzb3VyY2VUeXBlJyBpbiByKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBhIHN0YWNrIGVsZW1lbnQgZm9yICR7cGF0aH0gYnV0IGl0IGlzIG5vdCBhIHJlc291cmNlOiAke3IudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByIGFzIFJlc291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGZvciB0aGlzIHN0YWNrIGJ5IHRyYXZlcnNpbmdcbiAgICAgKiB0aGUgdHJlZSBhbmQgaW52b2tpbmcgdG9DbG91ZEZvcm1hdGlvbigpIG9uIGFsbCBFbnRpdHkgb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICAgICAgLy8gYmVmb3JlIHdlIGJlZ2luIHN5bnRoZXNpcywgd2Ugc2hhbGwgbG9jayB0aGlzIHN0YWNrLCBzbyBjaGlsZHJlbiBjYW5ub3QgYmUgYWRkZWRcbiAgICAgICAgdGhpcy5sb2NrKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIFRyYW5zZm9ybTogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIEFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVGb3JtYXRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIE1ldGFkYXRhOiB0aGlzLnRlbXBsYXRlT3B0aW9ucy5tZXRhZGF0YVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGFja0VsZW1lbnRzKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKGUgPT4gZS50b0Nsb3VkRm9ybWF0aW9uKCkpO1xuXG4gICAgICAgICAgICAvLyBtZXJnZSBpbiBhbGwgQ2xvdWRGb3JtYXRpb24gZnJhZ21lbnRzIGNvbGxlY3RlZCBmcm9tIHRoZSB0cmVlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgICAgICAgICAgIG1lcmdlKHRlbXBsYXRlLCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlc29sdmUgYWxsIHRva2VucyBhbmQgcmVtb3ZlIGFsbCBlbXB0aWVzXG4gICAgICAgICAgICBjb25zdCByZXQgPSByZXNvbHZlKHRlbXBsYXRlKSB8fCB7IH07XG5cbiAgICAgICAgICAgIHRoaXMubG9naWNhbElkcy5hc3NlcnRBbGxSZW5hbWVzQXBwbGllZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gYWxsb3cgbXV0YXRpb25zIGFmdGVyIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC5cbiAgICAgICAgICAgIHRoaXMudW5sb2NrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gd2h5IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHJlZ2lvbiBpcyByZXF1aXJlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVnaW9uIGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuIFRocm93cyBpZiByZWdpb24gaXMgbm90IGRlZmluZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlcXVpcmVSZWdpb24od2h5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnYucmVnaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7d2h5ID8gd2h5ICsgJy4gJyA6ICcnfVN0YWNrIHJlcXVpcmVzIHJlZ2lvbiBpbmZvcm1hdGlvbi4gSXQgY2FuIGJlIGVpdGhlciBzdXBwbGllZCB2aWEgdGhlIFwiZW52XCIgcHJvcGVydHksIGAgK1xuICAgICAgICAgICAgICAgICAgICBgdmlhIHRoZSBcIiR7Y3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVl9XCIgY29udGV4dCBwYXJhbWV0ZXJzIG9yIHVzaW5nIFwiYXdzIGNvbmZpZ3VyZVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnYucmVnaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlIHRoYXQgYSBjb250ZXh0IGtleSB3YXMgZXhwZWN0ZWRcbiAgICAgKlxuICAgICAqIENvbnRhaW5zIGluc3RydWN0aW9ucyBvbiBob3cgdGhlIGtleSBzaG91bGQgYmUgc3VwcGxpZWQuXG4gICAgICogQHBhcmFtIGtleSBLZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgbWlzc2luZyBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkZXRhaWxzIFRoZSBzZXQgb2YgcGFyYW1ldGVycyBuZWVkZWQgdG8gb2J0YWluIHRoZSBjb250ZXh0IChzcGVjaWZpYyB0byBjb250ZXh0IHByb3ZpZGVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0TWlzc2luZ0NvbnRleHQoa2V5OiBzdHJpbmcsIGRldGFpbHM6IGN4YXBpLk1pc3NpbmdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0NvbnRleHRba2V5XSA9IGRldGFpbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuYW1lIGEgZ2VuZXJhdGVkIGxvZ2ljYWwgaWRlbnRpdGllc1xuICAgICAqL1xuICAgIHB1YmxpYyByZW5hbWVMb2dpY2FsKG9sZElkOiBzdHJpbmcsIG5ld0lkOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxsIHJlbmFtZXMgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIGFkZGluZyBlbGVtZW50cyB0byB0aGUgc3RhY2tcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZHMucmVuYW1lTG9naWNhbChvbGRJZCwgbmV3SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHN0YWNrIG5hbWVcbiAgICAgKlxuICAgICAqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWVzIGNhbiBpbmNsdWRlIGRhc2hlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhciBpZGVudGlmaWVyXG4gICAgICogY2hhcmFjdGVyIGNsYXNzZXMsIGFuZCB3ZSBkb24ndCBhbGxvdyBvbmUgb2YgdGhlIG1hZ2ljIG1hcmtlcnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIVN0YWNrLlZBTElEX1NUQUNLX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayBuYW1lIG11c3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHtTdGFjay5WQUxJRF9TVEFDS19OQU1FX1JFR0VYLnRvU3RyaW5nKCl9LCBnb3QgJyR7bmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVkIGRlZmF1bHRzIHRvIGVudmlyb25tZW50IGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZUVudmlyb25tZW50KHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBzdGFydCB3aXRoIGBlbnZgLlxuICAgICAgICBjb25zdCBlbnY6IEVudmlyb25tZW50ID0gKHByb3BzICYmIHByb3BzLmVudikgfHwgeyB9O1xuXG4gICAgICAgIC8vIGlmIGFjY291bnQgaXMgbm90IHNwZWNpZmllZCwgYXR0ZW1wdCB0byByZWFkIGZyb20gY29udGV4dC5cbiAgICAgICAgaWYgKCFlbnYuYWNjb3VudCkge1xuICAgICAgICAgICAgZW52LmFjY291bnQgPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9BQ0NPVU5UX0NPTlRFWFRfS0VZKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLCBhdHRlbXB0IHRvIHJlYWQgZnJvbSBjb250ZXh0LlxuICAgICAgICBpZiAoIWVudi5yZWdpb24pIHtcbiAgICAgICAgICAgIGVudi5yZWdpb24gPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHRlbXBsYXRlOiBhbnksIHBhcnQ6IGFueSkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBPYmplY3Qua2V5cyhwYXJ0KSkge1xuICAgICAgICBjb25zdCBzcmMgPSBwYXJ0W3NlY3Rpb25dO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB0b3AtbGV2ZWwgc2VjdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGxldCBkZXN0ID0gdGVtcGxhdGVbc2VjdGlvbl07XG4gICAgICAgIGlmICghZGVzdCkge1xuICAgICAgICAgICAgdGVtcGxhdGVbc2VjdGlvbl0gPSBkZXN0ID0gc3JjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIGFsbCBlbnRpdGllcyBmcm9tIHNvdXJjZSBzZWN0aW9uIHRvIGRlc3RpbmF0aW9uIHNlY3Rpb25cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoc3JjKSkge1xuICAgICAgICAgICAgICAgIGlmIChpZCBpbiBkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VjdGlvbiAnJHtzZWN0aW9ufScgYWxyZWFkeSBjb250YWlucyAnJHtpZH0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgTE9HSUNBTF9JRF9NRCA9ICdhd3M6Y2RrOmxvZ2ljYWxJZCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbnN0cnVjdCB0aGF0IGNhbiBiZSBcImRlcGVuZGVkIG9uXCIgdmlhIGBhZGREZXBlbmRlbmN5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kYWJsZSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2V0IG9mIGFsbCBzdGFjayBlbGVtZW50cyAocmVzb3VyY2VzLCBwYXJhbWV0ZXJzLCBjb25kaXRpb25zKVxuICAgICAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHdoZW4gYSByZXNvdXJjZSBcImRlcGVuZHMgb25cIiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZXBlbmRlbmN5RWxlbWVudHM6IElEZXBlbmRhYmxlW107XG59XG5cbi8qKlxuICogQW4gZWxlbWVudCBvZiBhIENsb3VkRm9ybWF0aW9uIHN0YWNrLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RhY2tFbGVtZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGEgY29uc3RydWN0IGlzIGEgc3RhY2sgZWxlbWVudCAoaS5lLiBwYXJ0IG9mIHRoZVxuICAgICAqIHN5bnRoZXNpemVkIGNsb3VkZm9ybWF0aW9uIHRlbXBsYXRlKS5cbiAgICAgKlxuICAgICAqIFVzZXMgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBgaW5zdGFuY2VvZmAgdG8gYWxsb3cgc3RhY2sgZWxlbWVudHMgZnJvbSBkaWZmZXJlbnRcbiAgICAgKiB2ZXJzaW9ucyBvZiB0aGlzIGxpYnJhcnkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgc3RhY2suXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0IGFzIGEgc3RhY2sgZWxlbWVudCBvciB1bmRlZmluZWQgaWYgaXQgaXMgbm90IGEgc3RhY2sgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIF9hc1N0YWNrRWxlbWVudChjb25zdHJ1Y3Q6IENvbnN0cnVjdCk6IFN0YWNrRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICgnbG9naWNhbElkJyBpbiBjb25zdHJ1Y3QgJiYgJ3RvQ2xvdWRGb3JtYXRpb24nIGluIGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdCBhcyBTdGFja0VsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxvZ2ljYWwgSUQgZm9yIHRoaXMgQ2xvdWRGb3JtYXRpb24gc3RhY2sgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFjayB0aGlzIENvbnN0cnVjdCBoYXMgYmVlbiBtYWRlIGEgcGFydCBvZlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGFjazogU3RhY2s7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVudGl0eSBhbmQgYmluZHMgaXQgdG8gYSB0cmVlLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSBtdXN0IGJlIGEgU3RhY2sgb2JqZWN0IChub3QganVzdCBhbnkgUm9vdCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIHByb3BzIENvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gU3RhY2suZmluZCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmVlIHJvb3QgbXVzdCBiZSBkZXJpdmVkIGZyb20gXCJTdGFja1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFjayA9IHM7XG5cbiAgICAgICAgdGhpcy5hZGRNZXRhZGF0YShMT0dJQ0FMX0lEX01ELCBuZXcgVG9rZW4oKCkgPT4gdGhpcy5sb2dpY2FsSWQpLCB0aGlzLmNvbnN0cnVjdG9yKTtcblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZCA9IHRoaXMuc3RhY2subG9naWNhbElkcy5nZXRMb2dpY2FsSWQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwb2ludCB3aGVyZSB0aGlzIFJlc291cmNlIHdhcyBjcmVhdGVkIGZyb20sIHNvdXJjZWRcbiAgICAgKiAgICAgICAgICBmcm9tIHRoZSArbWV0YWRhdGErIGVudHJ5IHR5cGVkICthd3M6Y2RrOmxvZ2ljYWxJZCssIGFuZCB3aXRoIHRoZSBib3R0b20tbW9zdFxuICAgICAqICAgICAgICAgIG5vZGUgK2ludGVybmFsKyBlbnRyaWVzIGZpbHRlcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3JlYXRpb25TdGFja1RyYWNlKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YWNrVHJhY2UodGhpcy5tZXRhZGF0YS5maW5kKG1kID0+IG1kLnR5cGUgPT09IExPR0lDQUxfSURfTUQpIS50cmFjZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmlsdGVyU3RhY2tUcmFjZShzdGFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5vZiguLi5zdGFjayk7XG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgc2hvdWxkRmlsdGVyKHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQncyB3ZWlyZCBpZiB3ZSBmaWx0ZXJlZCBldmVyeXRoaW5nLCBzbyByZXR1cm4gdGhlIHdob2xlIHN0YWNrLi4uXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMCA/IHN0YWNrIDogcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvdWxkRmlsdGVyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLm1hdGNoKC9bXihdK1xcKGludGVybmFsXFwvLiovKSAhPT0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGF0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YWNrXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGFja1BhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JzKHRoaXMuc3RhY2spLm1hcChjID0+IGMuaWQpLmpvaW4oUEFUSF9TRVApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCk6IElEZXBlbmRhYmxlW10ge1xuICAgICAgICByZXR1cm4gWyB0aGlzIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gJ3NuaXBwZXQnIGZvciB0aGlzIGVudGl0eS4gVGhlIHNuaXBwZXQgd2lsbCBvbmx5IGJlIG1lcmdlZFxuICAgICAqIGF0IHRoZSByb290IGxldmVsIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaWRlbnRpdHkgY29uZmxpY3RzLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgUmVzb3VyY2UgY2xhc3Mgd2lsbCByZXR1cm4gc29tZXRoaW5nIGxpa2U6XG4gICAgICoge1xuICAgICAqICAgICBSZXNvdXJjZXM6IHtcbiAgICAgKiAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgKiAgICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgKiAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB0aGlzLnByb3BzLFxuICAgICAqICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb25cbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgb3B0aW9ucyBmb3IgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBzdGFjay5cbiAgICAgKiBJZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUncyBcIkRlc2NyaXB0aW9uXCIgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gZmllbGQgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIHRlbXBsYXRlRm9ybWF0VmVyc2lvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdG9wLWxldmVsIHRlbXBsYXRlIHRyYW5zZm9ybSBmb3IgdGhpcyBzdGFjayAoZS5nLiBcIkFXUzo6U2VydmVybGVzcy0yMDE2LTEwLTMxXCIpLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gICAgICovXG4gICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciByZWZlcmVuY2VhYmxlIENsb3VkRm9ybWF0aW9uIGNvbnN0cnVjdHMgd2hpY2ggYXJlIG5vdCBSZXNvdXJjZXNcbiAqXG4gKiBUaGVzZSBjb25zdHJ1Y3RzIGFyZSB0aGluZ3MgbGlrZSBDb25kaXRpb25zIGFuZCBQYXJhbWV0ZXJzLCBjYW4gYmVcbiAqIHJlZmVyZW5jZWQgYnkgdGFraW5nIHRoZSBgLnJlZmAgYXR0cmlidXRlLlxuICpcbiAqIFJlc291cmNlIGNvbnN0cnVjdHMgZG8gbm90IGluaGVyaXQgZnJvbSBSZWZlcmVuY2VhYmxlIGJlY2F1c2UgdGhleSBoYXZlIHRoZWlyXG4gKiBvd24sIG1vcmUgc3BlY2lmaWMgdHlwZXMgcmV0dXJuZWQgZnJvbSB0aGUgLnJlZiBhdHRyaWJ1dGUuIEFsc28sIHNvbWVcbiAqIHJlc291cmNlcyBhcmVuJ3QgcmVmZXJlbmNlYWJsZSBhdCBhbGwgKHN1Y2ggYXMgQnVja2V0UG9saWNpZXMgb3IgR2F0ZXdheUF0dGFjaG1lbnRzKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZWFibGUgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0b2tlbiB0byBhIENsb3VkRm9ybWF0aW9uIHsgUmVmIH0gdGhhdCByZWZlcmVuY2VzIHRoaXMgZW50aXR5IGJhc2VkIG9uIGl0J3MgbG9naWNhbCBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbmV3IFJlZih0aGlzKS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgU3RhY2suXG4gKlxuICogV2UgZG8gYXR0cmlidXRlIGRldGVjdGlvbiBzaW5jZSB3ZSBjYW4ndCByZWxpYWJseSB1c2UgJ2luc3RhbmNlb2YnLlxuICovXG5mdW5jdGlvbiBpc1N0YWNrKGNvbnN0cnVjdDogQ29uc3RydWN0KTogY29uc3RydWN0IGlzIFN0YWNrIHtcbiAgICByZXR1cm4gKGNvbnN0cnVjdCBhcyBhbnkpLmlzU3RhY2s7XG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgU3RhY2tFbGVtZW50cyBmcm9tIGEgY29uc3RydWN0XG4gKlxuICogQHBhcmFtIG5vZGUgUm9vdCBub2RlIHRvIGNvbGxlY3QgYWxsIFN0YWNrRWxlbWVudHMgZnJvbVxuICogQHBhcmFtIGludG8gQXJyYXkgdG8gYXBwZW5kIFN0YWNrRWxlbWVudHMgdG9cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGFycmF5IGFzIGlzIGJlaW5nIGNvbGxlY3RlZCBpbnRvXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRWxlbWVudHMobm9kZTogQ29uc3RydWN0LCBpbnRvOiBTdGFja0VsZW1lbnRbXSA9IFtdKTogU3RhY2tFbGVtZW50W10ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBTdGFja0VsZW1lbnQuX2FzU3RhY2tFbGVtZW50KG5vZGUpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGludG8ucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgc3RhY2tFbGVtZW50cyhjaGlsZCwgaW50byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludG87XG59XG5cbi8qKlxuICogQSBnZW5lcmljLCB1bnR5cGVkIHJlZmVyZW5jZSB0byBhIFN0YWNrIEVsZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlZiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFN0YWNrRWxlbWVudCkge1xuICAgICAgICBzdXBlcih7IFJlZjogZWxlbWVudC5sb2dpY2FsSWQgfSwgYCR7ZWxlbWVudC5sb2dpY2FsSWR9LlJlZmApO1xuICAgIH1cbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUEwQztBQUUxQyxpREFBd0Q7QUFDeEQsMkNBQWdEO0FBRWhELGlFQUE2RDtBQUM3RCw2Q0FBcUY7QUFvQnJGOztHQUVHO0FBQ0gsTUFBYSxLQUFNLFNBQVEscUJBQVM7SUFpRWxDOzs7Ozs7T0FNRztJQUNILFlBQW1CLE1BQVksRUFBRSxJQUFhLEVBQUUsS0FBa0I7UUFDaEUsb0dBQW9HO1FBQ3BHLEtBQUssQ0FBQyxNQUFPLEVBQUUsSUFBSyxDQUFDLENBQUM7UUF6Q3hCOzs7O1dBSUc7UUFDYSxtQkFBYyxHQUE0QyxFQUFHLENBQUM7UUFPOUU7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBTy9COztXQUVHO1FBQ2Esb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBaUJwRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxtQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDO0lBQzlCLENBQUM7SUE5RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBZTtRQUNoQyxJQUFJLElBQUksR0FBMEIsSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjtRQUVELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNoQixN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Y2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IENvbnN0cnVjdCwgUEFUSF9TRVAgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyByZXNvbHZlLCBUb2tlbiB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuaW1wb3J0IHsgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSwgSUFkZHJlc3NpbmdTY2hlbWUsIExvZ2ljYWxJRHMgfSBmcm9tICcuL2xvZ2ljYWwtaWQnO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgZW52aXJvbm1lbnQgKGFjY291bnQvcmVnaW9uKSB3aGVyZSB0aGlzIHN0YWNrIHdpbGwgYmUgZGVwbG95ZWQuXG4gICAqXG4gICAqIElmIG5vdCBzdXBwbGllZCwgdGhlIGBkZWZhdWx0LWFjY291bnRgIGFuZCBgZGVmYXVsdC1yZWdpb25gIGNvbnRleHQgcGFyYW1ldGVycyB3aWxsIGJlXG4gICAqIHVzZWQuIElmIHRoZXkgYXJlIHVuZGVmaW5lZCwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZGVwbG95IHRoZSBzdGFjay5cbiAgICovXG4gIGVudj86IEVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBTdHJhdGVneSBmb3IgbG9naWNhbCBJRCBnZW5lcmF0aW9uXG4gICAqXG4gICAqIE9wdGlvbmFsLiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBIYXNoZWROYW1pbmdTY2hlbWUgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgbmFtaW5nU2NoZW1lPzogSUFkZHJlc3NpbmdTY2hlbWU7XG59XG5cbi8qKlxuICogQSByb290IGNvbnN0cnVjdCB3aGljaCByZXByZXNlbnRzIGEgc2luZ2xlIENsb3VkRm9ybWF0aW9uIHN0YWNrLlxuICovXG5leHBvcnQgY2xhc3MgU3RhY2sgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVHJhdmVyc2VzIHRoZSB0cmVlIGFuZCBsb29rcyB1cCBmb3IgdGhlIFN0YWNrIHJvb3QuXG4gICAqIEBwYXJhbSBub2RlIEEgY29uc3RydWN0IGluIHRoZSB0cmVlXG4gICAqIEByZXR1cm5zIFRoZSBTdGFjayBvYmplY3QgKHRocm93cyBpZiB0aGUgbm9kZSBpcyBub3QgcGFydCBvZiBhIFN0YWNrLXJvb3RlZCB0cmVlKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmaW5kKG5vZGU6IENvbnN0cnVjdCk6IFN0YWNrIHtcbiAgICBsZXQgY3VycjogQ29uc3RydWN0IHwgdW5kZWZpbmVkID0gbm9kZTtcbiAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmICFpc1N0YWNrKGN1cnIpKSB7XG4gICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGN1cnIgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIFN0YWNrIHBhcmVudCBmb3IgJyR7bm9kZS50b1N0cmluZygpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnI7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG1ldGFkYXRhIGFubm90YXRpb24gXCJhd3M6Y2RrOnBoeXNpY2FsLW5hbWVcIiB0byB0aGUgY29uc3RydWN0IGlmIHBoeXNpY2FsTmFtZVxuICAgKiBpcyBub24tbnVsbC4gVGhpcyBjYW4gYmUgdXNlZCBsYXRlciBieSB0b29scyBhbmQgYXNwZWN0cyB0byBkZXRlcm1pbmUgaWYgcmVzb3VyY2VzXG4gICAqIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggcGh5c2ljYWwgbmFtZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFubm90YXRlUGh5c2ljYWxOYW1lKGNvbnN0cnVjdDogQ29uc3RydWN0LCBwaHlzaWNhbE5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAocGh5c2ljYWxOYW1lID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoJ2F3czpjZGs6cGh5c2ljYWwtbmFtZScsIHBoeXNpY2FsTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWQUxJRF9TVEFDS19OQU1FX1JFR0VYID0gL15bQS1aYS16XVtBLVphLXowLTktXSokLztcblxuICAvKipcbiAgICogTGlzdHMgYWxsIG1pc3NpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbi5cbiAgICogVGhpcyBpcyByZXR1cm5lZCB3aGVuIHRoZSBzdGFjayBpcyBzeW50aGVzaXplZCB1bmRlciB0aGUgJ21pc3NpbmcnIGF0dHJpYnV0ZVxuICAgKiBhbmQgYWxsb3dzIHRvb2xpbmcgdG8gb2J0YWluIHRoZSBjb250ZXh0IGFuZCByZS1zeW50aGVzaXplLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1pc3NpbmdDb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGN4YXBpLk1pc3NpbmdDb250ZXh0IH0gPSB7IH07XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGlzIHN0YWNrIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29uc3RydWN0IGlzIGEgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNTdGFjayA9IHRydWU7XG5cbiAgLyoqXG4gICAqIExvZ2ljYWwgSUQgZ2VuZXJhdGlvbiBzdHJhdGVneVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ2ljYWxJZHM6IExvZ2ljYWxJRHM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIChsaWtlIHZlcnNpb24sIHRyYW5zZm9ybSwgZGVzY3JpcHRpb24pLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBzdGFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhpcyBzdGFjaywgdXN1YWxseSBhIFByb2dyYW0gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjay4gRGVmYXVsdHMgdG8gXCJTdGFja1wiLlxuICAgKiBAcGFyYW0gcHJvcHMgU3RhY2sgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBBcHAsIG5hbWU/OiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIC8vIEZvciB1bml0IHRlc3QgY29udmVuaWVuY2UgcGFyZW50cyBhcmUgb3B0aW9uYWwsIHNvIGJ5cGFzcyB0aGUgdHlwZSBjaGVjayB3aGVuIGNhbGxpbmcgdGhlIHBhcmVudC5cbiAgICBzdXBlcihwYXJlbnQhLCBuYW1lISk7XG4gICAgdGhpcy5lbnYgPSB0aGlzLnBhcnNlRW52aXJvbm1lbnQocHJvcHMpO1xuXG4gICAgdGhpcy5sb2dpY2FsSWRzID0gbmV3IExvZ2ljYWxJRHMocHJvcHMgJiYgcHJvcHMubmFtaW5nU2NoZW1lID8gcHJvcHMubmFtaW5nU2NoZW1lIDogbmV3IEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUoKSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSB8fCAnU3RhY2snO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIGEgcmVzb3VyY2UgYnkgcGF0aC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIFJlc291cmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHB1YmxpYyBmaW5kUmVzb3VyY2UocGF0aDogc3RyaW5nKTogUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLmZpbmRDaGlsZChwYXRoKTtcbiAgICBpZiAoIXIpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgLy8gZm91bmQgYW4gZWxlbWVudCwgY2hlY2sgaWYgaXQncyBhIHJlc291cmNlIChkdWNrLXR5cGUpXG4gICAgaWYgKCEoJ3Jlc291cmNlVHlwZScgaW4gcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm91bmQgYSBzdGFjayBlbGVtZW50IGZvciAke3BhdGh9IGJ1dCBpdCBpcyBub3QgYSByZXNvdXJjZTogJHtyLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIgYXMgUmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgZm9yIHRoaXMgc3RhY2sgYnkgdHJhdmVyc2luZ1xuICAgKiB0aGUgdHJlZSBhbmQgaW52b2tpbmcgdG9DbG91ZEZvcm1hdGlvbigpIG9uIGFsbCBFbnRpdHkgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCkge1xuICAgIC8vIGJlZm9yZSB3ZSBiZWdpbiBzeW50aGVzaXMsIHdlIHNoYWxsIGxvY2sgdGhpcyBzdGFjaywgc28gY2hpbGRyZW4gY2Fubm90IGJlIGFkZGVkXG4gICAgdGhpcy5sb2NrKCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IHtcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICBUcmFuc2Zvcm06IHRoaXMudGVtcGxhdGVPcHRpb25zLnRyYW5zZm9ybSxcbiAgICAgICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiB0aGlzLnRlbXBsYXRlT3B0aW9ucy50ZW1wbGF0ZUZvcm1hdFZlcnNpb24sXG4gICAgICAgIE1ldGFkYXRhOiB0aGlzLnRlbXBsYXRlT3B0aW9ucy5tZXRhZGF0YVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGFja0VsZW1lbnRzKHRoaXMpO1xuICAgICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKGUgPT4gZS50b0Nsb3VkRm9ybWF0aW9uKCkpO1xuXG4gICAgICAvLyBtZXJnZSBpbiBhbGwgQ2xvdWRGb3JtYXRpb24gZnJhZ21lbnRzIGNvbGxlY3RlZCBmcm9tIHRoZSB0cmVlXG4gICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgICBtZXJnZSh0ZW1wbGF0ZSwgZnJhZ21lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNvbHZlIGFsbCB0b2tlbnMgYW5kIHJlbW92ZSBhbGwgZW1wdGllc1xuICAgICAgY29uc3QgcmV0ID0gcmVzb2x2ZSh0ZW1wbGF0ZSkgfHwgeyB9O1xuXG4gICAgICB0aGlzLmxvZ2ljYWxJZHMuYXNzZXJ0QWxsUmVuYW1lc0FwcGxpZWQoKTtcblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gYWxsb3cgbXV0YXRpb25zIGFmdGVyIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC5cbiAgICAgIHRoaXMudW5sb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB3aHkgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aHkgcmVnaW9uIGlzIHJlcXVpcmVkLlxuICAgKiBAcmV0dXJucyBUaGUgcmVnaW9uIGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuIFRocm93cyBpZiByZWdpb24gaXMgbm90IGRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgcmVxdWlyZVJlZ2lvbih3aHk/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZW52LnJlZ2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3doeSA/IHdoeSArICcuICcgOiAnJ31TdGFjayByZXF1aXJlcyByZWdpb24gaW5mb3JtYXRpb24uIEl0IGNhbiBiZSBlaXRoZXIgc3VwcGxpZWQgdmlhIHRoZSBcImVudlwiIHByb3BlcnR5LCBgICtcbiAgICAgICAgICBgdmlhIHRoZSBcIiR7Y3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVl9XCIgY29udGV4dCBwYXJhbWV0ZXJzIG9yIHVzaW5nIFwiYXdzIGNvbmZpZ3VyZVwiYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZW52LnJlZ2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBrZXkgd2FzIGV4cGVjdGVkXG4gICAqXG4gICAqIENvbnRhaW5zIGluc3RydWN0aW9ucyBvbiBob3cgdGhlIGtleSBzaG91bGQgYmUgc3VwcGxpZWQuXG4gICAqIEBwYXJhbSBrZXkgS2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIG1pc3NpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIGRldGFpbHMgVGhlIHNldCBvZiBwYXJhbWV0ZXJzIG5lZWRlZCB0byBvYnRhaW4gdGhlIGNvbnRleHQgKHNwZWNpZmljIHRvIGNvbnRleHQgcHJvdmlkZXIpLlxuICAgKi9cbiAgcHVibGljIHJlcG9ydE1pc3NpbmdDb250ZXh0KGtleTogc3RyaW5nLCBkZXRhaWxzOiBjeGFwaS5NaXNzaW5nQ29udGV4dCkge1xuICAgIHRoaXMubWlzc2luZ0NvbnRleHRba2V5XSA9IGRldGFpbHM7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lIGEgZ2VuZXJhdGVkIGxvZ2ljYWwgaWRlbnRpdGllc1xuICAgKi9cbiAgcHVibGljIHJlbmFtZUxvZ2ljYWwob2xkSWQ6IHN0cmluZywgbmV3SWQ6IHN0cmluZykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxsIHJlbmFtZXMgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIGFkZGluZyBlbGVtZW50cyB0byB0aGUgc3RhY2tcIik7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dpY2FsSWRzLnJlbmFtZUxvZ2ljYWwob2xkSWQsIG5ld0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFjayBuYW1lXG4gICAqXG4gICAqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWVzIGNhbiBpbmNsdWRlIGRhc2hlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhciBpZGVudGlmaWVyXG4gICAqIGNoYXJhY3RlciBjbGFzc2VzLCBhbmQgd2UgZG9uJ3QgYWxsb3cgb25lIG9mIHRoZSBtYWdpYyBtYXJrZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghU3RhY2suVkFMSURfU1RBQ0tfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIG5hbWUgbXVzdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uOiAke1N0YWNrLlZBTElEX1NUQUNLX05BTUVfUkVHRVgudG9TdHJpbmcoKX0sIGdvdCAnJHtuYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllZCBkZWZhdWx0cyB0byBlbnZpcm9ubWVudCBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUVudmlyb25tZW50KHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIC8vIHN0YXJ0IHdpdGggYGVudmAuXG4gICAgY29uc3QgZW52OiBFbnZpcm9ubWVudCA9IChwcm9wcyAmJiBwcm9wcy5lbnYpIHx8IHsgfTtcblxuICAgIC8vIGlmIGFjY291bnQgaXMgbm90IHNwZWNpZmllZCwgYXR0ZW1wdCB0byByZWFkIGZyb20gY29udGV4dC5cbiAgICBpZiAoIWVudi5hY2NvdW50KSB7XG4gICAgICBlbnYuYWNjb3VudCA9IHRoaXMuZ2V0Q29udGV4dChjeGFwaS5ERUZBVUxUX0FDQ09VTlRfQ09OVEVYVF9LRVkpO1xuICAgIH1cblxuICAgIC8vIGlmIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLCBhdHRlbXB0IHRvIHJlYWQgZnJvbSBjb250ZXh0LlxuICAgIGlmICghZW52LnJlZ2lvbikge1xuICAgICAgZW52LnJlZ2lvbiA9IHRoaXMuZ2V0Q29udGV4dChjeGFwaS5ERUZBVUxUX1JFR0lPTl9DT05URVhUX0tFWSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZSh0ZW1wbGF0ZTogYW55LCBwYXJ0OiBhbnkpIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIE9iamVjdC5rZXlzKHBhcnQpKSB7XG4gICAgY29uc3Qgc3JjID0gcGFydFtzZWN0aW9uXTtcblxuICAgIC8vIGNyZWF0ZSB0b3AtbGV2ZWwgc2VjdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IGRlc3QgPSB0ZW1wbGF0ZVtzZWN0aW9uXTtcbiAgICBpZiAoIWRlc3QpIHtcbiAgICAgIHRlbXBsYXRlW3NlY3Rpb25dID0gZGVzdCA9IHNyYztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRkIGFsbCBlbnRpdGllcyBmcm9tIHNvdXJjZSBzZWN0aW9uIHRvIGRlc3RpbmF0aW9uIHNlY3Rpb25cbiAgICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoc3JjKSkge1xuICAgICAgICBpZiAoaWQgaW4gZGVzdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VjdGlvbiAnJHtzZWN0aW9ufScgYWxyZWFkeSBjb250YWlucyAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdFtpZF0gPSBzcmNbaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBMT0dJQ0FMX0lEX01EID0gJ2F3czpjZGs6bG9naWNhbElkJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29uc3RydWN0IHRoYXQgY2FuIGJlIFwiZGVwZW5kZWQgb25cIiB2aWEgYGFkZERlcGVuZGVuY3lgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCBvZiBhbGwgc3RhY2sgZWxlbWVudHMgKHJlc291cmNlcywgcGFyYW1ldGVycywgY29uZGl0aW9ucylcbiAgICogdGhhdCBzaG91bGQgYmUgYWRkZWQgd2hlbiBhIHJlc291cmNlIFwiZGVwZW5kcyBvblwiIHRoaXMgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeUVsZW1lbnRzOiBJRGVwZW5kYWJsZVtdO1xufVxuXG4vKipcbiAqIEFuIGVsZW1lbnQgb2YgYSBDbG91ZEZvcm1hdGlvbiBzdGFjay5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YWNrRWxlbWVudCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgY29uc3RydWN0IGlzIGEgc3RhY2sgZWxlbWVudCAoaS5lLiBwYXJ0IG9mIHRoZVxuICAgKiBzeW50aGVzaXplZCBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZSkuXG4gICAqXG4gICAqIFVzZXMgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBgaW5zdGFuY2VvZmAgdG8gYWxsb3cgc3RhY2sgZWxlbWVudHMgZnJvbSBkaWZmZXJlbnRcbiAgICogdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzYW1lIHN0YWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0IGFzIGEgc3RhY2sgZWxlbWVudCBvciB1bmRlZmluZWQgaWYgaXQgaXMgbm90IGEgc3RhY2sgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgX2FzU3RhY2tFbGVtZW50KGNvbnN0cnVjdDogQ29uc3RydWN0KTogU3RhY2tFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoJ2xvZ2ljYWxJZCcgaW4gY29uc3RydWN0ICYmICd0b0Nsb3VkRm9ybWF0aW9uJyBpbiBjb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QgYXMgU3RhY2tFbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBmb3IgdGhpcyBDbG91ZEZvcm1hdGlvbiBzdGFjayBlbGVtZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0aGlzIENvbnN0cnVjdCBoYXMgYmVlbiBtYWRlIGEgcGFydCBvZlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YWNrOiBTdGFjaztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbnRpdHkgYW5kIGJpbmRzIGl0IHRvIGEgdHJlZS5cbiAgICogTm90ZSB0aGF0IHRoZSByb290IG9mIHRoZSB0cmVlIG11c3QgYmUgYSBTdGFjayBvYmplY3QgKG5vdCBqdXN0IGFueSBSb290KS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgQ29uc3RydWN0IHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgIGNvbnN0IHMgPSBTdGFjay5maW5kKHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdHJlZSByb290IG11c3QgYmUgZGVyaXZlZCBmcm9tIFwiU3RhY2tcIicpO1xuICAgIH1cbiAgICB0aGlzLnN0YWNrID0gcztcblxuICAgIHRoaXMuYWRkTWV0YWRhdGEoTE9HSUNBTF9JRF9NRCwgbmV3IFRva2VuKCgpID0+IHRoaXMubG9naWNhbElkKSwgdGhpcy5jb25zdHJ1Y3Rvcik7XG5cbiAgICB0aGlzLmxvZ2ljYWxJZCA9IHRoaXMuc3RhY2subG9naWNhbElkcy5nZXRMb2dpY2FsSWQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwb2ludCB3aGVyZSB0aGlzIFJlc291cmNlIHdhcyBjcmVhdGVkIGZyb20sIHNvdXJjZWRcbiAgICogICAgICBmcm9tIHRoZSArbWV0YWRhdGErIGVudHJ5IHR5cGVkICthd3M6Y2RrOmxvZ2ljYWxJZCssIGFuZCB3aXRoIHRoZSBib3R0b20tbW9zdFxuICAgKiAgICAgIG5vZGUgK2ludGVybmFsKyBlbnRyaWVzIGZpbHRlcmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjcmVhdGlvblN0YWNrVHJhY2UoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBmaWx0ZXJTdGFja1RyYWNlKHRoaXMubWV0YWRhdGEuZmluZChtZCA9PiBtZC50eXBlID09PSBMT0dJQ0FMX0lEX01EKSEudHJhY2UpO1xuXG4gICAgZnVuY3Rpb24gZmlsdGVyU3RhY2tUcmFjZShzdGFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5vZiguLi5zdGFjayk7XG4gICAgICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgc2hvdWxkRmlsdGVyKHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIHJlc3VsdC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIC8vIEl0J3Mgd2VpcmQgaWYgd2UgZmlsdGVyZWQgZXZlcnl0aGluZywgc28gcmV0dXJuIHRoZSB3aG9sZSBzdGFjay4uLlxuICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDAgPyBzdGFjayA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRGaWx0ZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdHIubWF0Y2goL1teKF0rXFwoaW50ZXJuYWxcXC8uKi8pICE9PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHBhdGggd2l0aCByZXNwZWN0IHRvIHRoZSBzdGFja1xuICAgKi9cbiAgcHVibGljIGdldCBzdGFja1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnModGhpcy5zdGFjaykubWFwKGMgPT4gYy5pZCkuam9pbihQQVRIX1NFUCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGVuZGVuY3lFbGVtZW50cygpOiBJRGVwZW5kYWJsZVtdIHtcbiAgICByZXR1cm4gWyB0aGlzIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gJ3NuaXBwZXQnIGZvciB0aGlzIGVudGl0eS4gVGhlIHNuaXBwZXQgd2lsbCBvbmx5IGJlIG1lcmdlZFxuICAgKiBhdCB0aGUgcm9vdCBsZXZlbCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGlkZW50aXR5IGNvbmZsaWN0cy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGEgUmVzb3VyY2UgY2xhc3Mgd2lsbCByZXR1cm4gc29tZXRoaW5nIGxpa2U6XG4gICAqIHtcbiAgICogICBSZXNvdXJjZXM6IHtcbiAgICogICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICogICAgICAgVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUsXG4gICAqICAgICAgIFByb3BlcnRpZXM6IHRoaXMucHJvcHMsXG4gICAqICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb25cbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdDtcbn1cblxuLyoqXG4gKiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBvcHRpb25zIGZvciBhIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgc3RhY2suXG4gICAqIElmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSdzIFwiRGVzY3JpcHRpb25cIiBhdHRyaWJ1dGUuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gZmllbGQgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICAgKi9cbiAgdGVtcGxhdGVGb3JtYXRWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHRvcC1sZXZlbCB0ZW1wbGF0ZSB0cmFuc2Zvcm0gZm9yIHRoaXMgc3RhY2sgKGUuZy4gXCJBV1M6OlNlcnZlcmxlc3MtMjAxNi0xMC0zMVwiKS5cbiAgICovXG4gIHRyYW5zZm9ybT86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZS5cbiAgICovXG4gICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcmVmZXJlbmNlYWJsZSBDbG91ZEZvcm1hdGlvbiBjb25zdHJ1Y3RzIHdoaWNoIGFyZSBub3QgUmVzb3VyY2VzXG4gKlxuICogVGhlc2UgY29uc3RydWN0cyBhcmUgdGhpbmdzIGxpa2UgQ29uZGl0aW9ucyBhbmQgUGFyYW1ldGVycywgY2FuIGJlXG4gKiByZWZlcmVuY2VkIGJ5IHRha2luZyB0aGUgYC5yZWZgIGF0dHJpYnV0ZS5cbiAqXG4gKiBSZXNvdXJjZSBjb25zdHJ1Y3RzIGRvIG5vdCBpbmhlcml0IGZyb20gUmVmZXJlbmNlYWJsZSBiZWNhdXNlIHRoZXkgaGF2ZSB0aGVpclxuICogb3duLCBtb3JlIHNwZWNpZmljIHR5cGVzIHJldHVybmVkIGZyb20gdGhlIC5yZWYgYXR0cmlidXRlLiBBbHNvLCBzb21lXG4gKiByZXNvdXJjZXMgYXJlbid0IHJlZmVyZW5jZWFibGUgYXQgYWxsIChzdWNoIGFzIEJ1Y2tldFBvbGljaWVzIG9yIEdhdGV3YXlBdHRhY2htZW50cykuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWZlcmVuY2VhYmxlIGV4dGVuZHMgU3RhY2tFbGVtZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiB0byBhIENsb3VkRm9ybWF0aW9uIHsgUmVmIH0gdGhhdCByZWZlcmVuY2VzIHRoaXMgZW50aXR5IGJhc2VkIG9uIGl0J3MgbG9naWNhbCBJRC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBSZWYodGhpcykudG9TdHJpbmcoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBTdGFjay5cbiAqXG4gKiBXZSBkbyBhdHRyaWJ1dGUgZGV0ZWN0aW9uIHNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IHVzZSAnaW5zdGFuY2VvZicuXG4gKi9cbmZ1bmN0aW9uIGlzU3RhY2soY29uc3RydWN0OiBDb25zdHJ1Y3QpOiBjb25zdHJ1Y3QgaXMgU3RhY2sge1xuICByZXR1cm4gKGNvbnN0cnVjdCBhcyBhbnkpLmlzU3RhY2s7XG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgU3RhY2tFbGVtZW50cyBmcm9tIGEgY29uc3RydWN0XG4gKlxuICogQHBhcmFtIG5vZGUgUm9vdCBub2RlIHRvIGNvbGxlY3QgYWxsIFN0YWNrRWxlbWVudHMgZnJvbVxuICogQHBhcmFtIGludG8gQXJyYXkgdG8gYXBwZW5kIFN0YWNrRWxlbWVudHMgdG9cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGFycmF5IGFzIGlzIGJlaW5nIGNvbGxlY3RlZCBpbnRvXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRWxlbWVudHMobm9kZTogQ29uc3RydWN0LCBpbnRvOiBTdGFja0VsZW1lbnRbXSA9IFtdKTogU3RhY2tFbGVtZW50W10ge1xuICBjb25zdCBlbGVtZW50ID0gU3RhY2tFbGVtZW50Ll9hc1N0YWNrRWxlbWVudChub2RlKTtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBpbnRvLnB1c2goZWxlbWVudCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICBzdGFja0VsZW1lbnRzKGNoaWxkLCBpbnRvKTtcbiAgfVxuXG4gIHJldHVybiBpbnRvO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYywgdW50eXBlZCByZWZlcmVuY2UgdG8gYSBTdGFjayBFbGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBSZWYgZXh0ZW5kcyBDbG91ZEZvcm1hdGlvblRva2VuIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudDogU3RhY2tFbGVtZW50KSB7XG4gICAgc3VwZXIoeyBSZWY6IGVsZW1lbnQubG9naWNhbElkIH0sIGAke2VsZW1lbnQubG9naWNhbElkfS5SZWZgKTtcbiAgfVxufVxuIl19
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXJlc291cmNlLXRhZ3MuaHRtbCNjZm4tcmVzb3VyY2UtdGFncy1rZXlcbiAgICAgKi9cbiAgICBrZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sI2Nmbi1yZXNvdXJjZS10YWdzLXZhbHVlXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgLyoqXG4gICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sI2Nmbi1yZXNvdXJjZS10YWdzLWtleVxuICAgKi9cbiAga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sI2Nmbi1yZXNvdXJjZS10YWdzLXZhbHVlXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuIl19

@@ -139,2 +139,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBK0M7QUFHL0MsTUFBTSwyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQztBQUN6RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQztBQUVyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsZUFBZTtJQUl4QixZQUFvQixPQUFrQjtRQUFsQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUNqQixRQUFnQixFQUNoQixLQUEyQixFQUMzQixJQUFjLEVBQ2QsWUFBb0I7UUFDcEIsa0VBQWtFO1FBQ2xFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxZQUFZLENBQUM7U0FDdkI7UUFDRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNmLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixNQUFNLElBQUksU0FBUyxDQUFDLCtCQUErQixHQUFHLDhCQUE4QixLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQ2pHO1lBQ0QsT0FBTyxL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QUMvRSxDQUFDO0NBQ0o7QUFoQkQsNERBZ0JDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFvQjtJQUc3QixZQUFZLE9BQWtCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLGFBQXFCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pHLENBQUM7Q0FDSjtBQWRELG9EQWNDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLElBQWM7SUFDN0QsSUFBSSxDQUFDLEdBQUcsK0NBQStDLFFBQVEsRUFBRSxDQUFDO0lBQ2xFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDakIsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFDRCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNWLENBQUMsSUFBSSxrSEFBa0gsQ0FBQztJQUN4SCxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24vc3RhY2snO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5cbmNvbnN0IEFWQUlMQUJJTElUWV9aT05FU19QUk9WSURFUiA9ICdhdmFpbGFiaWxpdHktem9uZXMnO1xuY29uc3QgU1NNX1BBUkFNRVRFUl9QUk9WSURFUiA9ICdzc20nO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRoZSBtb2RlbCBzaWRlIG9mIGNvbnRleHQgcHJvdmlkZXJzXG4gKlxuICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY29tbXVuaWNhdGUgd2l0aCBjb250ZXh0IHByb3ZpZGVyIHBsdWdpbnMgaW4gdGhlICdjZGtcbiAqIHRvb2xraXQnIHZpYSBjb250ZXh0IHZhcmlhYmxlcyAoaW5wdXQpLCBvdXRwdXR0aW5nIHNwZWNpYWxpemVkIHF1ZXJpZXMgZm9yXG4gKiBtb3JlIGNvbnRleHQgdmFyaWFibGVzIChvdXRwdXQpLlxuICpcbiAqIENvbnRleHRQcm92aWRlciBuZWVkcyBhY2Nlc3MgdG8gYSBDb25zdHJ1Y3QgdG8gaG9vayBpbnRvIHRoZSBjb250ZXh0IG1lY2hhbmlzbS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHRQcm92aWRlciB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBTdGFjaztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBTdGFjay5maW5kKGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBwcm92aWRlciB2YWx1ZSwgdmVyaWZ5aW5nIGl0J3MgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0gcHJvdmlkZXIgVGhlIG5hbWUgb2YgdGhlIGNvbnRleHQgcHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIChlLmcuIGFjY291bnQvcmVnaW9uKSBmb3IgdGhlIHZhbHVlXG4gICAgICogQHBhcmFtIGFyZ3MgQW55IGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBkZWZpbmVkIGZvciB0aGlzIGNvbnRleHQga2V5XG4gICAgICovXG4gICAgcHVibGljIGdldFN0cmluZ1ZhbHVlKFxuICAgICAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgICAgICBzY29wZTogdW5kZWZpbmVkIHwgc3RyaW5nW10sXG4gICAgICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIC8vIGlmIHNjb3BlIGlzIHVuZGVmaW5lZCwgdGhpcyBpcyBwcm9iYWJseSBhIHRlc3QgbW9kZSwgc28gd2UganVzdFxuICAgICAgICAvLyByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgaWYgKCFzY29wZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEVycm9yKGZvcm1hdE1pc3NpbmdTY29wZUVycm9yKHByb3ZpZGVyLCBhcmdzKSk7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGNvbG9uUXVvdGUoW3Byb3ZpZGVyXS5jb25jYXQoc2NvcGUpLmNvbmNhdChhcmdzKSkuam9pbignOicpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGNvbnRleHQgcGFyYW1ldGVyICcke2tleX0nIHRvIGJlIGEgc3RyaW5nLCBidXQgZ290ICcke3ZhbHVlfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhY2sucmVwb3J0TWlzc2luZ0NvbnRleHQoa2V5LCB7IHByb3ZpZGVyLCBzY29wZSwgYXJncyB9KTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgcHJvdmlkZXIgdmFsdWUsIHZlcmlmeWluZyBpdCdzIGEgbGlzdFxuICAgICAqIEBwYXJhbSBwcm92aWRlciBUaGUgbmFtZSBvZiB0aGUgY29udGV4dCBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgKGUuZy4gYWNjb3VudC9yZWdpb24pIGZvciB0aGUgdmFsdWVcbiAgICAgKiBAcGFyYW0gYXJncyBBbnkgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGRlZmluZWQgZm9yIHRoaXMgY29udGV4dCBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RyaW5nTGlzdFZhbHVlKFxuICAgICAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgICAgICBzY29wZTogdW5kZWZpbmVkIHwgc3RyaW5nW10sXG4gICAgICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICAvLyBpZiBzY29wZSBpcyB1bmRlZmluZWQsIHRoaXMgaXMgcHJvYmFibHkgYSB0ZXN0IG1vZGUsIHNvIHdlIGp1c3RcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCByZXBvcnQgYW4gZXJyb3Igc28gdGhpcyBpbiBub3QgYWNjaWRlbnRhbGx5IHVzZWRcbiAgICAgICAgLy8gaW4gdGhlIHRvb2xraXRcbiAgICAgICAgaWYgKCFzY29wZSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEVycm9yKGZvcm1hdE1pc3NpbmdTY29wZUVycm9yKHByb3ZpZGVyLCBhcmdzKSk7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gY29sb25RdW90ZShbcHJvdmlkZXJdLmNvbmNhdChzY29wZSkuY29uY2F0KGFyZ3MpKS5qb2luKCc6Jyk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoa2V5KTtcblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5tYXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRleHQgdmFsdWUgJyR7a2V5fScgaXMgc3VwcG9zZWQgdG8gYmUgYSBsaXN0LCBnb3QgJyR7dmFsdWV9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFjay5yZXBvcnRNaXNzaW5nQ29udGV4dChrZXksIHsgcHJvdmlkZXIsIHNjb3BlLCBhcmdzIH0pO1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byB3cmFwIHVwIGFjY291bnQgYW5kIHJlZ2lvbiBpbnRvIGEgc2NvcGUgdHVwbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjb3VudFJlZ2lvblNjb3BlKHByb3ZpZGVyRGVzY3JpcHRpb246IHN0cmluZyk6IHVuZGVmaW5lZCB8IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5maW5kKHRoaXMuY29udGV4dCk7XG4gICAgICAgIGlmICghc3RhY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm92aWRlckRlc2NyaXB0aW9ufTogY29uc3RydWN0IG11c3QgYmUgaW4gYSBzdGFja2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHN0YWNrLmVudi5hY2NvdW50O1xuICAgICAgICBjb25zdCByZWdpb24gPSBzdGFjay5lbnYucmVnaW9uO1xuXG4gICAgICAgIGlmIChhY2NvdW50ID09IG51bGwgfHwgcmVnaW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2FjY291bnQsIHJlZ2lvbl07XG4gICAgfVxufVxuXG4vKipcbiAqIFF1b3RlIGNvbG9ucyBpbiBhbGwgc3RyaW5ncyBzbyB0aGF0IHdlIGNhbiB1bmRvIHRoZSBxdW90aW5nIGF0IGEgbGF0ZXIgcG9pbnRcbiAqXG4gKiBXZSdsbCB1c2UgJCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLCBmb3Igbm8gcGFydGljdWxhcmx5IGdvb2QgcmVhc29uIG90aGVyXG4gKiB0aGFuIHRoYXQgXFwgaXMgZ29pbmcgdG8gbGVhZCB0byBxdW90aW5nIGhlbGwgd2hlbiB0aGUga2V5cyBhcmUgc3RvcmVkIGluIEpTT04uXG4gKi9cbmZ1bmN0aW9uIGNvbG9uUXVvdGUoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB4cy5tYXAoeCA9PiB4LnJlcGxhY2UoJyQnLCAnJCQnKS5yZXBsYWNlKCc6JywgJyQ6JykpO1xufVxuXG4vKipcbiAqIENvbnRleHQgcHJvdmlkZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgYXZhaWxhYmlsaXR5IHpvbmVzIGZvciB0aGUgY3VycmVudCBhY2NvdW50IGFuZCByZWdpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgQ29udGV4dFByb3ZpZGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbGlzdCBvZiBBWnMgZm9yIHRoZSBjdXJyZW50IGFjY291bnQgYW5kIHJlZ2lvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYXZhaWxhYmlsaXR5Wm9uZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5nZXRTdHJpbmdMaXN0VmFsdWUoQVZBSUxBQklMSVRZX1pPTkVTX1BST1ZJREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlci5hY2NvdW50UmVnaW9uU2NvcGUoJ0F2YWlsYWJpbGl0eVpvbmVQcm92aWRlcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJ10pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVyIHRoYXQgd2lsbCByZWFkIHZhbHVlcyBmcm9tIHRoZSBTU00gcGFyYW1ldGVyIHN0b3JlIGluIHRoZSBpbmRpY2F0ZWQgYWNjb3VudCBhbmQgcmVnaW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBTU01QYXJhbWV0ZXJQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgQ29udGV4dFByb3ZpZGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgU1NNIHBhcmFtZXRlciBzdHJpbmcgd2l0aCB0aGUgaW5kaWNhdGVkIGtleVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdHJpbmcocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByb3ZpZGVyLmFjY291bnRSZWdpb25TY29wZSgnU1NNUGFyYW1ldGVyUHJvdmlkZXInKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIuZ2V0U3RyaW5nVmFsdWUoU1NNX1BBUkFNRVRFUl9QUk9WSURFUiwgc2NvcGUsIFtwYXJhbWV0ZXJOYW1lXSwgJ2R1bW15Jyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRNaXNzaW5nU2NvcGVFcnJvcihwcm92aWRlcjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSkge1xuICAgIGxldCBzID0gYENhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgJHtwcm92aWRlcn1gO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBKU09OLnN0cmluZ2lmeShhcmdzKTtcbiAgICB9XG4gICAgcyArPSAnLic7XG4gICAgcyArPSAnXFxuJztcbiAgICBzICs9ICdUaGlzIHVzdWFsbHkgaGFwcGVucyB3aGVuIEFXUyBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSBhbmQgdGhlIGRlZmF1bHQgYWNjb3VudC9yZWdpb24gY2Fubm90IGJlIGRldGVybWluZWQuJztcbiAgICByZXR1cm4gcztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBK0M7QUFHL0MsTUFBTSwyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQztBQUN6RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQztBQUVyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsZUFBZTtJQUkxQixZQUFvQixPQUFrQjtRQUFsQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUNuQixRQUFnQixFQUNoQixLQUEyQixFQUMzQixJQUFjLEVBQ2QsWUFBb0I7UUFDcEIsa0VBQWtFO1FBQ2xFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQkFBK0IsR0FBRyw4QkFBOEIsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELE9BQU8s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QUN6RCxDQUFDO0NBQ0Y7QUFoQkQsNERBZ0JDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLE9BQWtCO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLGFBQXFCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9GLENBQUM7Q0FDRjtBQWRELG9EQWNDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLElBQWM7SUFDL0QsSUFBSSxDQUFDLEdBQUcsK0NBQStDLFFBQVEsRUFBRSxDQUFDO0lBQ2xFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbkIsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0I7SUFDRCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNWLENBQUMsSUFBSSxrSEFBa0gsQ0FBQztJQUN4SCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24vc3RhY2snO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5cbmNvbnN0IEFWQUlMQUJJTElUWV9aT05FU19QUk9WSURFUiA9ICdhdmFpbGFiaWxpdHktem9uZXMnO1xuY29uc3QgU1NNX1BBUkFNRVRFUl9QUk9WSURFUiA9ICdzc20nO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRoZSBtb2RlbCBzaWRlIG9mIGNvbnRleHQgcHJvdmlkZXJzXG4gKlxuICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY29tbXVuaWNhdGUgd2l0aCBjb250ZXh0IHByb3ZpZGVyIHBsdWdpbnMgaW4gdGhlICdjZGtcbiAqIHRvb2xraXQnIHZpYSBjb250ZXh0IHZhcmlhYmxlcyAoaW5wdXQpLCBvdXRwdXR0aW5nIHNwZWNpYWxpemVkIHF1ZXJpZXMgZm9yXG4gKiBtb3JlIGNvbnRleHQgdmFyaWFibGVzIChvdXRwdXQpLlxuICpcbiAqIENvbnRleHRQcm92aWRlciBuZWVkcyBhY2Nlc3MgdG8gYSBDb25zdHJ1Y3QgdG8gaG9vayBpbnRvIHRoZSBjb250ZXh0IG1lY2hhbmlzbS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHRQcm92aWRlciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogU3RhY2s7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0OiBDb25zdHJ1Y3QpIHtcbiAgICB0aGlzLnN0YWNrID0gU3RhY2suZmluZChjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGEgcHJvdmlkZXIgdmFsdWUsIHZlcmlmeWluZyBpdCdzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSBwcm92aWRlciBUaGUgbmFtZSBvZiB0aGUgY29udGV4dCBwcm92aWRlclxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIChlLmcuIGFjY291bnQvcmVnaW9uKSBmb3IgdGhlIHZhbHVlXG4gICAqIEBwYXJhbSBhcmdzIEFueSBhcmd1bWVudHNcbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGRlZmluZWQgZm9yIHRoaXMgY29udGV4dCBrZXlcbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdWYWx1ZShcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIHNjb3BlOiB1bmRlZmluZWQgfCBzdHJpbmdbXSxcbiAgICBhcmdzOiBzdHJpbmdbXSxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gaWYgc2NvcGUgaXMgdW5kZWZpbmVkLCB0aGlzIGlzIHByb2JhYmx5IGEgdGVzdCBtb2RlLCBzbyB3ZSBqdXN0XG4gICAgLy8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgdGhpcy5jb250ZXh0LmFkZEVycm9yKGZvcm1hdE1pc3NpbmdTY29wZUVycm9yKHByb3ZpZGVyLCBhcmdzKSk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBjb2xvblF1b3RlKFtwcm92aWRlcl0uY29uY2F0KHNjb3BlKS5jb25jYXQoYXJncykpLmpvaW4oJzonKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KGtleSk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGNvbnRleHQgcGFyYW1ldGVyICcke2tleX0nIHRvIGJlIGEgc3RyaW5nLCBidXQgZ290ICcke3ZhbHVlfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrLnJlcG9ydE1pc3NpbmdDb250ZXh0KGtleSwgeyBwcm92aWRlciwgc2NvcGUsIGFyZ3MgfSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGEgcHJvdmlkZXIgdmFsdWUsIHZlcmlmeWluZyBpdCdzIGEgbGlzdFxuICAgKiBAcGFyYW0gcHJvdmlkZXIgVGhlIG5hbWUgb2YgdGhlIGNvbnRleHQgcHJvdmlkZXJcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSAoZS5nLiBhY2NvdW50L3JlZ2lvbikgZm9yIHRoZSB2YWx1ZVxuICAgKiBAcGFyYW0gYXJncyBBbnkgYXJndW1lbnRzXG4gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBkZWZpbmVkIGZvciB0aGlzIGNvbnRleHQga2V5XG4gICAqL1xuICBwdWJsaWMgZ2V0U3RyaW5nTGlzdFZhbHVlKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgc2NvcGU6IHVuZGVmaW5lZCB8IHN0cmluZ1tdLFxuICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgLy8gaWYgc2NvcGUgaXMgdW5kZWZpbmVkLCB0aGlzIGlzIHByb2JhYmx5IGEgdGVzdCBtb2RlLCBzbyB3ZSBqdXN0XG4gICAgLy8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCByZXBvcnQgYW4gZXJyb3Igc28gdGhpcyBpbiBub3QgYWNjaWRlbnRhbGx5IHVzZWRcbiAgICAvLyBpbiB0aGUgdG9vbGtpdFxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIHRoaXMuY29udGV4dC5hZGRFcnJvcihmb3JtYXRNaXNzaW5nU2NvcGVFcnJvcihwcm92aWRlciwgYXJncykpO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBjb2xvblF1b3RlKFtwcm92aWRlcl0uY29uY2F0KHNjb3BlKS5jb25jYXQoYXJncykpLmpvaW4oJzonKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KGtleSk7XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCF2YWx1ZS5tYXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250ZXh0IHZhbHVlICcke2tleX0nIGlzIHN1cHBvc2VkIHRvIGJlIGEgbGlzdCwgZ290ICcke3ZhbHVlfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrLnJlcG9ydE1pc3NpbmdDb250ZXh0KGtleSwgeyBwcm92aWRlciwgc2NvcGUsIGFyZ3MgfSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd3JhcCB1cCBhY2NvdW50IGFuZCByZWdpb24gaW50byBhIHNjb3BlIHR1cGxlXG4gICAqL1xuICBwdWJsaWMgYWNjb3VudFJlZ2lvblNjb3BlKHByb3ZpZGVyRGVzY3JpcHRpb246IHN0cmluZyk6IHVuZGVmaW5lZCB8IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLmZpbmQodGhpcy5jb250ZXh0KTtcbiAgICBpZiAoIXN0YWNrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvdmlkZXJEZXNjcmlwdGlvbn06IGNvbnN0cnVjdCBtdXN0IGJlIGluIGEgc3RhY2tgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gc3RhY2suZW52LmFjY291bnQ7XG4gICAgY29uc3QgcmVnaW9uID0gc3RhY2suZW52LnJlZ2lvbjtcblxuICAgIGlmIChhY2NvdW50ID09IG51bGwgfHwgcmVnaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthY2NvdW50LCByZWdpb25dO1xuICB9XG59XG5cbi8qKlxuICogUXVvdGUgY29sb25zIGluIGFsbCBzdHJpbmdzIHNvIHRoYXQgd2UgY2FuIHVuZG8gdGhlIHF1b3RpbmcgYXQgYSBsYXRlciBwb2ludFxuICpcbiAqIFdlJ2xsIHVzZSAkIGFzIGEgcXVvdGluZyBjaGFyYWN0ZXIsIGZvciBubyBwYXJ0aWN1bGFybHkgZ29vZCByZWFzb24gb3RoZXJcbiAqIHRoYW4gdGhhdCBcXCBpcyBnb2luZyB0byBsZWFkIHRvIHF1b3RpbmcgaGVsbCB3aGVuIHRoZSBrZXlzIGFyZSBzdG9yZWQgaW4gSlNPTi5cbiAqL1xuZnVuY3Rpb24gY29sb25RdW90ZSh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB4cy5tYXAoeCA9PiB4LnJlcGxhY2UoJyQnLCAnJCQnKS5yZXBsYWNlKCc6JywgJyQ6JykpO1xufVxuXG4vKipcbiAqIENvbnRleHQgcHJvdmlkZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgYXZhaWxhYmlsaXR5IHpvbmVzIGZvciB0aGUgY3VycmVudCBhY2NvdW50IGFuZCByZWdpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlciB7XG4gIHByaXZhdGUgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb25zdHJ1Y3QpIHtcbiAgICB0aGlzLnByb3ZpZGVyID0gbmV3IENvbnRleHRQcm92aWRlcihjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgQVpzIGZvciB0aGUgY3VycmVudCBhY2NvdW50IGFuZCByZWdpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgYXZhaWxhYmlsaXR5Wm9uZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmdldFN0cmluZ0xpc3RWYWx1ZShBVkFJTEFCSUxJVFlfWk9ORVNfUFJPVklERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyLmFjY291bnRSZWdpb25TY29wZSgnQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnZHVtbXkxYScsICdkdW1teTFiJywgJ2R1bW15MWMnXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVyIHRoYXQgd2lsbCByZWFkIHZhbHVlcyBmcm9tIHRoZSBTU00gcGFyYW1ldGVyIHN0b3JlIGluIHRoZSBpbmRpY2F0ZWQgYWNjb3VudCBhbmQgcmVnaW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBTU01QYXJhbWV0ZXJQcm92aWRlciB7XG4gIHByaXZhdGUgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb25zdHJ1Y3QpIHtcbiAgICB0aGlzLnByb3ZpZGVyID0gbmV3IENvbnRleHRQcm92aWRlcihjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIFNTTSBwYXJhbWV0ZXIgc3RyaW5nIHdpdGggdGhlIGluZGljYXRlZCBrZXlcbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmcocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMucHJvdmlkZXIuYWNjb3VudFJlZ2lvblNjb3BlKCdTU01QYXJhbWV0ZXJQcm92aWRlcicpO1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmdldFN0cmluZ1ZhbHVlKFNTTV9QQVJBTUVURVJfUFJPVklERVIsIHNjb3BlLCBbcGFyYW1ldGVyTmFtZV0sICdkdW1teScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pc3NpbmdTY29wZUVycm9yKHByb3ZpZGVyOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKSB7XG4gIGxldCBzID0gYENhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgJHtwcm92aWRlcn1gO1xuICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgcyArPSBKU09OLnN0cmluZ2lmeShhcmdzKTtcbiAgfVxuICBzICs9ICcuJztcbiAgcyArPSAnXFxuJztcbiAgcyArPSAnVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBBV1MgY3JlZGVudGlhbHMgYXJlIG5vdCBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0IGFjY291bnQvcmVnaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLic7XG4gIHJldHVybiBzO1xufVxuIl19

@@ -361,2 +361,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLCtDQUFnRDtBQUNuQyxRQUFBLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBc0NsQjs7Ozs7T0FLRztJQUNILFlBQVksTUFBaUIsRUFBRSxFQUFVO1FBbkJ6Qzs7V0FFRztRQUNjLGNBQVMsR0FBa0MsRUFBRyxDQUFDO1FBQy9DLFlBQU8sR0FBMkIsRUFBRyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUV4RDs7O1dBR0c7UUFDSyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsc0ZBQXNGO1FBQ3RGLGdDQUFnQztRQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDaEIsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQzthQUNsRTtZQUVELDREQUE0RDtZQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILDRCQUE0QjtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNoQjtRQUVELHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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QztBQXNCRCxNQUFhLGVBQWU7SUFDeEIsWUFBNEIsTUFBaUIsRUFBa0IsT0FBZTtRQUFsRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQWtCLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFFOUUsQ0FBQztDQUNKO0FBSkQsMENBSUM7QUFFRCxxQ0FBcUM7QUFDckMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFlO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDNUMsSUFBSTtRQUNBLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDMUM7WUFBUztRQUNOLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBtYWtlVW5pcXVlSWQgfSBmcm9tICcuLi91dGlsL3VuaXF1ZWlkJztcbmV4cG9ydCBjb25zdCBQQVRIX1NFUCA9ICcvJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBidWlsZGluZyBibG9jayBvZiB0aGUgY29uc3RydWN0IGdyYXBoLlxuICogV2hlbiBhIGNvbnN0cnVjdCBpcyBjcmVhdGVkLCBpdCBpcyBhbHdheXMgYWRkZWQgYXMgYSBjaGlsZFxuICovXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlIG9yIHVuZGVmaW5lZCBpZiB0aGlzIGlzIGEgcm9vdCBub2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYXJlbnQ/OiBDb25zdHJ1Y3Q7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9jYWwgaWQgb2YgdGhlIGNvbnN0cnVjdC5cbiAgICAgKiBUaGlzIGlkIGlzIHVuaXF1ZSBhbW9uZ3N0IGl0cyBzaWJsaW5ncy5cbiAgICAgKiBUbyBvYnRhaW4gYSB0cmVlLWdsb2JhbCB1bmlxdWUgaWQgZm9yIHRoaXMgY29uc3RydWN0LCB1c2UgYHVuaXF1ZUlkYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHBhdGggb2YgdGhpcyBjb25zdHJ1Y3QgaW4gdGhlIHRyZWUuXG4gICAgICogQ29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGJ5ICcvJy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSB0cmVlLWdsb2JhbCB1bmlxdWUgYWxwaGFudW1lcmljIGlkZW50aWZpZXIgZm9yIHRoaXMgY29uc3RydWN0LlxuICAgICAqIEluY2x1ZGVzIGFsbCBjb21wb25lbnRzIG9mIHRoZSB0cmVlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB1bmlxdWVJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjaGlsZHJlbiBhbmQgdGhlaXIgbmFtZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGlsZHJlbjogeyBbbmFtZTogc3RyaW5nXTogQ29uc3RydWN0IH0gPSB7IH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0geyB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21ldGFkYXRhID0gbmV3IEFycmF5PE1ldGFkYXRhRW50cnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGlzIHNldCB0byAndHJ1ZScuIGFkZENoaWxkKCkgY2FsbHMgZm9yIHRoaXMgY29uc3RydWN0IGFuZCBhbnkgY2hpbGRcbiAgICAgKiB3aWxsIGZhaWwuIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IHRyZWUgbXV0YXRpb25zIGR1cmluZyBzeW50aGVzaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbG9ja2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnN0cnVjdCBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgICAqIEBwYXJhbSBwcm9wcyAgUHJvcGVydGllcyBmb3IgdGhpcyBjb25zdHJ1Y3RcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgICAgIC8vIFdlIHNheSB0aGF0IHBhcmVudCBpcyByZXF1aXJlZCwgYnV0IHNvbWUgcm9vdCBjb25zdHJ1Y3RzIGJ5cGFzcyB0aGUgdHlwZSBjaGVja3MgYW5kXG4gICAgICAgIC8vIGFjdHVhbGx5IHBhc3MgaW4gJ3VuZGVmaW5lZCcuXG4gICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGlkID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSByb290IGNvbnN0cnVjdHMgbWF5IGhhdmUgYW4gZW1wdHkgbmFtZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYXMgc2lkZSBlZmZlY3Qgc28gbXVzdCBiZSB2ZXJ5IGxhc3QgdGhpbmcgaW4gY29uc3RydWN0b3JcbiAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZCh0aGlzLCB0aGlzLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByb290IGNvbnN0cnVjdC5cbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBuYW1lIHdlIGVuZGVkIHVwIHdpdGhcbiAgICAgICAgaWYgKHRoaXMuaWQgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUlkKHRoaXMuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMucm9vdFBhdGgoKS5tYXAoYyA9PiBjLmlkKTtcbiAgICAgICAgdGhpcy5wYXRoID0gY29tcG9uZW50cy5qb2luKFBBVEhfU0VQKTtcbiAgICAgICAgdGhpcy51bmlxdWVJZCA9IGNvbXBvbmVudHMubGVuZ3RoID4gMCA/IG1ha2VVbmlxdWVJZChjb21wb25lbnRzKSA6ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb25zdHJ1Y3QuXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoO1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlbmFtZSArIChwYXRoLmxlbmd0aCA+IDAgPyBgIFske3BhdGh9XWAgOiAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZyB3aXRoIGEgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0cnVjdCBhbmQgaXQncyBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9UcmVlU3RyaW5nKGRlcHRoID0gMCkge1xuICAgICAgICBsZXQgb3V0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgICc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuaWQgfHwgJyc7XG4gICAgICAgIG91dCArPSBgJHt0aGlzLnR5cGVuYW1lfSR7bmFtZS5sZW5ndGggPiAwID8gJyBbJyArIG5hbWUgKyAnXScgOiAnJ31cXG5gO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG91dCArPSBjaGlsZC50b1RyZWVTdHJpbmcoZGVwdGggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aCwgb3IgdW5kZWZpbmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBSZWxhdGl2ZSBuYW1lIG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNoaWxkXG4gICAgICogQHJldHVybnMgYSBjaGlsZCBieSBwYXRoIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAgICovXG4gICAgcHVibGljIHRyeUZpbmRDaGlsZChwYXRoOiBzdHJpbmcpOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFBBVEhfU0VQKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIG11c3QgYmUgcmVsYXRpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoUEFUSF9TRVApO1xuXG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3R8dW5kZWZpbmVkID0gdGhpcztcbiAgICAgICAgd2hpbGUgKGN1cnIgIT0gbnVsbCAmJiBwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5fY2hpbGRyZW5bcGFydHMuc2hpZnQoKSFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aFxuICAgICAqXG4gICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZGVzY2VuZGFudCBpcyBub3QgZm91bmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBSZWxhdGl2ZSBuYW1lIG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNoaWxkXG4gICAgICogQHJldHVybnMgQ2hpbGQgd2l0aCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZENoaWxkKHBhdGg6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZENoaWxkKHBhdGgpO1xuICAgICAgICBpZiAoIXJldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjaGlsZCB3aXRoIHBhdGg6ICcke3BhdGh9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY2hpbGRyZW4pLm1hcChrID0+IHRoaXMuX2NoaWxkcmVuW2tdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBjb250ZXh0dWFsIHZhbHVlcy5cbiAgICAgKiBDb250ZXh0IG11c3QgYmUgc2V0IGJlZm9yZSBhbnkgY2hpbGRyZW4gYXJlIGFkZGVkLCBzaW5jZSBjaGlsZHJlbiBtYXkgY29uc3VsdCBjb250ZXh0IGluZm8gZHVyaW5nIGNvbnN0cnVjdGlvbi5cbiAgICAgKiBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAgICogQHBhcmFtIGtleSBUaGUgY29udGV4dCBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnRleHQgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q29udGV4dChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMuY2hpbGRyZW4ubWFwKGMgPT4gYy5pZCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgY29udGV4dCBhZnRlciBjaGlsZHJlbiBoYXZlIGJlZW4gYWRkZWQ6ICcgKyBuYW1lcy5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0cmVlIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBDb250ZXh0IGlzIHVzdWFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHJvb3QsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBjb250ZXh0IGtleVxuICAgICAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHZhbHVlIG9yIHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHRba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuIHZhbHVlOyB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmdldENvbnRleHQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhIHZhbHVlIGZyb20gdHJlZS1nbG9iYWwgY29udGV4dFxuICAgICAqXG4gICAgICogSXQgaXMgYW4gZXJyb3IgaWYgdGhlIGNvbnRleHQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICovXG4gICAgcHVibGljIHJlcXVpcmVDb250ZXh0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENvbnRleHQoa2V5KTtcblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBzdXBwbHkgYSBjb250ZXh0IHZhbHVlIG5hbWVkICcke2tleX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgbWV0YWRhdGEgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciBkZXByZWNhdGlvbiBub3RpY2VzLCBzb3VyY2UgbWFwcGluZywgZXRjLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogRW50cmllcyBhcmUgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgd2lsbCBhbHNvIGluY2x1ZGUgYSBzdGFjayB0cmFjZSB0byBhbGxvdyB0cmFjaW5nIGJhY2sgdG9cbiAgICAgKiB0aGUgY29kZSBsb2NhdGlvbiBmb3Igd2hlbiB0aGUgZW50cnkgd2FzIGFkZGVkLiBJdCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgc291cmNlXG4gICAgICogbWFwcGluZyBpbiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gaW1wcm92ZSBkaWFnbm9zdGljcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIGEgc3RyaW5nIGRlbm90aW5nIHRoZSB0eXBlIG9mIG1ldGFkYXRhXG4gICAgICogQHBhcmFtIGRhdGEgdGhlIHZhbHVlIG9mIHRoZSBtZXRhZGF0YSAoY2FuIGJlIGEgVG9rZW4pLiBJZiBudWxsL3VuZGVmaW5lZCwgbWV0YWRhdGEgd2lsbCBub3QgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIGZyb20gYSBmdW5jdGlvbiB1bmRlciB3aGljaCB0byByZXN0cmljdCB0aGUgbWV0YWRhdGEgZW50cnkncyBzdGFjayB0cmFjZSAoZGVmYXVsdHMgdG8gdGhpcy5hZGRNZXRhZGF0YSlcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkTWV0YWRhdGEodHlwZTogc3RyaW5nLCBkYXRhOiBhbnksIGZyb20/OiBhbnkpOiBDb25zdHJ1Y3Qge1xuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFjZSA9IGNyZWF0ZVN0YWNrVHJhY2UoZnJvbSB8fCB0aGlzLmFkZE1ldGFkYXRhKTtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEucHVzaCh7IHR5cGUsIGRhdGEsIHRyYWNlIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgeyBcImF3czpjZGs6aW5mb1wiOiA8bWVzc2FnZT4gfSBtZXRhZGF0YSBlbnRyeSB0byB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKiBUaGUgdG9vbGtpdCB3aWxsIGRpc3BsYXkgdGhlIGluZm8gbWVzc2FnZSB3aGVuIGFwcHMgYXJlIHN5bnRoZXNpemVkLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBpbmZvIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEluZm8obWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuSU5GT19NRVRBREFUQV9LRVksIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB7IHdhcm5pbmc6IDxtZXNzYWdlPiB9IG1ldGFkYXRhIGVudHJ5IHRvIHRoaXMgY29uc3RydWN0LlxuICAgICAqIFRoZSB0b29sa2l0IHdpbGwgZGlzcGxheSB0aGUgd2FybmluZyB3aGVuIGFuIGFwcCBpcyBzeW50aGVzaXplZCwgb3IgZmFpbFxuICAgICAqIGlmIHJ1biBpbiAtLXN0cmljdCBtb2RlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZFdhcm5pbmcobWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuV0FSTklOR19NRVRBREFUQV9LRVksIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4geyBlcnJvcjogPG1lc3NhZ2U+IH0gbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogVGhlIHRvb2xraXQgd2lsbCBmYWlsIHN5bnRoZXNpcyB3aGVuIGVycm9ycyBhcmUgcmVwb3J0ZWQuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZE1ldGFkYXRhKGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY29uc3RydWN0cyBpbiBvcmRlciB0byBwZXJmb3JtXG4gICAgICogdmFsaWRhdGlvbiBsb2dpYy4gSXQgaXMgY2FsbGVkIG9uIGFsbCBjb25zdHJ1Y3RzIGJlZm9yZSBzeW50aGVzaXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSB0aGUgY29uc3RydWN0IGlzIHZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzICd2YWxpZGF0ZScgb24gYWxsIGNoaWxkIGNvbnN0cnVjdHMgYW5kIHRoZW4gb24gdGhpcyBjb25zdHJ1Y3QgKGRlcHRoLWZpcnN0KS5cbiAgICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgdmFsaWRhdGlvbiBlcnJvcnMuIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBhbGwgY29uc3RydWN0cyBhcmUgdmFsaWQuXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlVHJlZSgpOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdGlvbkVycm9yPigpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChjaGlsZC52YWxpZGF0ZVRyZWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbEVycm9ycyA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQobG9jYWxFcnJvcnMubWFwKG1zZyA9PiBuZXcgVmFsaWRhdGlvbkVycm9yKHRoaXMsIG1zZykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGFuY2VzdG9ycyAoaW5jbHVkaW5nIHNlbGYpIG9mIHRoaXMgQ29uc3RydWN0IHVwIHVudGlsIGFuZCBleGNsdWRpbmcgdGhlIGluZGljYXRlZCBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0byBUaGUgY29uc3RydWN0IHRvIHJldHVybiB0aGUgcGF0aCBjb21wb25lbnRzIHJlbGF0aXZlIHRvLCBvclxuICAgICAqIHRoZSBlbnRpcmUgbGlzdCBvZiBhbmNlc3RvcnMgKGluY2x1ZGluZyByb290KSBpZiBvbWl0dGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhbmNlc3RvcnModXBUbz86IENvbnN0cnVjdCk6IENvbnN0cnVjdFtdIHtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PENvbnN0cnVjdD4oKTtcblxuICAgICAgICBsZXQgY3VycjogQ29uc3RydWN0IHwgdW5kZWZpbmVkID0gdGhpcztcbiAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3VyciAhPT0gdXBUbykge1xuICAgICAgICAgICAgcmV0LnVuc2hpZnQoY3Vycik7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoYXQgdGhlIGlkIG9mIHRoZSBjb25zdHJ1Y3QgbGVnYWwuXG4gICAgICogQ29uc3RydWN0IElEcyBjYW4gYmUgYW55IGNoYXJhY3RlcnMgYmVzaWRlcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlkLmluZGV4T2YoUEFUSF9TRVApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25zdHJ1Y3QgbmFtZXMgY2Fubm90IGluY2x1ZGUgJyR7UEFUSF9TRVB9JzogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93cyBpZiB0aGUgYHByb3BzYCBiYWcgZG9lc24ndCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBgbmFtZWAuXG4gICAgICogSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gYWRkIHNvbWUgdHlwZS1jaGVja2luZyBoZXJlLCBtYXliZSBldmVuIGF1dG8tZ2VuZXJhdGUgZHVyaW5nIGNvbXBpbGF0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgYmFnLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgYHJlcXVpcmVQcm9wZXJ0eWBgIGZyb20gYGBAYXdzLWNkay9ydW50aW1lYGAgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVxdWlyZWQocHJvcHM6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCEobmFtZSBpbiBwcm9wcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IG9mIHR5cGUgJHt0aGlzLnR5cGVuYW1lfSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiAke25hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHR5cGUgbmFtZSBvZiB0aGlzIG5vZGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgdHlwZW5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY3RvcjogYW55ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIGN0b3IubmFtZSB8fCAnQ29uc3RydWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgY29uc3RydWN0IHRvIHRoaXMgbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIG5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgY2hpbGQgY29uc3RydWN0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHBhcnQgbmFtZSBvZiB0aGUgY2hpbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkQ2hpbGQoY2hpbGQ6IENvbnN0cnVjdCwgY2hpbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkKSB7XG5cbiAgICAgICAgICAgIC8vIHNwZWNpYWwgZXJyb3IgaWYgcm9vdCBpcyBsb2NrZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGNoaWxkcmVuIGR1cmluZyBzeW50aGVzaXMnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIGNoaWxkcmVuIHRvIFwiJHt0aGlzLnBhdGh9XCIgZHVyaW5nIHN5bnRoZXNpc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTmFtZSBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGEgQ29uc3RydWN0IHdpdGggbmFtZSAnJHtjaGlsZE5hbWV9JyBpbiAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuW2NoaWxkTmFtZV0gPSBjaGlsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2NrcyB0aGlzIGNvbnN0cnVjdCBmcm9tIGFsbG93aW5nIG1vcmUgY2hpbGRyZW4gdG8gYmUgYWRkZWQuIEFmdGVyIHRoaXNcbiAgICAgKiBjYWxsLCBubyBtb3JlIGNoaWxkcmVuIGNhbiBiZSBhZGRlZCB0byB0aGlzIGNvbnN0cnVjdCBvciB0byBhbnkgY2hpbGRyZW4uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGxvY2soKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5sb2NrcyB0aGlzIGNvc3RydWN0IGFuZCBhbGxvd3MgbXV0YXRpb25zIChhZGRpbmcgY2hpbGRyZW4pLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1bmxvY2soKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGF0aCBvZiBjb21wb25lbnRzIHVwIHRvIGJ1dCBleGNsdWRpbmcgdGhlIHJvb3RcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvb3RQYXRoKCk6IENvbnN0cnVjdFtdIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3JzID0gdGhpcy5hbmNlc3RvcnMoKTtcbiAgICAgICAgYW5jZXN0b3JzLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBhbmNlc3RvcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgY29uc3RydWN0IG9yIGFueSBvZiBpdCdzIHBhcmVudCBjb25zdHJ1Y3RzIGFyZVxuICAgICAqIGxvY2tlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGxvY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQubG9ja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhIGNvbnN0cnVjdCB0cmVlLlxuICogTm8gcGFyZW50IGFuZCBubyBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUm9vdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIEJ5cGFzcyB0eXBlIGNoZWNrc1xuICAgICAgICBzdXBlcih1bmRlZmluZWQgYXMgYW55LCAnJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFFbnRyeSB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG1ldGFkYXRhIGVudHJ5LlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0YWNrIHRyYWNlIGZvciB3aGVuIHRoZSBlbnRyeSB3YXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICB0cmFjZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzb3VyY2U6IENvbnN0cnVjdCwgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZykge1xuXG4gICAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLXR5cGVzXG5mdW5jdGlvbiBjcmVhdGVTdGFja1RyYWNlKGJlbG93OiBGdW5jdGlvbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvYmplY3QgPSB7IHN0YWNrOiAnJyB9O1xuICAgIGNvbnN0IHByZXZpb3VzTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXQ7XG4gICAgdHJ5IHtcbiAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iamVjdCwgYmVsb3cpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHByZXZpb3VzTGltaXQ7XG4gICAgfVxuICAgIGlmICghb2JqZWN0LnN0YWNrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdC5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMSkubWFwKHMgPT4gcy5yZXBsYWNlKC9eXFxzKmF0XFxzKy8sICcnKSk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLCtDQUFnRDtBQUNuQyxRQUFBLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBc0NwQjs7Ozs7T0FLRztJQUNILFlBQVksTUFBaUIsRUFBRSxFQUFVO1FBbkJ6Qzs7V0FFRztRQUNjLGNBQVMsR0FBa0MsRUFBRyxDQUFDO1FBQy9DLFlBQU8sR0FBMkIsRUFBRyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUV4RDs7O1dBR0c7UUFDSyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3RCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsc0ZBQXNGO1FBQ3RGLGdDQUFnQztRQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQzthQUNoRTtZQUVELDREQUE0RDtZQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNkO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0I7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtZQUM5QixHQUFHLElBQUksSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQixHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDdkUsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLEdBQUcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLElBQVk7UUFDOUIsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBUSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBUSxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFJLEdBQXdCLElBQUksQ0FBQztRQUNyQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRyxDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksU0FBUyxDQUFDLElBQVk7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDMUY7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUUxQyxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsR0FBVztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksV0FBVyxDQUFDLElBQVksRUFBRSxJQUFTLEVBQUUsSUFBVTtRQUNwRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLE9BQWU7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxPQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVk7UUFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFFMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsSUFBZ0I7UUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUVuQyxJQUFJLElBQUksR0FBMEIsSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDNUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFdBQVcsQ0FBQyxFQUFVO1FBQzlCLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsZ0JBQVEsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxRQUFRLENBQUMsS0FBVSxFQUFFLElBQVk7UUFDekMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxRQUFRLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzdGO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBWSxRQUFRO1FBQ2xCLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sUUFBUSxDQUFDLEtBQWdCLEVBQUUsU0FBaUI7UUFDcEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBRWYsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUN6RDtZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLFNBQVMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2hHO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLElBQUk7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxNQUFNO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUTtRQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsTUFBTTtRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE3WEQsOEJBNlhDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxJQUFLLFNBQVEsU0FBUztJQUNqQztRQUNFLHFCQUFxQjtRQUNyQixLQUFLLENBQUMsU0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFMRCxvQkFLQztBQXNCRCxNQUFhLGVBQWU7SUFDMUIsWUFBNEIsTUFBaUIsRUFBa0IsT0FBZTtRQUFsRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQWtCLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFFOUUsQ0FBQztDQUNGO0FBSkQsMENBSUM7QUFFRCxxQ0FBcUM7QUFDckMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFlO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDNUMsSUFBSTtRQUNGLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDeEM7WUFBUztRQUNSLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0tBQ3ZDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDakIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjeGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgbWFrZVVuaXF1ZUlkIH0gZnJvbSAnLi4vdXRpbC91bmlxdWVpZCc7XG5leHBvcnQgY29uc3QgUEFUSF9TRVAgPSAnLyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIGNvbnN0cnVjdCBncmFwaC5cbiAqIFdoZW4gYSBjb25zdHJ1Y3QgaXMgY3JlYXRlZCwgaXQgaXMgYWx3YXlzIGFkZGVkIGFzIGEgY2hpbGRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlIG9yIHVuZGVmaW5lZCBpZiB0aGlzIGlzIGEgcm9vdCBub2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcmVudD86IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogVGhlIGxvY2FsIGlkIG9mIHRoZSBjb25zdHJ1Y3QuXG4gICAqIFRoaXMgaWQgaXMgdW5pcXVlIGFtb25nc3QgaXRzIHNpYmxpbmdzLlxuICAgKiBUbyBvYnRhaW4gYSB0cmVlLWdsb2JhbCB1bmlxdWUgaWQgZm9yIHRoaXMgY29uc3RydWN0LCB1c2UgYHVuaXF1ZUlkYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBwYXRoIG9mIHRoaXMgY29uc3RydWN0IGluIHRoZSB0cmVlLlxuICAgKiBDb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJy8nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQSB0cmVlLWdsb2JhbCB1bmlxdWUgYWxwaGFudW1lcmljIGlkZW50aWZpZXIgZm9yIHRoaXMgY29uc3RydWN0LlxuICAgKiBJbmNsdWRlcyBhbGwgY29tcG9uZW50cyBvZiB0aGUgdHJlZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1bmlxdWVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNoaWxkcmVuIGFuZCB0aGVpciBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hpbGRyZW46IHsgW25hbWU6IHN0cmluZ106IENvbnN0cnVjdCB9ID0geyB9O1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IH07XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldGFkYXRhID0gbmV3IEFycmF5PE1ldGFkYXRhRW50cnk+KCk7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvICd0cnVlJy4gYWRkQ2hpbGQoKSBjYWxscyBmb3IgdGhpcyBjb25zdHJ1Y3QgYW5kIGFueSBjaGlsZFxuICAgKiB3aWxsIGZhaWwuIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IHRyZWUgbXV0YXRpb25zIGR1cmluZyBzeW50aGVzaXMuXG4gICAqL1xuICBwcml2YXRlIF9sb2NrZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb25zdHJ1Y3Qgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgIFByb3BlcnRpZXMgZm9yIHRoaXMgY29uc3RydWN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcblxuICAgIC8vIFdlIHNheSB0aGF0IHBhcmVudCBpcyByZXF1aXJlZCwgYnV0IHNvbWUgcm9vdCBjb25zdHJ1Y3RzIGJ5cGFzcyB0aGUgdHlwZSBjaGVja3MgYW5kXG4gICAgLy8gYWN0dWFsbHkgcGFzcyBpbiAndW5kZWZpbmVkJy5cbiAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChpZCA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHJvb3QgY29uc3RydWN0cyBtYXkgaGF2ZSBhbiBlbXB0eSBuYW1lJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhcyBzaWRlIGVmZmVjdCBzbyBtdXN0IGJlIHZlcnkgbGFzdCB0aGluZyBpbiBjb25zdHJ1Y3RvclxuICAgICAgcGFyZW50LmFkZENoaWxkKHRoaXMsIHRoaXMuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcm9vdCBjb25zdHJ1Y3QuXG4gICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIG5hbWUgd2UgZW5kZWQgdXAgd2l0aFxuICAgIGlmICh0aGlzLmlkICE9PSAnJykge1xuICAgICAgdGhpcy5fdmFsaWRhdGVJZCh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5yb290UGF0aCgpLm1hcChjID0+IGMuaWQpO1xuICAgIHRoaXMucGF0aCA9IGNvbXBvbmVudHMuam9pbihQQVRIX1NFUCk7XG4gICAgdGhpcy51bmlxdWVJZCA9IGNvbXBvbmVudHMubGVuZ3RoID4gMCA/IG1ha2VVbmlxdWVJZChjb21wb25lbnRzKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMucGF0aDtcbiAgICByZXR1cm4gdGhpcy50eXBlbmFtZSArIChwYXRoLmxlbmd0aCA+IDAgPyBgIFske3BhdGh9XWAgOiAnJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyB3aXRoIGEgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0cnVjdCBhbmQgaXQncyBjaGlsZHJlbi5cbiAgICovXG4gIHB1YmxpYyB0b1RyZWVTdHJpbmcoZGVwdGggPSAwKSB7XG4gICAgbGV0IG91dCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkge1xuICAgICAgb3V0ICs9ICcgICc7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmlkIHx8ICcnO1xuICAgIG91dCArPSBgJHt0aGlzLnR5cGVuYW1lfSR7bmFtZS5sZW5ndGggPiAwID8gJyBbJyArIG5hbWUgKyAnXScgOiAnJ31cXG5gO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgb3V0ICs9IGNoaWxkLnRvVHJlZVN0cmluZyhkZXB0aCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aCwgb3IgdW5kZWZpbmVkXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFJlbGF0aXZlIG5hbWUgb2YgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2hpbGRcbiAgICogQHJldHVybnMgYSBjaGlsZCBieSBwYXRoIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZENoaWxkKHBhdGg6IHN0cmluZyk6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFBBVEhfU0VQKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIG11c3QgYmUgcmVsYXRpdmUnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFBBVEhfU0VQKTtcblxuICAgIGxldCBjdXJyOiBDb25zdHJ1Y3R8dW5kZWZpbmVkID0gdGhpcztcbiAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmIHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnIgPSBjdXJyLl9jaGlsZHJlbltwYXJ0cy5zaGlmdCgpIV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aFxuICAgKlxuICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBkZXNjZW5kYW50IGlzIG5vdCBmb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgUmVsYXRpdmUgbmFtZSBvZiBhIGRpcmVjdCBvciBpbmRpcmVjdCBjaGlsZFxuICAgKiBAcmV0dXJucyBDaGlsZCB3aXRoIHRoZSBnaXZlbiBwYXRoLlxuICAgKi9cbiAgcHVibGljIGZpbmRDaGlsZChwYXRoOiBzdHJpbmcpOiBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZENoaWxkKHBhdGgpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNoaWxkIHdpdGggcGF0aDogJyR7cGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGNvbnN0cnVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2NoaWxkcmVuKS5tYXAoayA9PiB0aGlzLl9jaGlsZHJlbltrXSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgY29udGV4dHVhbCB2YWx1ZXMuXG4gICAqIENvbnRleHQgbXVzdCBiZSBzZXQgYmVmb3JlIGFueSBjaGlsZHJlbiBhcmUgYWRkZWQsIHNpbmNlIGNoaWxkcmVuIG1heSBjb25zdWx0IGNvbnRleHQgaW5mbyBkdXJpbmcgY29uc3RydWN0aW9uLlxuICAgKiBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqIEBwYXJhbSBrZXkgVGhlIGNvbnRleHQga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgY29udGV4dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldENvbnRleHQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMuY2hpbGRyZW4ubWFwKGMgPT4gYy5pZCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgY29udGV4dCBhZnRlciBjaGlsZHJlbiBoYXZlIGJlZW4gYWRkZWQ6ICcgKyBuYW1lcy5qb2luKCcsJykpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdHJlZSBjb250ZXh0LlxuICAgKlxuICAgKiBDb250ZXh0IGlzIHVzdWFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHJvb3QsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGNvbnRleHQga2V5XG4gICAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHZhbHVlIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGdldENvbnRleHQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250ZXh0W2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuIHZhbHVlOyB9XG5cbiAgICByZXR1cm4gdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuZ2V0Q29udGV4dChrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdmFsdWUgZnJvbSB0cmVlLWdsb2JhbCBjb250ZXh0XG4gICAqXG4gICAqIEl0IGlzIGFuIGVycm9yIGlmIHRoZSBjb250ZXh0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlcXVpcmVDb250ZXh0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q29udGV4dChrZXkpO1xuXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3Qgc3VwcGx5IGEgY29udGV4dCB2YWx1ZSBuYW1lZCAnJHtrZXl9J2ApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBtZXRhZGF0YSBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnN0cnVjdC5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciBkZXByZWNhdGlvbiBub3RpY2VzLCBzb3VyY2UgbWFwcGluZywgZXRjLlxuICAgKi9cbiAgcHVibGljIGdldCBtZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG1ldGFkYXRhIGVudHJ5IHRvIHRoaXMgY29uc3RydWN0LlxuICAgKiBFbnRyaWVzIGFyZSBhcmJpdHJhcnkgdmFsdWVzIGFuZCB3aWxsIGFsc28gaW5jbHVkZSBhIHN0YWNrIHRyYWNlIHRvIGFsbG93IHRyYWNpbmcgYmFjayB0b1xuICAgKiB0aGUgY29kZSBsb2NhdGlvbiBmb3Igd2hlbiB0aGUgZW50cnkgd2FzIGFkZGVkLiBJdCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgc291cmNlXG4gICAqIG1hcHBpbmcgaW4gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzIHRvIGltcHJvdmUgZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIGEgc3RyaW5nIGRlbm90aW5nIHRoZSB0eXBlIG9mIG1ldGFkYXRhXG4gICAqIEBwYXJhbSBkYXRhIHRoZSB2YWx1ZSBvZiB0aGUgbWV0YWRhdGEgKGNhbiBiZSBhIFRva2VuKS4gSWYgbnVsbC91bmRlZmluZWQsIG1ldGFkYXRhIHdpbGwgbm90IGJlIGFkZGVkLlxuICAgKiBAcGFyYW0gZnJvbSBhIGZ1bmN0aW9uIHVuZGVyIHdoaWNoIHRvIHJlc3RyaWN0IHRoZSBtZXRhZGF0YSBlbnRyeSdzIHN0YWNrIHRyYWNlIChkZWZhdWx0cyB0byB0aGlzLmFkZE1ldGFkYXRhKVxuICAgKi9cbiAgcHVibGljIGFkZE1ldGFkYXRhKHR5cGU6IHN0cmluZywgZGF0YTogYW55LCBmcm9tPzogYW55KTogQ29uc3RydWN0IHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uc3QgdHJhY2UgPSBjcmVhdGVTdGFja1RyYWNlKGZyb20gfHwgdGhpcy5hZGRNZXRhZGF0YSk7XG4gICAgdGhpcy5fbWV0YWRhdGEucHVzaCh7IHR5cGUsIGRhdGEsIHRyYWNlIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7IFwiYXdzOmNkazppbmZvXCI6IDxtZXNzYWdlPiB9IG1ldGFkYXRhIGVudHJ5IHRvIHRoaXMgY29uc3RydWN0LlxuICAgKiBUaGUgdG9vbGtpdCB3aWxsIGRpc3BsYXkgdGhlIGluZm8gbWVzc2FnZSB3aGVuIGFwcHMgYXJlIHN5bnRoZXNpemVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgaW5mbyBtZXNzYWdlLlxuICAgKi9cbiAgcHVibGljIGFkZEluZm8obWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5hZGRNZXRhZGF0YShjeGFwaS5JTkZPX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHsgd2FybmluZzogPG1lc3NhZ2U+IH0gbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAqIFRoZSB0b29sa2l0IHdpbGwgZGlzcGxheSB0aGUgd2FybmluZyB3aGVuIGFuIGFwcCBpcyBzeW50aGVzaXplZCwgb3IgZmFpbFxuICAgKiBpZiBydW4gaW4gLS1zdHJpY3QgbW9kZS5cbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBhZGRXYXJuaW5nKG1lc3NhZ2U6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuV0FSTklOR19NRVRBREFUQV9LRVksIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4geyBlcnJvcjogPG1lc3NhZ2U+IH0gbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAqIFRoZSB0b29sa2l0IHdpbGwgZmFpbCBzeW50aGVzaXMgd2hlbiBlcnJvcnMgYXJlIHJlcG9ydGVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLmFkZE1ldGFkYXRhKGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY29uc3RydWN0cyBpbiBvcmRlciB0byBwZXJmb3JtXG4gICAqIHZhbGlkYXRpb24gbG9naWMuIEl0IGlzIGNhbGxlZCBvbiBhbGwgY29uc3RydWN0cyBiZWZvcmUgc3ludGhlc2lzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSB0aGUgY29uc3RydWN0IGlzIHZhbGlkLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyAndmFsaWRhdGUnIG9uIGFsbCBjaGlsZCBjb25zdHJ1Y3RzIGFuZCB0aGVuIG9uIHRoaXMgY29uc3RydWN0IChkZXB0aC1maXJzdCkuXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiB2YWxpZGF0aW9uIGVycm9ycy4gSWYgdGhlIGxpc3QgaXMgZW1wdHksIGFsbCBjb25zdHJ1Y3RzIGFyZSB2YWxpZC5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVRyZWUoKTogVmFsaWRhdGlvbkVycm9yW10ge1xuICAgIGxldCBlcnJvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdGlvbkVycm9yPigpO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGNoaWxkLnZhbGlkYXRlVHJlZSgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbEVycm9ycyA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gZXJyb3JzLmNvbmNhdChsb2NhbEVycm9ycy5tYXAobXNnID0+IG5ldyBWYWxpZGF0aW9uRXJyb3IodGhpcywgbXNnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYW5jZXN0b3JzIChpbmNsdWRpbmcgc2VsZikgb2YgdGhpcyBDb25zdHJ1Y3QgdXAgdW50aWwgYW5kIGV4Y2x1ZGluZyB0aGUgaW5kaWNhdGVkIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gdG8gVGhlIGNvbnN0cnVjdCB0byByZXR1cm4gdGhlIHBhdGggY29tcG9uZW50cyByZWxhdGl2ZSB0bywgb3JcbiAgICogdGhlIGVudGlyZSBsaXN0IG9mIGFuY2VzdG9ycyAoaW5jbHVkaW5nIHJvb3QpIGlmIG9taXR0ZWQuXG4gICAqL1xuICBwdWJsaWMgYW5jZXN0b3JzKHVwVG8/OiBDb25zdHJ1Y3QpOiBDb25zdHJ1Y3RbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PENvbnN0cnVjdD4oKTtcblxuICAgIGxldCBjdXJyOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQgPSB0aGlzO1xuICAgIHdoaWxlIChjdXJyICYmIGN1cnIgIT09IHVwVG8pIHtcbiAgICAgIHJldC51bnNoaWZ0KGN1cnIpO1xuICAgICAgY3VyciA9IGN1cnIucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgaWQgb2YgdGhlIGNvbnN0cnVjdCBsZWdhbC5cbiAgICogQ29uc3RydWN0IElEcyBjYW4gYmUgYW55IGNoYXJhY3RlcnMgYmVzaWRlcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZhbGlkYXRlSWQoaWQ6IHN0cmluZykge1xuICAgIGlmIChpZC5pbmRleE9mKFBBVEhfU0VQKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IG5hbWVzIGNhbm5vdCBpbmNsdWRlICcke1BBVEhfU0VQfSc6ICR7aWR9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgYHByb3BzYCBiYWcgZG9lc24ndCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBgbmFtZWAuXG4gICAqIEluIHRoZSBmdXR1cmUgd2UgY2FuIGFkZCBzb21lIHR5cGUtY2hlY2tpbmcgaGVyZSwgbWF5YmUgZXZlbiBhdXRvLWdlbmVyYXRlIGR1cmluZyBjb21waWxhdGlvbi5cbiAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyBiYWcuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBgcmVxdWlyZVByb3BlcnR5YGAgZnJvbSBgYEBhd3MtY2RrL3J1bnRpbWVgYCBpbnN0ZWFkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVpcmVkKHByb3BzOiBhbnksIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCEobmFtZSBpbiBwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IG9mIHR5cGUgJHt0aGlzLnR5cGVuYW1lfSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1tuYW1lXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHR5cGUgbmFtZSBvZiB0aGlzIG5vZGUuXG4gICAqL1xuICBwcml2YXRlIGdldCB0eXBlbmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN0b3I6IGFueSA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3IubmFtZSB8fCAnQ29uc3RydWN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29uc3RydWN0IHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIG5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgY2hpbGQgY29uc3RydWN0LlxuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCBwYXJ0IG5hbWUgb2YgdGhlIGNoaWxkXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkQ2hpbGQoY2hpbGQ6IENvbnN0cnVjdCwgY2hpbGROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5sb2NrZWQpIHtcblxuICAgICAgLy8gc3BlY2lhbCBlcnJvciBpZiByb290IGlzIGxvY2tlZFxuICAgICAgaWYgKCF0aGlzLnBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGNoaWxkcmVuIGR1cmluZyBzeW50aGVzaXMnKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIGNoaWxkcmVuIHRvIFwiJHt0aGlzLnBhdGh9XCIgZHVyaW5nIHN5bnRoZXNpc2ApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5hbWUgaW4gdGhpcy5fY2hpbGRyZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhIENvbnN0cnVjdCB3aXRoIG5hbWUgJyR7Y2hpbGROYW1lfScgaW4gJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hpbGRyZW5bY2hpbGROYW1lXSA9IGNoaWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2tzIHRoaXMgY29uc3RydWN0IGZyb20gYWxsb3dpbmcgbW9yZSBjaGlsZHJlbiB0byBiZSBhZGRlZC4gQWZ0ZXIgdGhpc1xuICAgKiBjYWxsLCBubyBtb3JlIGNoaWxkcmVuIGNhbiBiZSBhZGRlZCB0byB0aGlzIGNvbnN0cnVjdCBvciB0byBhbnkgY2hpbGRyZW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9jaygpIHtcbiAgICB0aGlzLl9sb2NrZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVubG9ja3MgdGhpcyBjb3N0cnVjdCBhbmQgYWxsb3dzIG11dGF0aW9ucyAoYWRkaW5nIGNoaWxkcmVuKS5cbiAgICovXG4gIHByb3RlY3RlZCB1bmxvY2soKSB7XG4gICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwYXRoIG9mIGNvbXBvbmVudHMgdXAgdG8gYnV0IGV4Y2x1ZGluZyB0aGUgcm9vdFxuICAgKi9cbiAgcHJpdmF0ZSByb290UGF0aCgpOiBDb25zdHJ1Y3RbXSB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gdGhpcy5hbmNlc3RvcnMoKTtcbiAgICBhbmNlc3RvcnMuc2hpZnQoKTtcbiAgICByZXR1cm4gYW5jZXN0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnN0cnVjdCBvciBhbnkgb2YgaXQncyBwYXJlbnQgY29uc3RydWN0cyBhcmVcbiAgICogbG9ja2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBsb2NrZWQoKSB7XG4gICAgaWYgKHRoaXMuX2xvY2tlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmxvY2tlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhIGNvbnN0cnVjdCB0cmVlLlxuICogTm8gcGFyZW50IGFuZCBubyBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUm9vdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEJ5cGFzcyB0eXBlIGNoZWNrc1xuICAgIHN1cGVyKHVuZGVmaW5lZCBhcyBhbnksICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgbWV0YWRhdGEgZW50cnkuXG4gICAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhLlxuICAgKi9cbiAgZGF0YT86IGFueTtcblxuICAvKipcbiAgICogQSBzdGFjayB0cmFjZSBmb3Igd2hlbiB0aGUgZW50cnkgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICB0cmFjZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBDb25zdHJ1Y3QsIHB1YmxpYyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmcpIHtcblxuICB9XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tdHlwZXNcbmZ1bmN0aW9uIGNyZWF0ZVN0YWNrVHJhY2UoYmVsb3c6IEZ1bmN0aW9uKTogc3RyaW5nW10ge1xuICBjb25zdCBvYmplY3QgPSB7IHN0YWNrOiAnJyB9O1xuICBjb25zdCBwcmV2aW91c0xpbWl0ID0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0O1xuICB0cnkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iamVjdCwgYmVsb3cpO1xuICB9IGZpbmFsbHkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHByZXZpb3VzTGltaXQ7XG4gIH1cbiAgaWYgKCFvYmplY3Quc3RhY2spIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG9iamVjdC5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMSkubWFwKHMgPT4gcy5yZXBsYWNlKC9eXFxzKmF0XFxzKy8sICcnKSk7XG59XG4iXX0=

@@ -10,5 +10,5 @@ import { Construct } from './construct';

* For example:
* <Foo p1='a' p2={2}/>
* <Foo p1='a' p2={2}/>
* will produce this code:
* jsx.create(Foo, { p1: 'a', p2: 2 }, []);
* jsx.create(Foo, { p1: 'a', p2: 2 }, []);
*

@@ -15,0 +15,0 @@ * This function will not actually create any objects, but rather just return a tree of

@@ -10,5 +10,5 @@ "use strict";

* For example:
* <Foo p1='a' p2={2}/>
* <Foo p1='a' p2={2}/>
* will produce this code:
* jsx.create(Foo, { p1: 'a', p2: 2 }, []);
* jsx.create(Foo, { p1: 'a', p2: 2 }, []);
*

@@ -55,2 +55,2 @@ * This function will not actually create any objects, but rather just return a tree of

})(jsx = exports.jsx || (exports.jsx = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianN4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBSXhDLElBQWlCLEdBQUcsQ0FrRG5CO0FBbERELFdBQWlCLEdBQUc7SUFFaEI7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxTQUFnQixNQUFNLENBQUMsSUFBMEIsRUFBRSxLQUFVLEVBQUUsR0FBRyxRQUF1QjtRQUNyRixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxZQUFZLHFCQUFTLENBQUMsRUFBRTtZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsT0FBTztZQUNILElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxRQUFRO1NBQ3JDLENBQUM7SUFDTixDQUFDO0lBUmUsVUFBTSxTQVFyQixDQUFBO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBZ0IsU0FBUyxDQUFDLElBQWlCLEVBQUUsTUFBa0I7UUFDM0QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFDbEUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUxlLGFBQVMsWUFLeEIsQ0FBQTtJQUVELFNBQVMsY0FBYyxDQUFDLE1BQWlCLEVBQUUsUUFBZTtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pELGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztBQUNMLENBQUMsRUFsRGdCLEdBQUcsR0FBSCxXQUFHLEtBQUgsV0FBRyxRQWtEbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdCc7XG5cbmV4cG9ydCB0eXBlIENvbnN0cnVjdENvbnN0cnVjdG9yID0geyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogQ29uc3RydWN0IH07XG5cbmV4cG9ydCBuYW1lc3BhY2UganN4IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBKU1ggZmFjdG9yeSBmdW5jdGlvbi4gVGhpcyBpcyB3aGF0IFR5cGVTY3JpcHQgY29udmVydHMgYSBKU1ggc3RhdGVtZW50IHRvLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogICAgICA8Rm9vIHAxPSdhJyBwMj17Mn0vPlxuICAgICAqIHdpbGwgcHJvZHVjZSB0aGlzIGNvZGU6XG4gICAgICogICAgICBqc3guY3JlYXRlKEZvbywgeyBwMTogJ2EnLCBwMjogMiB9LCBbXSk7XG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGFjdHVhbGx5IGNyZWF0ZSBhbnkgb2JqZWN0cywgYnV0IHJhdGhlciBqdXN0IHJldHVybiBhIHRyZWUgb2ZcbiAgICAgKiBlbGVtZW50IGluZm9ybWF0aW9uIGZvciBsYXRlciBjb25zdW1wdGlvbiBieSBqc3guY29uc3RydWN0KHRyZWUpLCB3aGljaCBjYW4gYmUgdXNlZFxuICAgICAqIHRvIG1hdGVyaWFsaXplIGFuIGFjdHVhbCBjb25zdHJ1Y3QgdHJlZSBmcm9tLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIGNsYXNzXG4gICAgICogQHBhcmFtIHByb3BzIFByb3BlcnR5IGhhc2hcbiAgICAgKiBAcGFyYW0gY2hpbGRyZW4gQXJyYXkgb2YgY2hpbGRyZW5cbiAgICAgKiBAcmV0dXJucyBlbGVtZW50IHRyZWVcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlKHR5cGU6IENvbnN0cnVjdENvbnN0cnVjdG9yLCBwcm9wczogYW55LCAuLi5jaGlsZHJlbjogSlNYLkVsZW1lbnRbXSk6IEpTWC5FbGVtZW50IHtcbiAgICAgICAgaWYgKCEodHlwZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBDb25zdHJ1Y3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBub2RlcyBtdXN0IGRlcml2ZSBmcm9tIENvbnN0cnVjdDogJyArIHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsIHByb3BzOiBwcm9wcyB8fCB7fSwgY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIEpTWCB0cmVlIHRvIGEgY29uc3RydWN0IHRyZWUuXG4gICAgICogQ3JlYXRlcyBhbGwgY29uc3RydWN0IG9iamVjdHMgYW5kIGFzc29jaWF0ZSB0aGVtIHRvZ2V0aGVyIGFzIGNoaWxkcmVuLlxuICAgICAqIEBwYXJhbSB0cmVlIFRoZSBKU1ggdHJlZVxuICAgICAqIEBwYXJhbSBwYXJlbnQgT3B0aW9uYWwgcGFyZW50IGZvciB0aGUgY29uc3RydWN0IHRyZWVcbiAgICAgKiBAcmV0dXJucyBBIENvbnN0cnVjdCBvYmplY3RcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gY29uc3RydWN0KHRyZWU6IEpTWC5FbGVtZW50LCBwYXJlbnQ/OiBDb25zdHJ1Y3QpOiBDb25zdHJ1Y3Qge1xuICAgICAgICBjb25zdCBpZCA9ICh0cmVlLnByb3BzICYmIHRyZWUucHJvcHMuaWQpIHx8ICcnO1xuICAgICAgICBjb25zdCByb290ID0gbmV3IHRyZWUudHlwZShwYXJlbnQsIGlkLCB0cmVlLnByb3BzKTsgLy8gY3JlYXRlIHJvb3RcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4ocm9vdCwgdHJlZS5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkcmVuKHBhcmVudDogQ29uc3RydWN0LCBjaGlsZHJlbjogYW55W10pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgaWQgPSAoY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHMuaWQpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRPYmogPSBuZXcgY2hpbGQudHlwZShwYXJlbnQsIGlkLCBjaGlsZC5wcm9wcyk7XG4gICAgICAgICAgICBjcmVhdGVDaGlsZHJlbihjaGlsZE9iaiwgY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgbmFtZXNwYWNlIEpTWCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWNsYXJlIEpTWC5FbGVtZW50IHRvIGJlIHRoZSBsYXp5IHNwZWNpZmljYXRpb24gb2YgYSBDb25zdHJ1Y3RcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudCB7XG4gICAgICAgICAgICB0eXBlOiBDb25zdHJ1Y3RDb25zdHJ1Y3RvcjtcblxuICAgICAgICAgICAgcHJvcHM6IGFueTtcblxuICAgICAgICAgICAgY2hpbGRyZW46IEpTWC5FbGVtZW50W107XG4gICAgICAgIH1cblxuICAgICAgICBpbnRlcmZhY2UgRWxlbWVudEF0dHJpYnV0ZXNQcm9wZXJ0eSB7XG4gICAgICAgICAgICAvLyBQcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHRoYXQgVFNDIHdpbGwgdXNlIHRvIHNlZSB0aGUgYWxsb3dhYmxlXG4gICAgICAgICAgICAvLyBwYXJhbWV0ZXJzIGZvciBldmVyeSB0eXBlLlxuICAgICAgICAgICAganN4UHJvcHM6IGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNBdHRyaWJ1dGVzIHtcbiAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgdXNlZCBieSB0aGUgZnJhbWV3b3JrLCBub3QgYnkgdGhlIGluZGl2aWR1YWwgY2xhc3Nlcy5cbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianN4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBSXhDLElBQWlCLEdBQUcsQ0FrRG5CO0FBbERELFdBQWlCLEdBQUc7SUFFbEI7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxTQUFnQixNQUFNLENBQUMsSUFBMEIsRUFBRSxLQUFVLEVBQUUsR0FBRyxRQUF1QjtRQUN2RixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxZQUFZLHFCQUFTLENBQUMsRUFBRTtZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsT0FBTztZQUNMLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxRQUFRO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBUmUsVUFBTSxTQVFyQixDQUFBO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBZ0IsU0FBUyxDQUFDLElBQWlCLEVBQUUsTUFBa0I7UUFDN0QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFDbEUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBTGUsYUFBUyxZQUt4QixDQUFBO0lBRUQsU0FBUyxjQUFjLENBQUMsTUFBaUIsRUFBRSxRQUFlO1FBQ3hELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFO1lBQzVCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQWxEZ0IsR0FBRyxHQUFILFdBQUcsS0FBSCxXQUFHLFFBa0RuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0JztcblxuZXhwb3J0IHR5cGUgQ29uc3RydWN0Q29uc3RydWN0b3IgPSB7IG5ldyAoLi4uYXJnczogYW55W10pOiBDb25zdHJ1Y3QgfTtcblxuZXhwb3J0IG5hbWVzcGFjZSBqc3gge1xuXG4gIC8qKlxuICAgKiBUaGUgSlNYIGZhY3RvcnkgZnVuY3Rpb24uIFRoaXMgaXMgd2hhdCBUeXBlU2NyaXB0IGNvbnZlcnRzIGEgSlNYIHN0YXRlbWVudCB0by5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgIDxGb28gcDE9J2EnIHAyPXsyfS8+XG4gICAqIHdpbGwgcHJvZHVjZSB0aGlzIGNvZGU6XG4gICAqICAgIGpzeC5jcmVhdGUoRm9vLCB7IHAxOiAnYScsIHAyOiAyIH0sIFtdKTtcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBhY3R1YWxseSBjcmVhdGUgYW55IG9iamVjdHMsIGJ1dCByYXRoZXIganVzdCByZXR1cm4gYSB0cmVlIG9mXG4gICAqIGVsZW1lbnQgaW5mb3JtYXRpb24gZm9yIGxhdGVyIGNvbnN1bXB0aW9uIGJ5IGpzeC5jb25zdHJ1Y3QodHJlZSksIHdoaWNoIGNhbiBiZSB1c2VkXG4gICAqIHRvIG1hdGVyaWFsaXplIGFuIGFjdHVhbCBjb25zdHJ1Y3QgdHJlZSBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgY2xhc3NcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnR5IGhhc2hcbiAgICogQHBhcmFtIGNoaWxkcmVuIEFycmF5IG9mIGNoaWxkcmVuXG4gICAqIEByZXR1cm5zIGVsZW1lbnQgdHJlZVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSh0eXBlOiBDb25zdHJ1Y3RDb25zdHJ1Y3RvciwgcHJvcHM6IGFueSwgLi4uY2hpbGRyZW46IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCEodHlwZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBDb25zdHJ1Y3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBub2RlcyBtdXN0IGRlcml2ZSBmcm9tIENvbnN0cnVjdDogJyArIHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlLCBwcm9wczogcHJvcHMgfHwge30sIGNoaWxkcmVuXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEpTWCB0cmVlIHRvIGEgY29uc3RydWN0IHRyZWUuXG4gICAqIENyZWF0ZXMgYWxsIGNvbnN0cnVjdCBvYmplY3RzIGFuZCBhc3NvY2lhdGUgdGhlbSB0b2dldGhlciBhcyBjaGlsZHJlbi5cbiAgICogQHBhcmFtIHRyZWUgVGhlIEpTWCB0cmVlXG4gICAqIEBwYXJhbSBwYXJlbnQgT3B0aW9uYWwgcGFyZW50IGZvciB0aGUgY29uc3RydWN0IHRyZWVcbiAgICogQHJldHVybnMgQSBDb25zdHJ1Y3Qgb2JqZWN0XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gY29uc3RydWN0KHRyZWU6IEpTWC5FbGVtZW50LCBwYXJlbnQ/OiBDb25zdHJ1Y3QpOiBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0IGlkID0gKHRyZWUucHJvcHMgJiYgdHJlZS5wcm9wcy5pZCkgfHwgJyc7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyB0cmVlLnR5cGUocGFyZW50LCBpZCwgdHJlZS5wcm9wcyk7IC8vIGNyZWF0ZSByb290XG4gICAgY3JlYXRlQ2hpbGRyZW4ocm9vdCwgdHJlZS5jaGlsZHJlbik7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbihwYXJlbnQ6IENvbnN0cnVjdCwgY2hpbGRyZW46IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgaWQgPSAoY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHMuaWQpIHx8ICcnO1xuICAgICAgY29uc3QgY2hpbGRPYmogPSBuZXcgY2hpbGQudHlwZShwYXJlbnQsIGlkLCBjaGlsZC5wcm9wcyk7XG4gICAgICBjcmVhdGVDaGlsZHJlbihjaGlsZE9iaiwgY2hpbGQuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBKU1gge1xuICAgIC8qKlxuICAgICAqIERlY2xhcmUgSlNYLkVsZW1lbnQgdG8gYmUgdGhlIGxhenkgc3BlY2lmaWNhdGlvbiBvZiBhIENvbnN0cnVjdFxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudCB7XG4gICAgICB0eXBlOiBDb25zdHJ1Y3RDb25zdHJ1Y3RvcjtcblxuICAgICAgcHJvcHM6IGFueTtcblxuICAgICAgY2hpbGRyZW46IEpTWC5FbGVtZW50W107XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkge1xuICAgICAgLy8gUHJvcGVydHkgb2YgdGhlIG9iamVjdCB0aGF0IFRTQyB3aWxsIHVzZSB0byBzZWUgdGhlIGFsbG93YWJsZVxuICAgICAgLy8gcGFyYW1ldGVycyBmb3IgZXZlcnkgdHlwZS5cbiAgICAgIGpzeFByb3BzOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMge1xuICAgICAgLy8gUHJvcGVydGllcyB1c2VkIGJ5IHRoZSBmcmFtZXdvcmssIG5vdCBieSB0aGUgaW5kaXZpZHVhbCBjbGFzc2VzLlxuICAgICAgaWQ6IHN0cmluZztcbiAgICB9XG4gIH1cbn1cbiJdfQ==

@@ -39,2 +39,23 @@ import { Construct } from './construct';

/**
* This is the interface for arguments to `tagFormatResolve` to enable extensions
*/
export interface TagGroups {
/**
* Tags that overwrite ancestor tags
*/
stickyTags: Tags;
/**
* Tags that are overwritten by ancestor tags
*/
nonStickyTags: Tags;
/**
* Tags with propagate true not from an ancestor
*/
propagateTags: Tags;
/**
* Tags that are propagated from ancestors
*/
ancestorTags: Tags;
}
/**
* Properties for removing tags

@@ -51,2 +72,11 @@ */

/**
* Properties for Tag Manager
*/
export interface TagManagerProps {
/**
* Initial tags to set on the tag manager using TAG_DEFAULTS
*/
initialTags?: Tags;
}
/**
* TagManager facilitates a common implementation of tagging for Constructs.

@@ -95,3 +125,3 @@ *

private readonly blockedTags;
constructor(parent: Construct, initialTags?: Tags);
constructor(parent: Construct, props?: TagManagerProps);
/**

@@ -113,4 +143,13 @@ * Converts the `tags` to a Token for use in lazy evaluation

* @param key The key of the tag to remove
* @param props The `RemoveProps` for the tag
*/
removeTag(key: string, props?: RemoveProps): void;
/**
* Handles returning the tags in the desired format
*
* This function can be overridden to support another tag format. This was
* specifically designed to enable AutoScalingGroup Tags that have an
* additional CloudFormation key for `PropagateAtLaunch`
*/
protected tagFormatResolve(tagGroups: TagGroups): any;
}

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

class TagManager extends tokens_1.Token {
constructor(parent, initialTags = {}) {
constructor(parent, props = {}) {
super();

@@ -52,2 +52,3 @@ this.parent = parent;

this.blockedTags = [];
const initialTags = props.initialTags || {};
for (const key of Object.keys(initialTags)) {

@@ -71,2 +72,4 @@ const tag = {

resolve() {
// need this for scoping
const blockedTags = this.blockedTags;
function filterTags(_tags, filter = {}) {

@@ -91,2 +94,5 @@ const filteredTags = {};

});
for (const key of blockedTags) {
delete filteredTags[key];
}
return filteredTags;

@@ -102,13 +108,18 @@ }

}
for (const key of blockedTags) {
delete parentTags[key];
}
return parentTags;
}
const propOverwrite = filterTags(this._tags, { sticky: false });
const nonOverwrite = filterTags(this._tags, { sticky: true });
const nonStickyTags = filterTags(this._tags, { sticky: false });
const stickyTags = filterTags(this._tags, { sticky: true });
const ancestors = this.parent.ancestors();
ancestors.push(this.parent);
const tags = Object.assign({}, propOverwrite, propagatedTags(ancestors), nonOverwrite);
for (const key of this.blockedTags) {
delete tags[key];
}
return Object.keys(tags).map(key => ({ key, value: tags[key] }));
const ancestorTags = propagatedTags(ancestors);
const propagateTags = filterTags(this._tags, { propagate: true });
return this.tagFormatResolve({
ancestorTags,
nonStickyTags,
stickyTags,
propagateTags,
});
}

@@ -139,2 +150,3 @@ /**

* @param key The key of the tag to remove
* @param props The `RemoveProps` for the tag
*/

@@ -147,2 +159,16 @@ removeTag(key, props = { blockPropagate: true }) {

}
/**
* Handles returning the tags in the desired format
*
* This function can be overridden to support another tag format. This was
* specifically designed to enable AutoScalingGroup Tags that have an
* additional CloudFormation key for `PropagateAtLaunch`
*/
tagFormatResolve(tagGroups) {
const tags = Object.assign({}, tagGroups.nonStickyTags, tagGroups.ancestorTags, tagGroups.stickyTags);
for (const key of this.blockedTags) {
delete tags[key];
}
return Object.keys(tags).map(key => ({ key, value: tags[key] }));
}
}

@@ -155,2 +181,2 @@ TagManager.DEFAULT_TAG_PROPS = {

exports.TagManager = TagManager;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHFDQUFpQztBQTZEakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxjQUFLO0lBeUJqQyxZQUE2QixNQUFpQixFQUFFLGNBQXFCLEVBQUU7UUFDbkUsS0FBSyxFQUFFLENBQUM7UUFEaUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVY5Qzs7V0FFRztRQUNjLFVBQUssR0FBYSxFQUFFLENBQUM7UUFFdEM7O1dBRUc7UUFDYyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUl4QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUc7Z0JBQ1IsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFVLENBQUMsaUJBQWlCO2FBQ3RDLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFoQ0Q7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQXlCO1FBQzlDLE9BQU8sQ0FBRSxRQUFzQixDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBNkJEOztPQUVHO0lBQ0ksT0FBTztRQUNWLFNBQVMsVUFBVSxDQUFDLEtBQWUsRUFBRSxTQUFtQixFQUFFO1lBQ3RELE1BQU0sWUFBWSxHQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBRSxHQUFHLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixNQUFNLEtBQUssR0FBYSxLQUFL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RyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQztTQUNwQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsR0FBVyxFQUFFLFFBQXFCLEVBQUMsY0FBYyxFQUFFLElBQUksRUFBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7QUF4R3VCLDRCQUFpQixHQUFhO0lBQ2xELFNBQVMsRUFBRSxJQUFJO0lBQ2YsTUFBTSxFQUFFLElBQUk7SUFDWixTQUFTLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBYk4sZ0NBd0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuL3Rva2Vucyc7XG5cbi8qKlxuICogSVRhZ2dhYmxlIGluZGljYXRlcyBhIGVudGl0eSBtYW5hZ2VzIHRhZ3MgdmlhIHRoZSBgdGFnc2AgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGFnZ2FibGUge1xuICAgIHJlYWRvbmx5IHRhZ3M6IFRhZ01hbmFnZXIsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBUYWdzIGlzIGEgZGljdGlvbmFyeSBvZiB0YWdzIGFzIHN0cmluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgVGFncyA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbi8qKlxuICogQW4gb2JqZWN0IG9mIHRhZ3Mgd2l0aCB2YWx1ZSBhbmQgcHJvcGVydGllc1xuICpcbiAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ1dCBub3QgZXhwb3J0ZWRcbiAqL1xuaW50ZXJmYWNlIEZ1bGxUYWdzIHtcbiAgICBba2V5OiBzdHJpbmddOiB7dmFsdWU6IHN0cmluZywgcHJvcHM/OiBUYWdQcm9wc307XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSB0YWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdQcm9wcyB7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSBhbGwgY2hpbGQgdGFnZ2FibGUgYENvbnN0cnVjdHNgIHdpbGwgcmVjZWl2ZSB0aGlzIHRhZ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHByb3BhZ2F0ZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgcHJvcGFnYXRlZCB0YWdzIGZyb20gcGFyZW50cyB3aWxsIG5vdCBvdmVyd3JpdGUgdGhlIHRhZ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHN0aWNreT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdGhpcyB0YWcgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgdGFnc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIG92ZXJ3cml0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgcmVtb3ZpbmcgdGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIHByZXZlbnQgdGhpcyB0YWcgZm9ybSBiZWluZyBzZXQgdmlhIHByb3BhZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgYmxvY2tQcm9wYWdhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRhZ01hbmFnZXIgZmFjaWxpdGF0ZXMgYSBjb21tb24gaW1wbGVtZW50YXRpb24gb2YgdGFnZ2luZyBmb3IgQ29uc3RydWN0cy5cbiAqXG4gKiBFYWNoIGNvbnN0cnVjdCB0aGF0IHdhbnRzIHRvIHN1cHBvcnQgdGFncyBzaG91bGQgaW1wbGVtZW50IHRoZSBgSVRhZ2dhYmxlYFxuICogaW50ZXJmYWNlIGFuZCBwcm9wZXJseSBwYXNzIHRhZ3MgdG8gdGhlIGBSZXNvdXJjZXNgIChDbG91ZGZvcm1hdGlvbikgZWxlbWVudHNcbiAqIHRoZSBgQ29uc3RydWN0YCBjcmVhdGVzLiBUaGUgYFRhZ01hbmFnZXJgIGV4dGVuZHMgYFRva2VuYCB0aGUgb2JqZWN0IGNhbiBiZVxuICogcGFzc2VkIGRpcmVjdGx5IHRvIGBSZXNvdXJjZXNgIHRoYXQgc3VwcG9ydCB0YWcgcHJvcGVydGllcy5cbiAqXG4gKiBUaGVyZSBhcmUgYSBmZXcgc3RhbmRhcmQgdXNlIGNhc2VzIHRoZSBgVGFnTWFuYWdlcmAgc3VwcG9ydHMgZm9yIG1hbmFnaW5nXG4gKiB0YWdzIGFjcm9zcyB0aGUgcmVzb3VyY2VzIGluIHlvdXIgc3RhY2suXG4gKlxuICogUHJvcGFnYXRpb246IElmIHlvdSB0YWcgYSByZXNvdXJjZSBhbmQgaXQgaGFzIGNoaWxkcmVuLCBieSBkZWZhdWx0IHRob3NlIHRhZ3NcbiAqIHdpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUgY2hpbGRyZW4uIFRoaXMgaXMgY29udHJvbGxlZCBieVxuICogYFRhZ1Byb3BzLnByb3BhZ2F0ZWAuXG4gKlxuICogRGVmYXVsdCBhIHRhZyB1bmxlc3MgYW4gYW5jZXN0b3IgaGFzIGEgdmFsdWU6IFRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGFcbiAqIGNvbnN0cnVjdCBhdXRob3IgbWlnaHQgd2FudCB0byBzZXQgYSB0YWcgdmFsdWUsIGJ1dCBjaG9vc2UgdG8gdGFrZSBhIHBhcmVudHNcbiAqIHZhbHVlLiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGRlZmF1bHQgYHtLZXk6IFwiQ29tcGxpYW5jZVwiLCBWYWx1ZTogXCJOb25lXCJ9YCxcbiAqIGJ1dCBpZiBhIHBhcmVudCBoYXMgYHtLZXk6IFwiQ29tcGxpYW5jZVwiLCBWYWx1ZTogXCJQQ0lcIn1gIGFsbG93IHRoYXQgcGFyZW50IHRvXG4gKiBvdmVycmlkZSB5b3VyIHRhZy4gVGhpcyBpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIGBUYWdQcm9wcy5zdGlja3lgIHRvIGZhbHNlLlxuICogVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdGhhdCBjaGlsZCB0YWdzIGhhdmUgcHJlY2VkZW5jZSBhbmQgYFRhZ1Byb3BzLnN0aWNreWBcbiAqIGRlZmF1bHRzIHRvIHRydWUgdG8gcmVmbGVjdCB0aGlzLlxuICpcbiAqIE92ZXJ3cml0ZTogQ29uc3RydWN0IGF1dGhvcnMgaGF2ZSB0aGUgbmVlZCB0byBzZXQgYSB0YWcsIGJ1dCBvbmx5IGlmIG9uZSB3YXNcbiAqIG5vdCBwcm92aWRlZCBieSB0aGUgY29uc3VtZXIuIFRoZSBtb3N0IGNvbW1vbiBleGFtcGxlIGlzIHRoZSBgTmFtZWAgdGFnLlxuICogT3ZlcndyaXRlIGlzIGZvciB0aGlzIHB1cnBvc2UgYW5kIGlzIGNvbnRyb2xsZWQgYnkgYFRhZ1Byb3BzLm92ZXJ3cml0ZWAuIFRoZVxuICogZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gKlxuICogUmVtb3ZpbmcgVGFnczogVGFncyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBtYW5hZ2VyIHZpYSBgcmVtb3ZlVGFnYC4gSWZcbiAqIGEgcGFyZW50IGFsc28gaGFzIGEgdGFnIHdpdGggdGhlIHNhbWUgbmFtZSB0aGVuIGl0IGNhbiBiZSBwcm9wYWdhdGVkIHRvIHRoZVxuICogY2hpbGQgKGFmdGVyIHJlbW92YWwpLiBUaGUgdXNlciBjYW4gY29udHJvbCB0aGlzIGBSZW1vdmVQcm9wcy5ibG9ja1Byb3BhZ2F0ZWAuIEJ5IGRlZmF1bHRcbiAqIHRoaXMgaXMgYHRydWVgIGFuZCBwcmV2ZW50cyBhIHBhcmVudCB0YWcgZnJvbSBwcm9wYWdhdGluZyB0byB0aGUgY2hpbGQgYWZ0ZXJcbiAqIHRoZSBgcmVtb3ZlVGFnYCBpcyBpbnZva2VkLiBIb3dldmVyLCBpZiB1c2VyIHdhbnRzIHRoZSBwYXJlbnQgdGFnIHRvXG4gKiBwcm9wYWdhdGUsIGlmIGl0IGlzIHByb3ZpZGVkIGJ5IGEgcGFyZW50IHRoaXMgY2FuIGJlIHNldCB0byBgZmFsc2VgLlxuICovXG5leHBvcnQgY2xhc3MgVGFnTWFuYWdlciBleHRlbmRzIFRva2VuIHtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIGBJVGFnZ2FibGVgIGludGVyZmFjZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaXNUYWdnYWJsZSh0YWdnYWJsZTogSVRhZ2dhYmxlIHwgYW55KTogdGFnZ2FibGUgaXMgSVRhZ2dhYmxlIHtcbiAgICAgICAgcmV0dXJuICgodGFnZ2FibGUgYXMgSVRhZ2dhYmxlKS50YWdzICE9PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVEFHX1BST1BTOiBUYWdQcm9wcyA9IHtcbiAgICAgICAgcHJvcGFnYXRlOiB0cnVlLFxuICAgICAgICBzdGlja3k6IHRydWUsXG4gICAgICAgIG92ZXJ3cml0ZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvKlxuICAgICAqIEludGVybmFsbHkgdGFncyB3aWxsIGhhdmUgcHJvcGVydGllcyBzZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWdzOiBGdWxsVGFncyA9IHt9O1xuXG4gICAgLypcbiAgICAgKiBUYWdzIHRoYXQgd2lsbCBiZSByZW1vdmVkIGR1cmluZyBgdGFnc2AgbWV0aG9kXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBibG9ja2VkVGFnczogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBDb25zdHJ1Y3QsIGluaXRpYWxUYWdzOiBUYWdzICA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluaXRpYWxUYWdzKSkge1xuICAgICAgICAgICAgY29uc3QgdGFnID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsVGFnc1trZXldLFxuICAgICAgICAgICAgICAgIHByb3BzOiBUYWdNYW5hZ2VyLkRFRkFVTFRfVEFHX1BST1BTLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3Nba2V5XSA9IHRhZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBgdGFnc2AgdG8gYSBUb2tlbiBmb3IgdXNlIGluIGxhenkgZXZhbHVhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIGZ1bmN0aW9uIGZpbHRlclRhZ3MoX3RhZ3M6IEZ1bGxUYWdzLCBmaWx0ZXI6IFRhZ1Byb3BzID0ge30pOiBUYWdzIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkVGFnczogVGFncyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoX3RhZ3MpLm1hcCgga2V5ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wczogVGFnUHJvcHMgPSBfdGFnc1trZXldLnByb3BzIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIucHJvcGFnYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUmVzdWx0ID0gZmlsdGVyUmVzdWx0ICYmIChmaWx0ZXIucHJvcGFnYXRlID09PSBwcm9wcy5wcm9wYWdhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnN0aWNreSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlclJlc3VsdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlci5zdGlja3kgPT09IHByb3BzLnN0aWNreSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIub3ZlcndyaXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUmVzdWx0ID0gZmlsdGVyUmVzdWx0ICYmIChmaWx0ZXIub3ZlcndyaXRlID09PSBwcm9wcy5vdmVyd3JpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkVGFnc1trZXldID0gX3RhZ3Nba2V5XS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFRhZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9wYWdhdGVkVGFncyh0YWdQcm92aWRlcnM6IENvbnN0cnVjdFtdKTogVGFncyB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUYWdzOiBUYWdzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIHRhZ1Byb3ZpZGVycykge1xuICAgICAgICAgICAgICAgIGlmIChUYWdNYW5hZ2VyLmlzVGFnZ2FibGUoYW5jZXN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3NGcm9tID0gZmlsdGVyVGFncyhhbmNlc3Rvci50YWdzLl90YWdzLCB7cHJvcGFnYXRlOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyZW50VGFncywgdGFnc0Zyb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRUYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvcE92ZXJ3cml0ZSA9IGZpbHRlclRhZ3ModGhpcy5fdGFncywge3N0aWNreTogZmFsc2V9KTtcbiAgICAgICAgY29uc3Qgbm9uT3ZlcndyaXRlID0gZmlsdGVyVGFncyh0aGlzLl90YWdzLCB7c3RpY2t5OiB0cnVlfSk7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IHRoaXMucGFyZW50LmFuY2VzdG9ycygpO1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh0aGlzLnBhcmVudCk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB7Li4ucHJvcE92ZXJ3cml0ZSwgLi4ucHJvcGFnYXRlZFRhZ3MoYW5jZXN0b3JzKSwgLi4ubm9uT3ZlcndyaXRlfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5ibG9ja2VkVGFncykgeyBkZWxldGUgdGFnc1trZXldOyB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhZ3MpLm1hcCgga2V5ID0+ICh7a2V5LCB2YWx1ZTogdGFnc1trZXldfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIHNwZWNpZmllZCB0YWcgdG8gdGhlIGFycmF5IG9mIHRhZ3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB2YWx1ZSBvZiB0aGUgdGFnXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB2YWx1ZSBvZiB0aGUgdGFnXG4gICAgICogQHBhcmFtIHByb3BzIEEgYFRhZ1Byb3BzYCBvYmplY3QgZm9yIHRoZSB0YWcgQGRlZmF1bHQgYFRhZ01hbmFnZXIuREVGQVVMVF9UQUdfUFJPUFNgXG4gICAgICovXG4gICAgcHVibGljIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgdGFnUHJvcHM6IFRhZ1Byb3BzID0ge30pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Li4uVGFnTWFuYWdlci5ERUZBVUxUX1RBR19QUk9QUywgLi4udGFnUHJvcHN9O1xuICAgICAgICBpZiAoIXByb3BzLm92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFnc1trZXldID0gdGhpcy5fdGFnc1trZXldIHx8IHt2YWx1ZSwgcHJvcHN9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGFnc1trZXldID0ge3ZhbHVlLCBwcm9wc307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmJsb2NrZWRUYWdzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tlZFRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCB0YWcgZnJvbSB0aGUgYXJyYXkgaWYgaXQgZXhpc3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIHRhZyB0byByZW1vdmVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlVGFnKGtleTogc3RyaW5nLCBwcm9wczogUmVtb3ZlUHJvcHMgPSB7YmxvY2tQcm9wYWdhdGU6IHRydWV9KTogdm9pZCB7XG4gICAgICAgIGlmIChwcm9wcy5ibG9ja1Byb3BhZ2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5ibG9ja2VkVGFncy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX3RhZ3Nba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhbGwgcHJvcGFnYXRlZCB0YWdzIGZyb20gYWxsIGFuY2VzdG9yc1xuICAgICAqXG4gICAgICogVGhpcyByZXRyaWV2ZXMgdGFncyBmcm9tIHBhcmVudHMgYnV0IG5vdCBsb2NhbCB0YWdzXG4gICAgICovXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHFDQUFpQztBQWdHakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxjQUFLO0lBeUJuQyxZQUE2QixNQUFpQixFQUFFLFFBQTBCLEVBQUU7UUFDMUUsS0FBSyxFQUFFLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVY5Qzs7V0FFRztRQUNjLFVBQUssR0FBYSxFQUFFLENBQUM7UUFFdEM7O1dBRUc7UUFDYyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUsxQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxHQUFHLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFVLENBQUMsaUJBQWlCO2FBQ3BDLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFsQ0Q7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQXlCO1FBQ2hELE9BQU8sQ0FBRSxRQUFzQixDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBK0JEOztPQUVHO0lBQ0ksT0FBTztRQUNaLHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLFNBQVMsVUFBVSxDQUFDLEtBQWUsRUFBRSxTQUFtQixFQUFFO1lBQ3hELE1BQU0sWUFBWSxHQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFB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LENBQUMsQ0FBQztJQUNsRSxDQUFDOztBQS9IdUIsNEJBQWlCLEdBQWE7SUFDcEQsU0FBUyxFQUFFLElBQUk7SUFDZixNQUFNLEVBQUUsSUFBSTtJQUNaLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQUM7QUFiSixnQ0F5SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJy4vdG9rZW5zJztcblxuLyoqXG4gKiBJVGFnZ2FibGUgaW5kaWNhdGVzIGEgZW50aXR5IG1hbmFnZXMgdGFncyB2aWEgdGhlIGB0YWdzYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUYWdnYWJsZSB7XG4gIHJlYWRvbmx5IHRhZ3M6IFRhZ01hbmFnZXIsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBUYWdzIGlzIGEgZGljdGlvbmFyeSBvZiB0YWdzIGFzIHN0cmluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgVGFncyA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbi8qKlxuICogQW4gb2JqZWN0IG9mIHRhZ3Mgd2l0aCB2YWx1ZSBhbmQgcHJvcGVydGllc1xuICpcbiAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ1dCBub3QgZXhwb3J0ZWRcbiAqL1xuaW50ZXJmYWNlIEZ1bGxUYWdzIHtcbiAgW2tleTogc3RyaW5nXToge3ZhbHVlOiBzdHJpbmcsIHByb3BzPzogVGFnUHJvcHN9O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgdGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUHJvcHMge1xuICAvKipcbiAgICogSWYgdHJ1ZSBhbGwgY2hpbGQgdGFnZ2FibGUgYENvbnN0cnVjdHNgIHdpbGwgcmVjZWl2ZSB0aGlzIHRhZ1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBwcm9wYWdhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgcHJvcGFnYXRlZCB0YWdzIGZyb20gcGFyZW50cyB3aWxsIG5vdCBvdmVyd3JpdGUgdGhlIHRhZ1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzdGlja3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdGhpcyB0YWcgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgdGFnc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBvdmVyd3JpdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYXJndW1lbnRzIHRvIGB0YWdGb3JtYXRSZXNvbHZlYCB0byBlbmFibGUgZXh0ZW5zaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0dyb3VwcyB7XG4gIC8qKlxuICAgKiBUYWdzIHRoYXQgb3ZlcndyaXRlIGFuY2VzdG9yIHRhZ3NcbiAgICovXG4gIHN0aWNreVRhZ3M6IFRhZ3M7XG5cbiAgLyoqXG4gICAqIFRhZ3MgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYnkgYW5jZXN0b3IgdGFnc1xuICAgKi9cbiAgbm9uU3RpY2t5VGFnczogVGFncztcblxuICAvKipcbiAgICogVGFncyB3aXRoIHByb3BhZ2F0ZSB0cnVlIG5vdCBmcm9tIGFuIGFuY2VzdG9yXG4gICAqL1xuICBwcm9wYWdhdGVUYWdzOiBUYWdzO1xuXG4gIC8qKlxuICAgKiBUYWdzIHRoYXQgYXJlIHByb3BhZ2F0ZWQgZnJvbSBhbmNlc3RvcnNcbiAgICovXG4gIGFuY2VzdG9yVGFnczogVGFncztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciByZW1vdmluZyB0YWdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlUHJvcHMge1xuICAvKipcbiAgICogSWYgdHJ1ZSBwcmV2ZW50IHRoaXMgdGFnIGZvcm0gYmVpbmcgc2V0IHZpYSBwcm9wYWdhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBibG9ja1Byb3BhZ2F0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgVGFnIE1hbmFnZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdNYW5hZ2VyUHJvcHMge1xuICAvKipcbiAgICogSW5pdGlhbCB0YWdzIHRvIHNldCBvbiB0aGUgdGFnIG1hbmFnZXIgdXNpbmcgVEFHX0RFRkFVTFRTXG4gICAqL1xuICBpbml0aWFsVGFncz86IFRhZ3M7XG59XG5cbi8qKlxuICogVGFnTWFuYWdlciBmYWNpbGl0YXRlcyBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0YWdnaW5nIGZvciBDb25zdHJ1Y3RzLlxuICpcbiAqIEVhY2ggY29uc3RydWN0IHRoYXQgd2FudHMgdG8gc3VwcG9ydCB0YWdzIHNob3VsZCBpbXBsZW1lbnQgdGhlIGBJVGFnZ2FibGVgXG4gKiBpbnRlcmZhY2UgYW5kIHByb3Blcmx5IHBhc3MgdGFncyB0byB0aGUgYFJlc291cmNlc2AgKENsb3VkZm9ybWF0aW9uKSBlbGVtZW50c1xuICogdGhlIGBDb25zdHJ1Y3RgIGNyZWF0ZXMuIFRoZSBgVGFnTWFuYWdlcmAgZXh0ZW5kcyBgVG9rZW5gIHRoZSBvYmplY3QgY2FuIGJlXG4gKiBwYXNzZWQgZGlyZWN0bHkgdG8gYFJlc291cmNlc2AgdGhhdCBzdXBwb3J0IHRhZyBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZXJlIGFyZSBhIGZldyBzdGFuZGFyZCB1c2UgY2FzZXMgdGhlIGBUYWdNYW5hZ2VyYCBzdXBwb3J0cyBmb3IgbWFuYWdpbmdcbiAqIHRhZ3MgYWNyb3NzIHRoZSByZXNvdXJjZXMgaW4geW91ciBzdGFjay5cbiAqXG4gKiBQcm9wYWdhdGlvbjogSWYgeW91IHRhZyBhIHJlc291cmNlIGFuZCBpdCBoYXMgY2hpbGRyZW4sIGJ5IGRlZmF1bHQgdGhvc2UgdGFnc1xuICogd2lsbCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjaGlsZHJlbi4gVGhpcyBpcyBjb250cm9sbGVkIGJ5XG4gKiBgVGFnUHJvcHMucHJvcGFnYXRlYC5cbiAqXG4gKiBEZWZhdWx0IGEgdGFnIHVubGVzcyBhbiBhbmNlc3RvciBoYXMgYSB2YWx1ZTogVGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgYVxuICogY29uc3RydWN0IGF1dGhvciBtaWdodCB3YW50IHRvIHNldCBhIHRhZyB2YWx1ZSwgYnV0IGNob29zZSB0byB0YWtlIGEgcGFyZW50c1xuICogdmFsdWUuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgZGVmYXVsdCBge0tleTogXCJDb21wbGlhbmNlXCIsIFZhbHVlOiBcIk5vbmVcIn1gLFxuICogYnV0IGlmIGEgcGFyZW50IGhhcyBge0tleTogXCJDb21wbGlhbmNlXCIsIFZhbHVlOiBcIlBDSVwifWAgYWxsb3cgdGhhdCBwYXJlbnQgdG9cbiAqIG92ZXJyaWRlIHlvdXIgdGFnLiBUaGlzIGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcgYFRhZ1Byb3BzLnN0aWNreWAgdG8gZmFsc2UuXG4gKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0aGF0IGNoaWxkIHRhZ3MgaGF2ZSBwcmVjZWRlbmNlIGFuZCBgVGFnUHJvcHMuc3RpY2t5YFxuICogZGVmYXVsdHMgdG8gdHJ1ZSB0byByZWZsZWN0IHRoaXMuXG4gKlxuICogT3ZlcndyaXRlOiBDb25zdHJ1Y3QgYXV0aG9ycyBoYXZlIHRoZSBuZWVkIHRvIHNldCBhIHRhZywgYnV0IG9ubHkgaWYgb25lIHdhc1xuICogbm90IHByb3ZpZGVkIGJ5IHRoZSBjb25zdW1lci4gVGhlIG1vc3QgY29tbW9uIGV4YW1wbGUgaXMgdGhlIGBOYW1lYCB0YWcuXG4gKiBPdmVyd3JpdGUgaXMgZm9yIHRoaXMgcHVycG9zZSBhbmQgaXMgY29udHJvbGxlZCBieSBgVGFnUHJvcHMub3ZlcndyaXRlYC4gVGhlXG4gKiBkZWZhdWx0IGlzIGB0cnVlYC5cbiAqXG4gKiBSZW1vdmluZyBUYWdzOiBUYWdzIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGxvY2FsIG1hbmFnZXIgdmlhIGByZW1vdmVUYWdgLiBJZlxuICogYSBwYXJlbnQgYWxzbyBoYXMgYSB0YWcgd2l0aCB0aGUgc2FtZSBuYW1lIHRoZW4gaXQgY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdGhlXG4gKiBjaGlsZCAoYWZ0ZXIgcmVtb3ZhbCkuIFRoZSB1c2VyIGNhbiBjb250cm9sIHRoaXMgYFJlbW92ZVByb3BzLmJsb2NrUHJvcGFnYXRlYC4gQnkgZGVmYXVsdFxuICogdGhpcyBpcyBgdHJ1ZWAgYW5kIHByZXZlbnRzIGEgcGFyZW50IHRhZyBmcm9tIHByb3BhZ2F0aW5nIHRvIHRoZSBjaGlsZCBhZnRlclxuICogdGhlIGByZW1vdmVUYWdgIGlzIGludm9rZWQuIEhvd2V2ZXIsIGlmIHVzZXIgd2FudHMgdGhlIHBhcmVudCB0YWcgdG9cbiAqIHByb3BhZ2F0ZSwgaWYgaXQgaXMgcHJvdmlkZWQgYnkgYSBwYXJlbnQgdGhpcyBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWdNYW5hZ2VyIGV4dGVuZHMgVG9rZW4ge1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBgSVRhZ2dhYmxlYCBpbnRlcmZhY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNUYWdnYWJsZSh0YWdnYWJsZTogSVRhZ2dhYmxlIHwgYW55KTogdGFnZ2FibGUgaXMgSVRhZ2dhYmxlIHtcbiAgICByZXR1cm4gKCh0YWdnYWJsZSBhcyBJVGFnZ2FibGUpLnRhZ3MgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RBR19QUk9QUzogVGFnUHJvcHMgPSB7XG4gICAgcHJvcGFnYXRlOiB0cnVlLFxuICAgIHN0aWNreTogdHJ1ZSxcbiAgICBvdmVyd3JpdGU6IHRydWVcbiAgfTtcblxuICAvKlxuICAgKiBJbnRlcm5hbGx5IHRhZ3Mgd2lsbCBoYXZlIHByb3BlcnRpZXMgc2V0XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF90YWdzOiBGdWxsVGFncyA9IHt9O1xuXG4gIC8qXG4gICAqIFRhZ3MgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZHVyaW5nIGB0YWdzYCBtZXRob2RcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYmxvY2tlZFRhZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IENvbnN0cnVjdCwgcHJvcHM6IFRhZ01hbmFnZXJQcm9wcyAgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBpbml0aWFsVGFncyA9IHByb3BzLmluaXRpYWxUYWdzIHx8IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluaXRpYWxUYWdzKSkge1xuICAgICAgY29uc3QgdGFnID0ge1xuICAgICAgICB2YWx1ZTogaW5pdGlhbFRhZ3Nba2V5XSxcbiAgICAgICAgcHJvcHM6IFRhZ01hbmFnZXIuREVGQVVMVF9UQUdfUFJPUFMsXG4gICAgICB9O1xuICAgICAgdGhpcy5fdGFnc1trZXldID0gdGFnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgYHRhZ3NgIHRvIGEgVG9rZW4gZm9yIHVzZSBpbiBsYXp5IGV2YWx1YXRpb25cbiAgICovXG4gIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgLy8gbmVlZCB0aGlzIGZvciBzY29waW5nXG4gICAgY29uc3QgYmxvY2tlZFRhZ3MgPSB0aGlzLmJsb2NrZWRUYWdzO1xuICAgIGZ1bmN0aW9uIGZpbHRlclRhZ3MoX3RhZ3M6IEZ1bGxUYWdzLCBmaWx0ZXI6IFRhZ1Byb3BzID0ge30pOiBUYWdzIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkVGFnczogVGFncyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoX3RhZ3MpLm1hcCgga2V5ID0+IHtcbiAgICAgICAgbGV0IGZpbHRlclJlc3VsdCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHByb3BzOiBUYWdQcm9wcyA9IF90YWdzW2tleV0ucHJvcHMgfHwge307XG4gICAgICAgIGlmIChmaWx0ZXIucHJvcGFnYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWx0ZXJSZXN1bHQgPSBmaWx0ZXJSZXN1bHQgJiYgKGZpbHRlci5wcm9wYWdhdGUgPT09IHByb3BzLnByb3BhZ2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlci5zdGlja3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlclJlc3VsdCAmJlxuICAgICAgICAgICAgKGZpbHRlci5zdGlja3kgPT09IHByb3BzLnN0aWNreSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlci5vdmVyd3JpdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlclJlc3VsdCAmJiAoZmlsdGVyLm92ZXJ3cml0ZSA9PT0gcHJvcHMub3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyUmVzdWx0KSB7XG4gICAgICAgICAgZmlsdGVyZWRUYWdzW2tleV0gPSBfdGFnc1trZXldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGJsb2NrZWRUYWdzKSB7IGRlbGV0ZSBmaWx0ZXJlZFRhZ3Nba2V5XTsgfVxuICAgICAgcmV0dXJuIGZpbHRlcmVkVGFncztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9wYWdhdGVkVGFncyh0YWdQcm92aWRlcnM6IENvbnN0cnVjdFtdKTogVGFncyB7XG4gICAgICBjb25zdCBwYXJlbnRUYWdzOiBUYWdzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIHRhZ1Byb3ZpZGVycykge1xuICAgICAgICBpZiAoVGFnTWFuYWdlci5pc1RhZ2dhYmxlKGFuY2VzdG9yKSkge1xuICAgICAgICAgIGNvbnN0IHRhZ3NGcm9tID0gZmlsdGVyVGFncyhhbmNlc3Rvci50YWdzLl90YWdzLCB7cHJvcGFnYXRlOiB0cnVlfSk7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJlbnRUYWdzLCB0YWdzRnJvbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGJsb2NrZWRUYWdzKSB7IGRlbGV0ZSBwYXJlbnRUYWdzW2tleV07IH1cbiAgICAgIHJldHVybiBwYXJlbnRUYWdzO1xuICAgIH1cblxuICAgIGNvbnN0IG5vblN0aWNreVRhZ3MgPSBmaWx0ZXJUYWdzKHRoaXMuX3RhZ3MsIHtzdGlja3k6IGZhbHNlfSk7XG4gICAgY29uc3Qgc3RpY2t5VGFncyA9IGZpbHRlclRhZ3ModGhpcy5fdGFncywge3N0aWNreTogdHJ1ZX0pO1xuICAgIGNvbnN0IGFuY2VzdG9ycyA9IHRoaXMucGFyZW50LmFuY2VzdG9ycygpO1xuICAgIGNvbnN0IGFuY2VzdG9yVGFncyA9IHByb3BhZ2F0ZWRUYWdzKGFuY2VzdG9ycyk7XG4gICAgY29uc3QgcHJvcGFnYXRlVGFncyA9IGZpbHRlclRhZ3ModGhpcy5fdGFncywge3Byb3BhZ2F0ZTogdHJ1ZX0pO1xuICAgIHJldHVybiB0aGlzLnRhZ0Zvcm1hdFJlc29sdmUoIHtcbiAgICAgIGFuY2VzdG9yVGFncyxcbiAgICAgIG5vblN0aWNreVRhZ3MsXG4gICAgICBzdGlja3lUYWdzLFxuICAgICAgcHJvcGFnYXRlVGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgdGFnIHRvIHRoZSBhcnJheSBvZiB0YWdzXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB2YWx1ZSBvZiB0aGUgdGFnXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdmFsdWUgb2YgdGhlIHRhZ1xuICAgKiBAcGFyYW0gcHJvcHMgQSBgVGFnUHJvcHNgIG9iamVjdCBmb3IgdGhlIHRhZyBAZGVmYXVsdCBgVGFnTWFuYWdlci5ERUZBVUxUX1RBR19QUk9QU2BcbiAgICovXG4gIHB1YmxpYyBzZXRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHRhZ1Byb3BzOiBUYWdQcm9wcyA9IHt9KTogdm9pZCB7XG4gICAgY29uc3QgcHJvcHMgPSB7Li4uVGFnTWFuYWdlci5ERUZBVUxUX1RBR19QUk9QUywgLi4udGFnUHJvcHN9O1xuICAgIGlmICghcHJvcHMub3ZlcndyaXRlKSB7XG4gICAgICB0aGlzLl90YWdzW2tleV0gPSB0aGlzLl90YWdzW2tleV0gfHwge3ZhbHVlLCBwcm9wc307XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RhZ3Nba2V5XSA9IHt2YWx1ZSwgcHJvcHN9O1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuYmxvY2tlZFRhZ3MuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmJsb2NrZWRUYWdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCB0YWcgZnJvbSB0aGUgYXJyYXkgaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgdGFnIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGBSZW1vdmVQcm9wc2AgZm9yIHRoZSB0YWdcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcsIHByb3BzOiBSZW1vdmVQcm9wcyA9IHtibG9ja1Byb3BhZ2F0ZTogdHJ1ZX0pOiB2b2lkIHtcbiAgICBpZiAocHJvcHMuYmxvY2tQcm9wYWdhdGUpIHtcbiAgICAgIHRoaXMuYmxvY2tlZFRhZ3MucHVzaChrZXkpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fdGFnc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgcmV0dXJuaW5nIHRoZSB0YWdzIGluIHRoZSBkZXNpcmVkIGZvcm1hdFxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIHRvIHN1cHBvcnQgYW5vdGhlciB0YWcgZm9ybWF0LiBUaGlzIHdhc1xuICAgKiBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZW5hYmxlIEF1dG9TY2FsaW5nR3JvdXAgVGFncyB0aGF0IGhhdmUgYW5cbiAgICogYWRkaXRpb25hbCBDbG91ZEZvcm1hdGlvbiBrZXkgZm9yIGBQcm9wYWdhdGVBdExhdW5jaGBcbiAgICovXG4gIHByb3RlY3RlZCB0YWdGb3JtYXRSZXNvbHZlKHRhZ0dyb3VwczogVGFnR3JvdXBzKTogYW55IHtcbiAgICBjb25zdCB0YWdzID0gey4uLnRhZ0dyb3Vwcy5ub25TdGlja3lUYWdzLCAuLi50YWdHcm91cHMuYW5jZXN0b3JUYWdzLCAuLi50YWdHcm91cHMuc3RpY2t5VGFnc307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5ibG9ja2VkVGFncykgeyBkZWxldGUgdGFnc1trZXldOyB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhZ3MpLm1hcCgga2V5ID0+ICh7a2V5LCB2YWx1ZTogdGFnc1trZXldfSkpO1xuICB9XG59XG4iXX0=

@@ -29,3 +29,3 @@ /**

*
* "embedded in a larger string is ${Token[DISPLAY_NAME.123]}"
* "embedded in a larger string is ${Token[DISPLAY_NAME.123]}"
*

@@ -32,0 +32,0 @@ * This value is used as a hint to humans what the meaning of the Token is,

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

*
* "embedded in a larger string is ${Token[DISPLAY_NAME.123]}"
* "embedded in a larger string is ${Token[DISPLAY_NAME.123]}"
*

@@ -363,2 +363,2 @@ * This value is used as a hint to humans what the meaning of the Token is,

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHZDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsWUFBNkIsZUFBcUIsRUFBbUIsV0FBb0I7UUFBNUQsb0JBQWUsR0FBZixlQUFlLENBQU07UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7SUFDekYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDakMsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQzlCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNYLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDN0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07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QVMsQ0FBQyxDQUFDO1lBQ2hGLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxFQUFFLENBQUM7U0FDUDtRQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsUUFBa0I7SUFDdkMsT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFTO0lBQ3pCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcIi4vY29uc3RydWN0XCI7XG5cbi8qKlxuICogSWYgb2JqZWN0cyBoYXMgYSBmdW5jdGlvbiBwcm9wZXJ0eSBieSB0aGlzIG5hbWUsIHRoZXkgd2lsbCBiZSBjb25zaWRlcmVkIHRva2VucywgYW5kIHRoaXNcbiAqIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIHJlc29sdmUgdGhlIHZhbHVlIGZvciB0aGlzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFU09MVkVfTUVUSE9EID0gJ3Jlc29sdmUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzcGVjaWFsIG9yIGxhemlseS1ldmFsdWF0ZWQgdmFsdWUuXG4gKlxuICogQ2FuIGJlIHVzZWQgdG8gZGVsYXkgZXZhbHVhdGlvbiBvZiBhIGNlcnRhaW4gdmFsdWUgaW4gY2FzZSwgZm9yIGV4YW1wbGUsXG4gKiB0aGF0IGl0IHJlcXVpcmVzIHNvbWUgY29udGV4dCBvciBsYXRlLWJvdW5kIGRhdGEuIENhbiBhbHNvIGJlIHVzZWQgdG9cbiAqIG1hcmsgdmFsdWVzIHRoYXQgbmVlZCBzcGVjaWFsIHByb2Nlc3NpbmcgYXQgZG9jdW1lbnQgcmVuZGVyaW5nIHRpbWUuXG4gKlxuICogVG9rZW5zIGNhbiBiZSBlbWJlZGRlZCBpbnRvIHN0cmluZ3Mgd2hpbGUgcmV0YWluaW5nIHRoZWlyIG9yaWdpbmFsXG4gKiBzZW1hbnRpY3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gICAgcHJpdmF0ZSB0b2tlbktleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0b2tlbiB0aGF0IHJlc29sdmVzIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIHVwb24gcmVzb2x1dGlvbiBhbmRcbiAgICAgKiB0aGUgdmFsdWUgaXQgcmV0dXJucyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRva2VuJ3MgdmFsdWUuXG4gICAgICpcbiAgICAgKiBkaXNwbGF5TmFtZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgVG9rZW4gd2hlbiBpdCdzIGVtYmVkZGVkIGludG8gYSBzdHJpbmc7IGl0XG4gICAgICogd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICpcbiAgICAgKiAgICAgIFwiZW1iZWRkZWQgaW4gYSBsYXJnZXIgc3RyaW5nIGlzICR7VG9rZW5bRElTUExBWV9OQU1FLjEyM119XCJcbiAgICAgKlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGhpbnQgdG8gaHVtYW5zIHdoYXQgdGhlIG1lYW5pbmcgb2YgdGhlIFRva2VuIGlzLFxuICAgICAqIGFuZCBkb2VzIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgYW5kIHNpbXBsZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoXy46LSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWVPckZ1bmN0aW9uIFdoYXQgdGhpcyB0b2tlbiB3aWxsIGV2YWx1YXRlIHRvLCBsaXRlcmFsIG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5TmFtZSBBIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgaGludCBmb3IgdGhpcyBUb2tlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmFsdWVPckZ1bmN0aW9uPzogYW55LCBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHRva2VuLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHJldmVyc2libGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdG9rZW5cbiAgICAgKlxuICAgICAqIElmIHRoZSBUb2tlbiBpcyBpbml0aWFsaXplZCB3aXRoIGEgbGl0ZXJhbCwgdGhlIHN0cmluZ2lmaWVkIHZhbHVlIG9mIHRoZVxuICAgICAqIGxpdGVyYWwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBzcGVjaWFsIHF1b3RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICAgKiBvZiB0aGUgVG9rZW4gaXMgcmV0dXJuZWQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW50byBvdGhlciBzdHJpbmdzLlxuICAgICAqXG4gICAgICogU3RyaW5ncyB3aXRoIHF1b3RlZCBUb2tlbnMgaW4gdGhlbSBjYW4gYmUgcmVzdG9yZWQgYmFjayBpbnRvXG4gICAgICogY29tcGxleCB2YWx1ZXMgd2l0aCB0aGUgVG9rZW5zIHJlc3RvcmVkIGJ5IGNhbGxpbmcgYHJlc29sdmUoKWBcbiAgICAgKiBvbiB0aGUgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdGhpcy52YWx1ZU9yRnVuY3Rpb247XG4gICAgICAgIC8vIE9wdGltaXphdGlvbjogaWYgd2UgY2FuIGltbWVkaWF0ZWx5IHJlc29sdmUgdGhpcywgZG9uJ3QgYm90aGVyXG4gICAgICAgIC8vIHJlZ2lzdGVyaW5nIGEgVG9rZW4uXG4gICAgICAgIGlmICh2YWx1ZVR5cGUgPT09ICdzdHJpbmcnIHx8IHZhbHVlVHlwZSA9PT0gJ251bWJlcicgfHwgdmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT3JGdW5jdGlvbi50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9rZW5LZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbktleSA9IFRPS0VOX1NUUklOR19NQVAucmVnaXN0ZXIodGhpcywgdGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5LZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHVybiB0aGlzIFRva2VuIGludG8gSlNPTlxuICAgICAqXG4gICAgICogVGhpcyBnZXRzIGNhbGxlZCBieSBKU09OLnN0cmluZ2lmeSgpLiBXZSB3YW50IHRvIHByb2hpYml0IHRoaXMsIGJlY2F1c2VcbiAgICAgKiBpdCdzIG5vdCBwb3NzaWJsZSB0byBkbyB0aGlzIHByb3Blcmx5LCBzbyB3ZSBqdXN0IHRocm93IGFuIGVycm9yIGhlcmUuXG4gICAgICovXG4gICAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnkoKSBjYW5ub3QgYmUgYXBwbGllZCB0byBzdHJ1Y3R1cmUgd2l0aCBhIFRva2VuIGluIGl0LiBVc2UgYSBkb2N1bWVudC1zcGVjaWZpYyBzdHJpbmdpZmljYXRpb24gbWV0aG9kIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgY29uY2F0ZWQgdmVyc2lvbiBvZiB0aGlzIFRva2VuIGluIGEgc3RyaW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY29tYmluZXMgc3RyaW5ncywgYnV0IHNwZWNpYWxpemVkXG4gICAgICogaW1wbGVtZW50cyBvZiBUb2tlbiBjYW4gcmV0dXJuIGEgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uY2F0KGxlZnQ6IGFueSB8IHVuZGVmaW5lZCwgcmlnaHQ6IGFueSB8IHVuZGVmaW5lZCk6IFRva2VuIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbbGVmdCwgcmVzb2x2ZSh0aGlzKSwgcmlnaHRdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4ocGFydHMubWFwKHggPT4gYCR7eH1gKS5qb2luKCcnKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvYmogaXMgYSB0b2tlbiAoaS5lLiBoYXMgdGhlIHJlc29sdmUoKSBtZXRob2Qgb3IgaXMgYSBzdHJpbmdcbiAqIHRoYXQgaW5jbHVkZXMgdG9rZW4gbWFya2VycykuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWQob2JqOiBhbnkpOiBvYmogaXMgVG9rZW4ge1xuICAgIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFRPS0VOX1NUUklOR19NQVAuY3JlYXRlVG9rZW5TdHJpbmcob2JqKS50ZXN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZihvYmpbUkVTT0xWRV9NRVRIT0RdKSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb2JqZWN0IGJ5IGV2YWx1YXRpbmcgYWxsIHRva2VucyBhbmQgcmVtb3ZpbmcgYW55IHVuZGVmaW5lZCBvciBlbXB0eSBvYmplY3RzIG9yIGFycmF5cy5cbiAqIFZhbHVlcyBjYW4gb25seSBiZSBwcmltaXRpdmVzLCBhcnJheXMgb3IgdG9rZW5zLiBPdGhlciBvYmplY3RzIChpLmUuIHdpdGggbWV0aG9kcykgd2lsbCBiZSByZWplY3RlZC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBwcmVmaXggUHJlZml4IGtleSBwYXRoIGNvbXBvbmVudHMgZm9yIGRpYWdub3N0aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShvYmo6IGFueSwgcHJlZml4Pzogc3RyaW5nW10pOiBhbnkge1xuICAgIGNvbnN0IHBhdGggPSBwcmVmaXggfHwgWyBdO1xuICAgIGNvbnN0IHBhdGhOYW1lID0gJy8nICsgcGF0aC5qb2luKCcvJyk7XG5cbiAgICAvLyBwcm90ZWN0IGFnYWluc3QgY3ljbGljIHJlZmVyZW5jZXMgYnkgbGltaXRpbmcgZGVwdGguXG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgb2JqZWN0IHRyZWUgd2l0aCBjaXJjdWxhciByZWZlcmVuY2UuIFBhdGg6ICcgKyBwYXRoTmFtZSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyB1bmRlZmluZWRcbiAgICAvL1xuXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gbnVsbFxuICAgIC8vXG5cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gZnVuY3Rpb25zIC0gbm90IHN1cHBvcnRlZCAob25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZClcbiAgICAvL1xuXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHJlc29sdmUgYSBub24tZGF0YSBvYmplY3QuIE9ubHkgdG9rZW4gYXJlIHN1cHBvcnRlZCBmb3IgbGF6eSBldmFsdWF0aW9uLiBQYXRoOiAke3BhdGhOYW1lfS4gT2JqZWN0OiAke29ian1gKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHN0cmluZyAtIHBvdGVudGlhbGx5IHJlcGxhY2UgYWxsIHN0cmluZ2lmaWVkIFRva2Vuc1xuICAgIC8vXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gVE9LRU5fU1RSSU5HX01BUC5yZXNvbHZlTWFya2VycyhvYmogYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHByaW1pdGl2ZXMgLSBhcy1pc1xuICAgIC8vXG5cbiAgICBpZiAodHlwZW9mKG9iaikgIT09ICdvYmplY3QnIHx8IG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHRva2VucyAtIGludm9rZSAncmVzb2x2ZScgYW5kIGNvbnRpbnVlIHRvIHJlc29sdmUgcmVjdXJzaXZlbHlcbiAgICAvL1xuXG4gICAgaWYgKHVucmVzb2x2ZWQob2JqKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtSRVNPTFZFX01FVEhPRF0oKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHBhdGgpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gYXJyYXlzIC0gcmVzb2x2ZSBhbGwgdmFsdWVzLCByZW1vdmUgdW5kZWZpbmVkIGFuZCByZW1vdmUgZW1wdHkgYXJyYXlzXG4gICAgLy9cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgY29uc3QgYXJyID0gb2JqXG4gICAgICAgICAgICAubWFwKCh4LCBpKSA9PiByZXNvbHZlKHgsIHBhdGguY29uY2F0KGkudG9TdHJpbmcoKSkpKVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHR5cGVvZih4KSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBvYmplY3RzIC0gZGVlcC1yZXNvbHZlIGFsbCB2YWx1ZXNcbiAgICAvL1xuXG4gICAgLy8gTXVzdCBub3QgYmUgYSBDb25zdHJ1Y3QgYXQgdGhpcyBwb2ludCwgb3RoZXJ3aXNlIHlvdSBwcm9iYWJseSBtYWRlIGEgdHlwZVxuICAgIC8vIG1pc3Rha2Ugc29tZXdoZXJlIGFuZCByZXNvbHZlIHdpbGwgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCByZWN1cnNpbmcgaW50b1xuICAgIC8vIGNoaWxkLnBhcmVudCA8LS0tPiBwYXJlbnQuY2hpbGRyZW5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQ29uc3RydWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHJlc29sdmUoKSBhIENvbnN0cnVjdCBhdCAnICsgcGF0aE5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0geyB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlKGtleSk7XG4gICAgICAgIGlmICh0eXBlb2YocmVzb2x2ZWRLZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUga2V5IFwiJHtrZXl9XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8gJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlZEtleSl9IGJ1dCBtdXN0IGJlIHJlc29sdmFibGUgdG8gYSBzdHJpbmdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZShvYmpba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG5cbiAgICAgICAgLy8gc2tpcCB1bmRlZmluZWRcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtyZXNvbHZlZEtleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENlbnRyYWwgcGxhY2Ugd2hlcmUgd2Uga2VlcCBhIG1hcHBpbmcgZnJvbSBUb2tlbnMgdG8gdGhlaXIgU3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKlxuICogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyB1c2VkIHRvIGVtYmVkIHRva2VuIGludG8gc3RyaW5ncyxcbiAqIGFuZCBzdG9yZWQgdG8gYmUgYWJsZSB0b1xuICpcbiAqIEFsbCBpbnN0YW5jZXMgb2YgVG9rZW5TdHJpbmdNYXAgc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSwgc28gdGhhdCB0aGlzIHByb2Nlc3NcbiAqIHdvcmtzIGV2ZW4gd2hlbiBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBsaWJyYXJ5IGFyZSBsb2FkZWQuXG4gKi9cbmNsYXNzIFRva2VuU3RyaW5nTWFwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuTWFwOiB7W2tleTogc3RyaW5nXTogVG9rZW59O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGdsb2IgPSBnbG9iYWwgYXMgYW55O1xuICAgICAgICB0aGlzLnRva2VuTWFwID0gZ2xvYi5fX2Nka1Rva2VuTWFwID0gZ2xvYi5fX2Nka1Rva2VuTWFwIHx8IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRpbmcgYSB1bmlxdWUgc3RyaW5nIGZvciB0aGlzIFRva2VuLCByZXR1cm5pbmcgYSBrZXlcbiAgICAgKlxuICAgICAqIEV2ZXJ5IGNhbGwgZm9yIHRoZSBzYW1lIFRva2VuIHdpbGwgcHJvZHVjZSBhIG5ldyB1bmlxdWUgc3RyaW5nLCBub1xuICAgICAqIGF0dGVtcHQgaXMgbWFkZSB0byBkZWR1cGxpY2F0ZS4gVG9rZW4gb2JqZWN0cyBzaG91bGQgY2FjaGUgdGhlXG4gICAgICogdmFsdWUgdGhlbXNlbHZlcywgaWYgcmVxdWlyZWQuXG4gICAgICpcbiAgICAgKiBUaGUgdG9rZW4gY2FuIGNob29zZSAocGFydCBvZikgaXRzIG93biByZXByZXNlbnRhdGlvbiBzdHJpbmcgd2l0aCBhXG4gICAgICogaGludC4gVGhpcyBtYXkgYmUgdXNlZCB0byBwcm9kdWNlIGFlc3RoZXRpY2FsbHkgcGxlYXNpbmcgYW5kXG4gICAgICogcmVjb2duaXphYmxlIHRva2VuIHJlcHJlc2VudGF0aW9ucyBmb3IgaHVtYW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlcih0b2tlbjogVG9rZW4sIHJlcHJlc2VudGF0aW9uSGludD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBPYmplY3Qua2V5cyh0aGlzLnRva2VuTWFwKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25IaW50IHx8IGBUT0tFTmA7XG5cbiAgICAgICAgY29uc3Qga2V5ID0gYCR7cmVwcmVzZW50YXRpb259LiR7Y291bnRlcn1gO1xuICAgICAgICBpZiAobmV3IFJlZ0V4cChgW14ke1ZBTElEX0tFWV9DSEFSU31dYCkuZXhlYyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiB0b2tlbiByZXByZXNlbnRhdGlvbjogJHtrZXl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuTWFwW2tleV0gPSB0b2tlbjtcbiAgICAgICAgcmV0dXJuIGAke0JFR0lOX1RPS0VOX01BUktFUn0ke2tleX0ke0VORF9UT0tFTl9NQVJLRVJ9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYFRva2VuU3RyaW5nYCBmb3IgdGhpcyBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVRva2VuU3RyaW5nKHM6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFRva2VuU3RyaW5nKHMsIEJFR0lOX1RPS0VOX01BUktFUiwgYFske1ZBTElEX0tFWV9DSEFSU31dK2AsIEVORF9UT0tFTl9NQVJLRVIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgYW55IFRva2VuIG1hcmtlcnMgaW4gdGhpcyBzdHJpbmcgd2l0aCB0aGVpciByZXNvbHZlZCB2YWx1ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZU1hcmtlcnMoczogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5jcmVhdGVUb2tlblN0cmluZyhzKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gc3RyLnNwbGl0KHRoaXMubG9va3VwVG9rZW4uYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBmcmFnbWVudHMuam9pbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBUb2tlbiBieSBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9va3VwVG9rZW4oa2V5OiBzdHJpbmcpOiBUb2tlbiB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLnRva2VuTWFwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgdG9rZW4ga2V5OiAke2tleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTWFwW2tleV07XG4gICAgfVxufVxuXG5jb25zdCBCRUdJTl9UT0tFTl9NQVJLRVIgPSAnJHtUb2tlblsnO1xuY29uc3QgRU5EX1RPS0VOX01BUktFUiA9ICddfSc7XG5jb25zdCBWQUxJRF9LRVlfQ0hBUlMgPSAnYS16QS1aMC05Oi5fLSc7XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSB0b2tlbiBzdHJpbmcgbWFwXG4gKi9cbmNvbnN0IFRPS0VOX1NUUklOR19NQVAgPSBuZXcgVG9rZW5TdHJpbmdNYXAoKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgdGhhdCBUb2tlbiBqb2luZXJzIGltcGxlbWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUb2tlbkpvaW5lciB7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGpvaW5lci5cbiAgICAgKlxuICAgICAqIE11c3QgYmUgdW5pcXVlIHBlciBqb2luZXI6IHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGFzc2VydCB0aGF0IHRoZXJlXG4gICAgICogaXMgZXhhY3RseSBvbmx5IHR5cGUgb2Ygam9pbmVyIGluIGEgam9pbiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbGFuZ3VhZ2UgaW50cmluc2ljIHRoYXQgd2lsbCBjb21iaW5lIHRoZSBzdHJpbmdzIGluIHRoZSBnaXZlbiBlbmdpbmVcbiAgICAgKi9cbiAgICBqb2luKGZyYWdtZW50czogYW55W10pOiBhbnk7XG59XG5cbi8qKlxuICogQSBzdHJpbmcgd2l0aCBtYXJrZXJzIGluIGl0IHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGV4dGVybmFsIHZhbHVlc1xuICovXG5jbGFzcyBUb2tlblN0cmluZyB7XG4gICAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdHI6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBiZWdpbk1hcmtlcjogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGlkUGF0dGVybjogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVuZE1hcmtlcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IGAke3JlZ2V4UXVvdGUodGhpcy5iZWdpbk1hcmtlcil9KCR7dGhpcy5pZFBhdHRlcm59KSR7cmVnZXhRdW90ZSh0aGlzLmVuZE1hcmtlcil9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdCBzdHJpbmcgb24gbWFya2Vycywgc3Vic3RpdHV0aW5nIG1hcmtlcnMgd2l0aCBUb2tlbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BsaXQobG9va3VwOiAoaWQ6IHN0cmluZykgPT4gVG9rZW4pOiBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4sICdnJyk7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBUb2tlblN0cmluZ0ZyYWdtZW50cygpO1xuXG4gICAgICAgIGxldCByZXN0ID0gMDtcbiAgICAgICAgbGV0IG0gPSByZS5leGVjKHRoaXMuc3RyKTtcbiAgICAgICAgd2hpbGUgKG0pIHtcbiAgICAgICAgICAgIGlmIChtLmluZGV4ID4gcmVzdCkge1xuICAgICAgICAgICAgICAgIHJldC5hZGRTdHJpbmcodGhpcy5zdHIuc3Vic3RyaW5nKHJlc3QsIG0uaW5kZXgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0LmFkZFRva2VuKGxvb2t1cChtWzFdKSk7XG5cbiAgICAgICAgICAgIHJlc3QgPSByZS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBtID0gcmUuZXhlYyh0aGlzLnN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdCA8IHRoaXMuc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0LmFkZFN0cmluZyh0aGlzLnN0ci5zdWJzdHJpbmcocmVzdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBzdHJpbmcgaW5jbHVkZXMgdG9rZW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyB0ZXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuLCAnZycpO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh0aGlzLnN0cik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlc3VsdCBvZiB0aGUgc3BsaXQgb2YgYSBzdHJpbmcgd2l0aCBUb2tlbnNcbiAqXG4gKiBFaXRoZXIgYSBsaXRlcmFsIHBhcnQgb2YgdGhlIHN0cmluZywgb3IgYW4gdW5yZXNvbHZlZCBUb2tlbi5cbiAqL1xudHlwZSBTdHJpbmdGcmFnbWVudCA9IHsgdHlwZTogJ3N0cmluZyc7IHN0cjogc3RyaW5nIH07XG50eXBlIFRva2VuRnJhZ21lbnQgPSB7IHR5cGU6ICd0b2tlbic7IHRva2VuOiBUb2tlbiB9O1xudHlwZSBGcmFnbWVudCA9ICBTdHJpbmdGcmFnbWVudCB8IFRva2VuRnJhZ21lbnQ7XG5cbi8qKlxuICogRnJhZ21lbnRzIG9mIGEgc3RyaW5nIHdpdGggbWFya2Vyc1xuICovXG5jbGFzcyBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudHMgPSBuZXcgQXJyYXk8RnJhZ21lbnQ+KCk7XG5cbiAgICBwdWJsaWMgdmFsdWVzKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnRzLm1hcChmID0+IGYudHlwZSA9PT0gJ3Rva2VuJyA/IHJlc29sdmUoZi50b2tlbikgOiBmLnN0cik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFN0cmluZyhzdHI6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3N0cmluZycsIHN0ciB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVG9rZW4odG9rZW46IFRva2VuKSB7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRzLnB1c2goeyB0eXBlOiAndG9rZW4nLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21iaW5lIHRoZSByZXNvbHZlZCBzdHJpbmcgZnJhZ21lbnRzIHVzaW5nIHRoZSBUb2tlbnMgdG8gam9pbi5cbiAgICAgKlxuICAgICAqIFJlc29sdmVzIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIGpvaW4oKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMSkgeyByZXR1cm4gcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzWzBdKTsgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcmFnbWVudHNbMF07XG5cbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGxldCB0b2tlbjogVG9rZW47XG5cbiAgICAgICAgaWYgKGZpcnN0LnR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgICAgICAgIHRva2VuID0gZmlyc3QudG9rZW47XG4gICAgICAgICAgICBpID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG5ldmVyIGhhdmUgdHdvIHN0cmluZ3MgaW4gYSByb3dcbiAgICAgICAgICAgIHRva2VuID0gKHRoaXMuZnJhZ21lbnRzWzFdIGFzIFRva2VuRnJhZ21lbnQpLnRva2VuLmNvbmNhdChmaXJzdC5zdHIsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpID0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5mcmFnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2VuLmNvbmNhdCh1bmRlZmluZWQsIHJlc29sdmVGcmFnbWVudCh0aGlzLmZyYWdtZW50c1tpXSkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSB2YWx1ZSBmcm9tIGEgc2luZ2xlIGZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGcmFnbWVudChmcmFnbWVudDogRnJhZ21lbnQpOiBhbnkge1xuICAgIHJldHVybiBmcmFnbWVudC50eXBlID09PSAnc3RyaW5nJyA/IGZyYWdtZW50LnN0ciA6IHJlc29sdmUoZnJhZ21lbnQudG9rZW4pO1xufVxuXG4vKipcbiAqIFF1b3RlIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWdleFxuICovXG5mdW5jdGlvbiByZWdleFF1b3RlKHM6IHN0cmluZykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1suPyorXiRbXFxdXFxcXCgpe318LV0vZywgXCJcXFxcJCZcIik7XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILFlBQTZCLGVBQXFCLEVBQW1CLFdBQW9CO1FBQTVELG9CQUFlLEdBQWYsZUFBZSxDQUFNO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFTO0lBQ3pGLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pDLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDL0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07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QUFTLENBQUMsQ0FBQztZQUNoRixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsRUFBRSxDQUFDO1NBQ0w7UUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWtCO0lBQ3pDLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdFwiO1xuXG4vKipcbiAqIElmIG9iamVjdHMgaGFzIGEgZnVuY3Rpb24gcHJvcGVydHkgYnkgdGhpcyBuYW1lLCB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCB0b2tlbnMsIGFuZCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byByZXNvbHZlIHRoZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVNPTFZFX01FVEhPRCA9ICdyZXNvbHZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3BlY2lhbCBvciBsYXppbHktZXZhbHVhdGVkIHZhbHVlLlxuICpcbiAqIENhbiBiZSB1c2VkIHRvIGRlbGF5IGV2YWx1YXRpb24gb2YgYSBjZXJ0YWluIHZhbHVlIGluIGNhc2UsIGZvciBleGFtcGxlLFxuICogdGhhdCBpdCByZXF1aXJlcyBzb21lIGNvbnRleHQgb3IgbGF0ZS1ib3VuZCBkYXRhLiBDYW4gYWxzbyBiZSB1c2VkIHRvXG4gKiBtYXJrIHZhbHVlcyB0aGF0IG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGF0IGRvY3VtZW50IHJlbmRlcmluZyB0aW1lLlxuICpcbiAqIFRva2VucyBjYW4gYmUgZW1iZWRkZWQgaW50byBzdHJpbmdzIHdoaWxlIHJldGFpbmluZyB0aGVpciBvcmlnaW5hbFxuICogc2VtYW50aWNzLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW4ge1xuICBwcml2YXRlIHRva2VuS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdG9rZW4gdGhhdCByZXNvbHZlcyB0byBgdmFsdWVgLlxuICAgKlxuICAgKiBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIHVwb24gcmVzb2x1dGlvbiBhbmRcbiAgICogdGhlIHZhbHVlIGl0IHJldHVybnMgd2lsbCBiZSB1c2VkIGFzIHRoZSB0b2tlbidzIHZhbHVlLlxuICAgKlxuICAgKiBkaXNwbGF5TmFtZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgVG9rZW4gd2hlbiBpdCdzIGVtYmVkZGVkIGludG8gYSBzdHJpbmc7IGl0XG4gICAqIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgKlxuICAgKiAgICBcImVtYmVkZGVkIGluIGEgbGFyZ2VyIHN0cmluZyBpcyAke1Rva2VuW0RJU1BMQVlfTkFNRS4xMjNdfVwiXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGhpbnQgdG8gaHVtYW5zIHdoYXQgdGhlIG1lYW5pbmcgb2YgdGhlIFRva2VuIGlzLFxuICAgKiBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgYW5kIHNpbXBsZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoXy46LSkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZU9yRnVuY3Rpb24gV2hhdCB0aGlzIHRva2VuIHdpbGwgZXZhbHVhdGUgdG8sIGxpdGVyYWwgb3IgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkaXNwbGF5TmFtZSBBIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgaGludCBmb3IgdGhpcyBUb2tlblxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2YWx1ZU9yRnVuY3Rpb24/OiBhbnksIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJldmVyc2libGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdG9rZW5cbiAgICpcbiAgICogSWYgdGhlIFRva2VuIGlzIGluaXRpYWxpemVkIHdpdGggYSBsaXRlcmFsLCB0aGUgc3RyaW5naWZpZWQgdmFsdWUgb2YgdGhlXG4gICAqIGxpdGVyYWwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBzcGVjaWFsIHF1b3RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIFRva2VuIGlzIHJldHVybmVkIHRoYXQgY2FuIGJlIGVtYmVkZGVkIGludG8gb3RoZXIgc3RyaW5ncy5cbiAgICpcbiAgICogU3RyaW5ncyB3aXRoIHF1b3RlZCBUb2tlbnMgaW4gdGhlbSBjYW4gYmUgcmVzdG9yZWQgYmFjayBpbnRvXG4gICAqIGNvbXBsZXggdmFsdWVzIHdpdGggdGhlIFRva2VucyByZXN0b3JlZCBieSBjYWxsaW5nIGByZXNvbHZlKClgXG4gICAqIG9uIHRoZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdGhpcy52YWx1ZU9yRnVuY3Rpb247XG4gICAgLy8gT3B0aW1pemF0aW9uOiBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGlzLCBkb24ndCBib3RoZXJcbiAgICAvLyByZWdpc3RlcmluZyBhIFRva2VuLlxuICAgIGlmICh2YWx1ZVR5cGUgPT09ICdzdHJpbmcnIHx8IHZhbHVlVHlwZSA9PT0gJ251bWJlcicgfHwgdmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlT3JGdW5jdGlvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2VuS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudG9rZW5LZXkgPSBUT0tFTl9TVFJJTkdfTUFQLnJlZ2lzdGVyKHRoaXMsIHRoaXMuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbktleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIHRoaXMgVG9rZW4gaW50byBKU09OXG4gICAqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkoKS4gV2Ugd2FudCB0byBwcm9oaWJpdCB0aGlzLCBiZWNhdXNlXG4gICAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRvIHRoaXMgcHJvcGVybHksIHNvIHdlIGp1c3QgdGhyb3cgYW4gZXJyb3IgaGVyZS5cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeSgpIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHN0cnVjdHVyZSB3aXRoIGEgVG9rZW4gaW4gaXQuIFVzZSBhIGRvY3VtZW50LXNwZWNpZmljIHN0cmluZ2lmaWNhdGlvbiBtZXRob2QgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb25jYXRlZCB2ZXJzaW9uIG9mIHRoaXMgVG9rZW4gaW4gYSBzdHJpbmcgY29udGV4dFxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNvbWJpbmVzIHN0cmluZ3MsIGJ1dCBzcGVjaWFsaXplZFxuICAgKiBpbXBsZW1lbnRzIG9mIFRva2VuIGNhbiByZXR1cm4gYSBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNvbmNhdChsZWZ0OiBhbnkgfCB1bmRlZmluZWQsIHJpZ2h0OiBhbnkgfCB1bmRlZmluZWQpOiBUb2tlbiB7XG4gICAgY29uc3QgcGFydHMgPSBbbGVmdCwgcmVzb2x2ZSh0aGlzKSwgcmlnaHRdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ldyBUb2tlbihwYXJ0cy5tYXAoeCA9PiBgJHt4fWApLmpvaW4oJycpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvYmogaXMgYSB0b2tlbiAoaS5lLiBoYXMgdGhlIHJlc29sdmUoKSBtZXRob2Qgb3IgaXMgYSBzdHJpbmdcbiAqIHRoYXQgaW5jbHVkZXMgdG9rZW4gbWFya2VycykuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWQob2JqOiBhbnkpOiBvYmogaXMgVG9rZW4ge1xuICBpZiAodHlwZW9mKG9iaikgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFRPS0VOX1NUUklOR19NQVAuY3JlYXRlVG9rZW5TdHJpbmcob2JqKS50ZXN0KCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHR5cGVvZihvYmpbUkVTT0xWRV9NRVRIT0RdKSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIG9iamVjdCBieSBldmFsdWF0aW5nIGFsbCB0b2tlbnMgYW5kIHJlbW92aW5nIGFueSB1bmRlZmluZWQgb3IgZW1wdHkgb2JqZWN0cyBvciBhcnJheXMuXG4gKiBWYWx1ZXMgY2FuIG9ubHkgYmUgcHJpbWl0aXZlcywgYXJyYXlzIG9yIHRva2Vucy4gT3RoZXIgb2JqZWN0cyAoaS5lLiB3aXRoIG1ldGhvZHMpIHdpbGwgYmUgcmVqZWN0ZWQuXG4gKlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gcHJlZml4IFByZWZpeCBrZXkgcGF0aCBjb21wb25lbnRzIGZvciBkaWFnbm9zdGljcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUob2JqOiBhbnksIHByZWZpeD86IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3QgcGF0aCA9IHByZWZpeCB8fCBbIF07XG4gIGNvbnN0IHBhdGhOYW1lID0gJy8nICsgcGF0aC5qb2luKCcvJyk7XG5cbiAgLy8gcHJvdGVjdCBhZ2FpbnN0IGN5Y2xpYyByZWZlcmVuY2VzIGJ5IGxpbWl0aW5nIGRlcHRoLlxuICBpZiAocGF0aC5sZW5ndGggPiAyMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIG9iamVjdCB0cmVlIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlLiBQYXRoOiAnICsgcGF0aE5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gdW5kZWZpbmVkXG4gIC8vXG5cbiAgaWYgKHR5cGVvZihvYmopID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvL1xuICAvLyBudWxsXG4gIC8vXG5cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy9cbiAgLy8gZnVuY3Rpb25zIC0gbm90IHN1cHBvcnRlZCAob25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZClcbiAgLy9cblxuICBpZiAodHlwZW9mKG9iaikgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byByZXNvbHZlIGEgbm9uLWRhdGEgb2JqZWN0LiBPbmx5IHRva2VuIGFyZSBzdXBwb3J0ZWQgZm9yIGxhenkgZXZhbHVhdGlvbi4gUGF0aDogJHtwYXRoTmFtZX0uIE9iamVjdDogJHtvYmp9YCk7XG4gIH1cblxuICAvL1xuICAvLyBzdHJpbmcgLSBwb3RlbnRpYWxseSByZXBsYWNlIGFsbCBzdHJpbmdpZmllZCBUb2tlbnNcbiAgLy9cbiAgaWYgKHR5cGVvZihvYmopID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBUT0tFTl9TVFJJTkdfTUFQLnJlc29sdmVNYXJrZXJzKG9iaiBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLy9cbiAgLy8gcHJpbWl0aXZlcyAtIGFzLWlzXG4gIC8vXG5cbiAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0JyB8fCBvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vXG4gIC8vIHRva2VucyAtIGludm9rZSAncmVzb2x2ZScgYW5kIGNvbnRpbnVlIHRvIHJlc29sdmUgcmVjdXJzaXZlbHlcbiAgLy9cblxuICBpZiAodW5yZXNvbHZlZChvYmopKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmpbUkVTT0xWRV9NRVRIT0RdKCk7XG4gICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgLy9cbiAgLy8gYXJyYXlzIC0gcmVzb2x2ZSBhbGwgdmFsdWVzLCByZW1vdmUgdW5kZWZpbmVkIGFuZCByZW1vdmUgZW1wdHkgYXJyYXlzXG4gIC8vXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGNvbnN0IGFyciA9IG9ialxuICAgICAgLm1hcCgoeCwgaSkgPT4gcmVzb2x2ZSh4LCBwYXRoLmNvbmNhdChpLnRvU3RyaW5nKCkpKSlcbiAgICAgIC5maWx0ZXIoeCA9PiB0eXBlb2YoeCkgIT09ICd1bmRlZmluZWQnKTtcblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvL1xuICAvLyBvYmplY3RzIC0gZGVlcC1yZXNvbHZlIGFsbCB2YWx1ZXNcbiAgLy9cblxuICAvLyBNdXN0IG5vdCBiZSBhIENvbnN0cnVjdCBhdCB0aGlzIHBvaW50LCBvdGhlcndpc2UgeW91IHByb2JhYmx5IG1hZGUgYSB0eXBlXG4gIC8vIG1pc3Rha2Ugc29tZXdoZXJlIGFuZCByZXNvbHZlIHdpbGwgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCByZWN1cnNpbmcgaW50b1xuICAvLyBjaGlsZC5wYXJlbnQgPC0tLT4gcGFyZW50LmNoaWxkcmVuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBDb25zdHJ1Y3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byByZXNvbHZlKCkgYSBDb25zdHJ1Y3QgYXQgJyArIHBhdGhOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0geyB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlKGtleSk7XG4gICAgaWYgKHR5cGVvZihyZXNvbHZlZEtleSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBrZXkgXCIke2tleX1cIiBoYXMgYmVlbiByZXNvbHZlZCB0byAke0pTT04uc3RyaW5naWZ5KHJlc29sdmVkS2V5KX0gYnV0IG11c3QgYmUgcmVzb2x2YWJsZSB0byBhIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZShvYmpba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG5cbiAgICAvLyBza2lwIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W3Jlc29sdmVkS2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDZW50cmFsIHBsYWNlIHdoZXJlIHdlIGtlZXAgYSBtYXBwaW5nIGZyb20gVG9rZW5zIHRvIHRoZWlyIFN0cmluZyByZXByZXNlbnRhdGlvblxuICpcbiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgdXNlZCB0byBlbWJlZCB0b2tlbiBpbnRvIHN0cmluZ3MsXG4gKiBhbmQgc3RvcmVkIHRvIGJlIGFibGUgdG9cbiAqXG4gKiBBbGwgaW5zdGFuY2VzIG9mIFRva2VuU3RyaW5nTWFwIHNoYXJlIHRoZSBzYW1lIHN0b3JhZ2UsIHNvIHRoYXQgdGhpcyBwcm9jZXNzXG4gKiB3b3JrcyBldmVuIHdoZW4gZGlmZmVyZW50IGNvcGllcyBvZiB0aGUgbGlicmFyeSBhcmUgbG9hZGVkLlxuICovXG5jbGFzcyBUb2tlblN0cmluZ01hcCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5NYXA6IHtba2V5OiBzdHJpbmddOiBUb2tlbn07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZ2xvYiA9IGdsb2JhbCBhcyBhbnk7XG4gICAgdGhpcy50b2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0aW5nIGEgdW5pcXVlIHN0cmluZyBmb3IgdGhpcyBUb2tlbiwgcmV0dXJuaW5nIGEga2V5XG4gICAqXG4gICAqIEV2ZXJ5IGNhbGwgZm9yIHRoZSBzYW1lIFRva2VuIHdpbGwgcHJvZHVjZSBhIG5ldyB1bmlxdWUgc3RyaW5nLCBub1xuICAgKiBhdHRlbXB0IGlzIG1hZGUgdG8gZGVkdXBsaWNhdGUuIFRva2VuIG9iamVjdHMgc2hvdWxkIGNhY2hlIHRoZVxuICAgKiB2YWx1ZSB0aGVtc2VsdmVzLCBpZiByZXF1aXJlZC5cbiAgICpcbiAgICogVGhlIHRva2VuIGNhbiBjaG9vc2UgKHBhcnQgb2YpIGl0cyBvd24gcmVwcmVzZW50YXRpb24gc3RyaW5nIHdpdGggYVxuICAgKiBoaW50LiBUaGlzIG1heSBiZSB1c2VkIHRvIHByb2R1Y2UgYWVzdGhldGljYWxseSBwbGVhc2luZyBhbmRcbiAgICogcmVjb2duaXphYmxlIHRva2VuIHJlcHJlc2VudGF0aW9ucyBmb3IgaHVtYW5zLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyKHRva2VuOiBUb2tlbiwgcmVwcmVzZW50YXRpb25IaW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50b2tlbk1hcCkubGVuZ3RoO1xuICAgIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25IaW50IHx8IGBUT0tFTmA7XG5cbiAgICBjb25zdCBrZXkgPSBgJHtyZXByZXNlbnRhdGlvbn0uJHtjb3VudGVyfWA7XG4gICAgaWYgKG5ldyBSZWdFeHAoYFteJHtWQUxJRF9LRVlfQ0hBUlN9XWApLmV4ZWMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdG9rZW4gcmVwcmVzZW50YXRpb246ICR7a2V5fWApO1xuICAgIH1cblxuICAgIHRoaXMudG9rZW5NYXBba2V5XSA9IHRva2VuO1xuICAgIHJldHVybiBgJHtCRUdJTl9UT0tFTl9NQVJLRVJ9JHtrZXl9JHtFTkRfVE9LRU5fTUFSS0VSfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBUb2tlblN0cmluZ2AgZm9yIHRoaXMgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZVRva2VuU3RyaW5nKHM6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgVG9rZW5TdHJpbmcocywgQkVHSU5fVE9LRU5fTUFSS0VSLCBgWyR7VkFMSURfS0VZX0NIQVJTfV0rYCwgRU5EX1RPS0VOX01BUktFUik7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbnkgVG9rZW4gbWFya2VycyBpbiB0aGlzIHN0cmluZyB3aXRoIHRoZWlyIHJlc29sdmVkIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHJlc29sdmVNYXJrZXJzKHM6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5jcmVhdGVUb2tlblN0cmluZyhzKTtcbiAgICBjb25zdCBmcmFnbWVudHMgPSBzdHIuc3BsaXQodGhpcy5sb29rdXBUb2tlbi5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gZnJhZ21lbnRzLmpvaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgVG9rZW4gYnkga2V5XG4gICAqL1xuICBwdWJsaWMgbG9va3VwVG9rZW4oa2V5OiBzdHJpbmcpOiBUb2tlbiB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMudG9rZW5NYXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0b2tlbiBrZXk6ICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRva2VuTWFwW2tleV07XG4gIH1cbn1cblxuY29uc3QgQkVHSU5fVE9LRU5fTUFSS0VSID0gJyR7VG9rZW5bJztcbmNvbnN0IEVORF9UT0tFTl9NQVJLRVIgPSAnXX0nO1xuY29uc3QgVkFMSURfS0VZX0NIQVJTID0gJ2EtekEtWjAtOTouXy0nO1xuXG4vKipcbiAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgdG9rZW4gc3RyaW5nIG1hcFxuICovXG5jb25zdCBUT0tFTl9TVFJJTkdfTUFQID0gbmV3IFRva2VuU3RyaW5nTWFwKCk7XG5cbi8qKlxuICogSW50ZXJmYWNlIHRoYXQgVG9rZW4gam9pbmVycyBpbXBsZW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9rZW5Kb2luZXIge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGpvaW5lci5cbiAgICpcbiAgICogTXVzdCBiZSB1bmlxdWUgcGVyIGpvaW5lcjogdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gYXNzZXJ0IHRoYXQgdGhlcmVcbiAgICogaXMgZXhhY3RseSBvbmx5IHR5cGUgb2Ygam9pbmVyIGluIGEgam9pbiBvcGVyYXRpb24uXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhbmd1YWdlIGludHJpbnNpYyB0aGF0IHdpbGwgY29tYmluZSB0aGUgc3RyaW5ncyBpbiB0aGUgZ2l2ZW4gZW5naW5lXG4gICAqL1xuICBqb2luKGZyYWdtZW50czogYW55W10pOiBhbnk7XG59XG5cbi8qKlxuICogQSBzdHJpbmcgd2l0aCBtYXJrZXJzIGluIGl0IHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGV4dGVybmFsIHZhbHVlc1xuICovXG5jbGFzcyBUb2tlblN0cmluZyB7XG4gIHByaXZhdGUgcGF0dGVybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWdpbk1hcmtlcjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRQYXR0ZXJuOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRNYXJrZXI6IHN0cmluZykge1xuICAgIHRoaXMucGF0dGVybiA9IGAke3JlZ2V4UXVvdGUodGhpcy5iZWdpbk1hcmtlcil9KCR7dGhpcy5pZFBhdHRlcm59KSR7cmVnZXhRdW90ZSh0aGlzLmVuZE1hcmtlcil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBzdHJpbmcgb24gbWFya2Vycywgc3Vic3RpdHV0aW5nIG1hcmtlcnMgd2l0aCBUb2tlbnNcbiAgICovXG4gIHB1YmxpYyBzcGxpdChsb29rdXA6IChpZDogc3RyaW5nKSA9PiBUb2tlbik6IFRva2VuU3RyaW5nRnJhZ21lbnRzIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuLCAnZycpO1xuICAgIGNvbnN0IHJldCA9IG5ldyBUb2tlblN0cmluZ0ZyYWdtZW50cygpO1xuXG4gICAgbGV0IHJlc3QgPSAwO1xuICAgIGxldCBtID0gcmUuZXhlYyh0aGlzLnN0cik7XG4gICAgd2hpbGUgKG0pIHtcbiAgICAgIGlmIChtLmluZGV4ID4gcmVzdCkge1xuICAgICAgICByZXQuYWRkU3RyaW5nKHRoaXMuc3RyLnN1YnN0cmluZyhyZXN0LCBtLmluZGV4KSk7XG4gICAgICB9XG5cbiAgICAgIHJldC5hZGRUb2tlbihsb29rdXAobVsxXSkpO1xuXG4gICAgICByZXN0ID0gcmUubGFzdEluZGV4O1xuICAgICAgbSA9IHJlLmV4ZWModGhpcy5zdHIpO1xuICAgIH1cblxuICAgIGlmIChyZXN0IDwgdGhpcy5zdHIubGVuZ3RoKSB7XG4gICAgICByZXQuYWRkU3RyaW5nKHRoaXMuc3RyLnN1YnN0cmluZyhyZXN0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBzdHJpbmcgaW5jbHVkZXMgdG9rZW5zLlxuICAgKi9cbiAgcHVibGljIHRlc3QoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybiwgJ2cnKTtcbiAgICByZXR1cm4gcmUudGVzdCh0aGlzLnN0cik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgdGhlIHNwbGl0IG9mIGEgc3RyaW5nIHdpdGggVG9rZW5zXG4gKlxuICogRWl0aGVyIGEgbGl0ZXJhbCBwYXJ0IG9mIHRoZSBzdHJpbmcsIG9yIGFuIHVucmVzb2x2ZWQgVG9rZW4uXG4gKi9cbnR5cGUgU3RyaW5nRnJhZ21lbnQgPSB7IHR5cGU6ICdzdHJpbmcnOyBzdHI6IHN0cmluZyB9O1xudHlwZSBUb2tlbkZyYWdtZW50ID0geyB0eXBlOiAndG9rZW4nOyB0b2tlbjogVG9rZW4gfTtcbnR5cGUgRnJhZ21lbnQgPSAgU3RyaW5nRnJhZ21lbnQgfCBUb2tlbkZyYWdtZW50O1xuXG4vKipcbiAqIEZyYWdtZW50cyBvZiBhIHN0cmluZyB3aXRoIG1hcmtlcnNcbiAqL1xuY2xhc3MgVG9rZW5TdHJpbmdGcmFnbWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50cyA9IG5ldyBBcnJheTxGcmFnbWVudD4oKTtcblxuICBwdWJsaWMgdmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5mcmFnbWVudHMubWFwKGYgPT4gZi50eXBlID09PSAndG9rZW4nID8gcmVzb2x2ZShmLnRva2VuKSA6IGYuc3RyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3N0cmluZycsIHN0ciB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb2tlbih0b2tlbjogVG9rZW4pIHtcbiAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3Rva2VuJywgdG9rZW4gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZSB0aGUgcmVzb2x2ZWQgc3RyaW5nIGZyYWdtZW50cyB1c2luZyB0aGUgVG9rZW5zIHRvIGpvaW4uXG4gICAqXG4gICAqIFJlc29sdmVzIHRoZSByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgam9pbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmZyYWdtZW50cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMSkgeyByZXR1cm4gcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzWzBdKTsgfVxuXG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmZyYWdtZW50c1swXTtcblxuICAgIGxldCBpO1xuICAgIGxldCB0b2tlbjogVG9rZW47XG5cbiAgICBpZiAoZmlyc3QudHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgdG9rZW4gPSBmaXJzdC50b2tlbjtcbiAgICAgIGkgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBuZXZlciBoYXZlIHR3byBzdHJpbmdzIGluIGEgcm93XG4gICAgICB0b2tlbiA9ICh0aGlzLmZyYWdtZW50c1sxXSBhcyBUb2tlbkZyYWdtZW50KS50b2tlbi5jb25jYXQoZmlyc3Quc3RyLCB1bmRlZmluZWQpO1xuICAgICAgaSA9IDI7XG4gICAgfVxuXG4gICAgd2hpbGUgKGkgPCB0aGlzLmZyYWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRva2VuID0gdG9rZW4uY29uY2F0KHVuZGVmaW5lZCwgcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzW2ldKSk7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgdmFsdWUgZnJvbSBhIHNpbmdsZSBmcmFnbWVudFxuICovXG5mdW5jdGlvbiByZXNvbHZlRnJhZ21lbnQoZnJhZ21lbnQ6IEZyYWdtZW50KTogYW55IHtcbiAgcmV0dXJuIGZyYWdtZW50LnR5cGUgPT09ICdzdHJpbmcnID8gZnJhZ21lbnQuc3RyIDogcmVzb2x2ZShmcmFnbWVudC50b2tlbik7XG59XG5cbi8qKlxuICogUXVvdGUgYSBzdHJpbmcgZm9yIHVzZSBpbiBhIHJlZ2V4XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4UXVvdGUoczogc3RyaW5nKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1suPyorXiRbXFxdXFxcXCgpe318LV0vZywgXCJcXFxcJCZcIik7XG59XG4iXX0=

@@ -44,2 +44,2 @@ "use strict";

exports.ignoreEmpty = ignoreEmpty;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBbUM7QUFFbkM7OztHQUdHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBUTtJQUM1QyxHQUFHLEdBQUcsZ0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuQixJQUFJLE9BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDMUIsT0FBTyxHQUFHLENBQUM7S0FDZDtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBckJELDBEQXFCQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLENBQU07SUFDOUIsQ0FBQyxHQUFHLGdCQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4REFBOEQ7SUFFOUUsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtRQUNYLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxTQUFTLENBQUM7S0FDcEI7SUFFRCxJQUFJLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZELE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBakJELGtDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL3Rva2Vucyc7XG5cbi8qKlxuICogR2l2ZW4gYW4gb2JqZWN0LCBjb252ZXJ0cyBhbGwga2V5cyB0byBQYXNjYWxDYXNlIGdpdmVuIHRoZXkgYXJlIGN1cnJlbnRseSBpbiBjYW1lbCBjYXNlLlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMob2JqOiBhbnkpOiBhbnkge1xuICAgIG9iaiA9IHJlc29sdmUob2JqKTtcblxuICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoubWFwKHggPT4gY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoeCkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld09iajogYW55ID0geyB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgICBjb25zdCBmaXJzdCA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY29uc3QgbmV3S2V5ID0gZmlyc3QgKyBrZXkuc2xpY2UoMSk7XG4gICAgICAgIG5ld09ialtuZXdLZXldID0gY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogVHVybnMgZW1wdHkgYXJyYXlzL29iamVjdHMgdG8gdW5kZWZpbmVkIChhZnRlciBldmFsdWF0aW5nIHRva2VucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVFbXB0eShvOiBhbnkpOiBhbnkge1xuICAgIG8gPSByZXNvbHZlKG8pOyAvLyBmaXJzdCByZXNvbHZlIHRva2VucywgaW4gY2FzZSB0aGV5IGV2YWx1YXRlIHRvICd1bmRlZmluZWQnLlxuXG4gICAgLy8gdW5kZWZpbmVkL251bGxcbiAgICBpZiAobyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG8pICYmIG8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZihvKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMobykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG87XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBbUM7QUFFbkM7OztHQUdHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBUTtJQUM5QyxHQUFHLEdBQUcsZ0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuQixJQUFJLE9BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakQ7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBckJELDBEQXFCQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLENBQU07SUFDaEMsQ0FBQyxHQUFHLGdCQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4REFBOEQ7SUFFOUUsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtRQUNiLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEMsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxJQUFJLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pELE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBakJELGtDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL3Rva2Vucyc7XG5cbi8qKlxuICogR2l2ZW4gYW4gb2JqZWN0LCBjb252ZXJ0cyBhbGwga2V5cyB0byBQYXNjYWxDYXNlIGdpdmVuIHRoZXkgYXJlIGN1cnJlbnRseSBpbiBjYW1lbCBjYXNlLlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMob2JqOiBhbnkpOiBhbnkge1xuICBvYmogPSByZXNvbHZlKG9iaik7XG5cbiAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoeCA9PiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh4KSk7XG4gIH1cblxuICBjb25zdCBuZXdPYmo6IGFueSA9IHsgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICBjb25zdCBmaXJzdCA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBuZXdLZXkgPSBmaXJzdCArIGtleS5zbGljZSgxKTtcbiAgICBuZXdPYmpbbmV3S2V5XSA9IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogVHVybnMgZW1wdHkgYXJyYXlzL29iamVjdHMgdG8gdW5kZWZpbmVkIChhZnRlciBldmFsdWF0aW5nIHRva2VucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVFbXB0eShvOiBhbnkpOiBhbnkge1xuICBvID0gcmVzb2x2ZShvKTsgLy8gZmlyc3QgcmVzb2x2ZSB0b2tlbnMsIGluIGNhc2UgdGhleSBldmFsdWF0ZSB0byAndW5kZWZpbmVkJy5cblxuICAvLyB1bmRlZmluZWQvbnVsbFxuICBpZiAobyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG87XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvKSAmJiBvLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mKG8pID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIG87XG59XG4iXX0=
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBmb3IgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIEFXUyBhY2NvdW50IElEIGZvciB0aGlzIGVudmlyb25tZW50LlxuICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZXh0IHBhcmFtZXRlciBgZGVmYXVsdC1hY2NvdW50YCBpcyB1c2VkLlxuICAgICAqL1xuICAgIGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVdTIHJlZ2lvbiBmb3IgdGhpcyBlbnZpcm9ubWVudC5cbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY29udGV4dCBwYXJhbWV0ZXIgYGRlZmF1bHQtcmVnaW9uYCBpcyB1c2VkLlxuICAgICAqL1xuICAgIHJlZ2lvbj86IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBmb3IgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgZm9yIHRoaXMgZW52aXJvbm1lbnQuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZXh0IHBhcmFtZXRlciBgZGVmYXVsdC1hY2NvdW50YCBpcyB1c2VkLlxuICAgKi9cbiAgYWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gZm9yIHRoaXMgZW52aXJvbm1lbnQuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZXh0IHBhcmFtZXRlciBgZGVmYXVsdC1yZWdpb25gIGlzIHVzZWQuXG4gICAqL1xuICByZWdpb24/OiBzdHJpbmc7XG59XG4iXX0=

@@ -109,4 +109,4 @@ import { Construct } from './core/construct';

*
* @param props the property bag from which a property is required.
* @param name the name of the required property.
* @param props the property bag from which a property is required.
* @param name the name of the required property.
* @param typeName the name of the construct type that requires the property

@@ -127,11 +127,11 @@ *

*
* Properties not correct for 'FunctionProps'
* codeUri: not one of the possible types
* either: properties not correct for 'S3LocationProperty'
* bucket: required but missing
* key: required but missing
* version: required but missing
* or: '3' should be a 'string'
* Properties not correct for 'FunctionProps'
* codeUri: not one of the possible types
* either: properties not correct for 'S3LocationProperty'
* bucket: required but missing
* key: required but missing
* version: required but missing
* or: '3' should be a 'string'
*
*/
export declare function unionValidator(...validators: Validator[]): Validator;

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

const childMessages = this.results.errorTreeList();
return this.errorMessage + (childMessages.length ? `\n ${childMessages.replace(/\n/g, '\n ')}` : '');
return this.errorMessage + (childMessages.length ? `\n ${childMessages.replace(/\n/g, '\n ')}` : '');
}

@@ -310,4 +310,4 @@ /**

*
* @param props the property bag from which a property is required.
* @param name the name of the required property.
* @param props the property bag from which a property is required.
* @param name the name of the required property.
* @param typeName the name of the construct type that requires the property

@@ -334,9 +334,9 @@ *

*
* Properties not correct for 'FunctionProps'
* codeUri: not one of the possible types
* either: properties not correct for 'S3LocationProperty'
* bucket: required but missing
* key: required but missing
* version: required but missing
* or: '3' should be a 'string'
* Properties not correct for 'FunctionProps'
* codeUri: not one of the possible types
* either: properties not correct for 'S3LocationProperty'
* bucket: required but missing
* key: required but missing
* version: required but missing
* or: '3' should be a 'string'
*

@@ -376,2 +376,2 @@ */

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUVZLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBQzFDLFFBQUEsdUJBQXVCLEdBQVcsUUFBUSxDQUFDO0FBQzNDLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBQzFDLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBRXZEOzs7Ozs7R0FNRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLENBQVE7SUFDekMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNKLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBRUQsMkNBQTJDO0lBQzNDLE9BQU8sR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsSyxDQUFDO0FBUEQsb0RBT0M7QUFFRDs7R0FFRztBQUNILFNBQVMsR0FBRyxDQUFDLENBQVM7SUFDbEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1IsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsQ0FBTTtJQUN0QyxPQUFPO1FBQ0gsR0FBRyxFQUFF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RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBST1BFUlRZIE1BUFBFUlNcbi8vXG4vLyBUaGVzZSBhcmUgdXNlZCB3aGlsZSBjb252ZXJ0aW5nIGdlbmVyYXRlZCBjbGFzc2VzL3Byb3BlcnR5IGJhZ3MgdG8gQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkgb2JqZWN0c1xuLy9cbi8vIFdlIHVzZSBpZGVudGl0eSBtYXBwZXJzIGZvciB0aGUgcHJpbWl0aXZlIHR5cGVzLiBUaGVzZSBkb24ndCBkbyBhbnl0aGluZyBidXQgYXJlIHRoZXJlIHRvIG1ha2UgdGhlIGNvZGVcbi8vIGdlbmVyYXRpb24gd29yayBvdXQgbmljZWx5IChzbyB0aGUgY29kZSBnZW5lcmF0b3IgZG9lc24ndCBuZWVkIHRvIGVtaXQgZGlmZmVyZW50IGNvZGUgZm9yIHByaW1pdGl2ZVxuLy8gdnMuIGNvbXBsZXggdHlwZXMpLlxuZXhwb3J0IHR5cGUgTWFwcGVyID0gKHg6IGFueSkgPT4gYW55O1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4OiBhbnkpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvQ2xvdWRGb3JtYXRpb246IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Ub0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBvYmplY3RUb0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBudW1iZXJUb0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcblxuLyoqXG4gKiBUaGUgZGF0ZSBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgYXMgYW4gSVNPIGRhdGUgaW4gVVRDXG4gKlxuICogU29tZSB1c2FnZSBzaXRlcyByZXF1aXJlIGEgZGF0ZSwgc29tZSByZXF1aXJlIGEgdGltZXN0YW1wLiBXZSdsbFxuICogYWx3YXlzIG91dHB1dCBhIHRpbWVzdGFtcCBhbmQgaG9wZSB0aGUgcGFyc2VyIG9uIHRoZSBvdGhlciBlbmRcbiAqIGlzIHNtYXJ0IGVub3VnaCB0byBpZ25vcmUgdGhlIHRpbWUgcGFydC4uLiAoPylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0Nsb3VkRm9ybWF0aW9uKHg/OiBEYXRlKTogYW55IHtcbiAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgcmV0dXJuIGAke3guZ2V0VVRDRnVsbFllYXIoKX0tJHtwYWQoeC5nZXRVVENNb250aCgpICsgMSl9LSR7cGFkKHguZ2V0VVRDRGF0ZSgpKX1UJHtwYWQoeC5nZXRVVENIb3VycygpKX06JHtwYWQoeC5nZXRVVENNaW51dGVzKCkpfToke3BhZCh4LmdldFVUQ1NlY29uZHMoKSl9YDtcbn1cblxuLyoqXG4gKiBQYWQgYSBudW1iZXIgdG8gMiBkZWNpbWFsIHBsYWNlc1xuICovXG5mdW5jdGlvbiBwYWQoeDogbnVtYmVyKSB7XG4gICAgaWYgKHggPCAxMCkge1xuICAgICAgICByZXR1cm4gXCIwXCIgKyB4LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiB4LnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogVHVybiBhIHRhZyBvYmplY3QgaW50byB0aGUgcHJvcGVyIENsb3VkRm9ybWF0aW9uIHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdUb0Nsb3VkRm9ybWF0aW9uKHg6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgS2V5OiB4LmtleSxcbiAgICAgICAgVmFsdWU6IHgudmFsdWVcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdE1hcHBlcihlbGVtZW50TWFwcGVyOiBNYXBwZXIpOiBNYXBwZXIge1xuICAgIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgICAgIGlmICghY2FuSW5zcGVjdCh4KSkge8KgcmV0dXJuIHg7IH1cbiAgICAgICAgcmV0dXJuIHgubWFwKGVsZW1lbnRNYXBwZXIpO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoTWFwcGVyKGVsZW1lbnRNYXBwZXI6IE1hcHBlcik6IE1hcHBlciB7XG4gICAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7IHJldHVybiB4OyB9XG5cbiAgICAgICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh4KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldFtrZXldID0gZWxlbWVudE1hcHBlcih4W2tleV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pb24gbWFwcGVyXG4gKlxuICogVGFrZXMgYSBsaXN0IG9mIHZhbGlkYXRvcnMgYW5kIGEgbGlzdCBvZiBtYXBwZXJzLCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCBwYWlyd2lzZS5cbiAqXG4gKiBUaGUgbWFwcGVyIG9mIHRoZSBmaXJzdCBzdWNjZXNzZnVsIHZhbGlkYXRvciB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uTWFwcGVyKHZhbGlkYXRvcnM6IFZhbGlkYXRvcltdLCBtYXBwZXJzOiBNYXBwZXJbXSk6IE1hcHBlciB7XG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoICE9PSBtYXBwZXJzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBFcnJvcignTm90IHRoZSBzYW1lIGFtb3VudCBvZiB2YWxpZGF0b3JzIGFuZCBtYXBwZXJzIHBhc3NlZCB0byB1bmlvbk1hcHBlcigpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7IHJldHVybiB4OyB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yc1tpXSh4KS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGVyc1tpXSh4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3VsZCBub3QgYmUgcG9zc2libGUgYmVjYXVzZSB0aGUgdW5pb24gbXVzdCBoYXZlIHBhc3NlZCB2YWxpZGF0aW9uIGJlZm9yZSB0aGlzIGZ1bmN0aW9uXG4gICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkLCBidXQgY2F0Y2ggaXQgYW55d2F5LlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB2YWxpZGF0b3JzIG1hdGNoZWQgaW4gdGhlIHVuaW9uKCknKTtcbiAgICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWQUxJREFUT1JTXG4vL1xuLy8gVGhlc2UgYXJlIHVzZWQgd2hpbGUgY2hlY2tpbmcgdGhhdCBzdXBwbGllZCBwcm9wZXJ0eSBiYWdzIG1hdGNoIHRoZSBleHBlY3RlZCBzY2hlbWFcbi8vXG4vLyBXZSBoYXZlIGEgY291cGxlIG9mIGRhdGF0eXBlcyB0aGF0IG1vZGVsIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBjb2xsZWN0aW9ucyBvZiB2YWxpZGF0aW9uXG4vLyBlcnJvcnMgKHRvZ2V0aGVyIGZvcm1pbmcgYSB0cmVlIG9mIGVycm9ycyBzbyB0aGF0IHdlIGNhbiB0cmFjZSB2YWxpZGF0aW9uIGVycm9ycyB0aHJvdWdoXG4vLyBhbiBvYmplY3QgZ3JhcGgpLCBhbmQgdmFsaWRhdG9ycy5cbi8vXG4vLyBWYWxpZGF0b3JzIGFyZSBzaW1wbHkgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIHZhbHVlIGFuZCByZXR1cm4gYSB2YWxpZGF0aW9uIHJlc3VsdHMuIFRoZW5cbi8vIHdlIGhhdmUgc29tZSBjb21iaW5hdG9ycyB0byB0dXJuIHByaW1pdGl2ZSB2YWxpZGF0b3JzIGludG8gbW9yZSBjb21wbGV4IHZhbGlkYXRvcnMuXG4vL1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIHZhbGlkYXRpb24gcmVzdWx0c1xuICpcbiAqIE1vZGVscyBhIHRyZWUgb2YgdmFsaWRhdGlvbiBlcnJvcnMgc28gdGhhdCB3ZSBoYXZlIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGVcbiAqIGFib3V0IHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnLCByZWFkb25seSByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0cyA9IG5ldyBWYWxpZGF0aW9uUmVzdWx0cygpKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1N1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lcnJvck1lc3NhZ2UgJiYgdGhpcy5yZXN1bHRzLmlzU3VjY2VzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUdXJuIGEgZmFpbGVkIHZhbGlkYXRpb24gaW50byBhbiBleGNlcHRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNzZXJ0U3VjY2VzcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yVHJlZSgpO1xuICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGxldHRlciB3aWxsIGJlIGxvd2VyY2FzZSwgc28gdXBwZXJjYXNlIGl0IGZvciBhIG5pY2VyIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbWVzc2FnZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlbmRlcmluZyBvZiB0aGUgdHJlZSBvZiB2YWxpZGF0aW9uIGZhaWx1cmVzXG4gICAgICovXG4gICAgcHVibGljIGVycm9yVHJlZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjaGlsZE1lc3NhZ2VzID0gdGhpcy5yZXN1bHRzLmVycm9yVHJlZUxpc3QoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlICsgKGNoaWxkTWVzc2FnZXMubGVuZ3RoID8gYFxcbiAgICAke2NoaWxkTWVzc2FnZXMucmVwbGFjZSgvXFxuL2csICdcXG4gICAgJyl9YCA6ICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwIHRoaXMgcmVzdWx0IHdpdGggYW4gZXJyb3IgbWVzc2FnZSwgaWYgaXQgY29uY2VybnMgYW4gZXJyb3JcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJlZml4KG1lc3NhZ2U6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgICAgICBpZiAodGhpcy5pc1N1Y2Nlc3MpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uUmVzdWx0KGAke21lc3NhZ2V9OiAke3RoaXMuZXJyb3JNZXNzYWdlfWAsIHRoaXMucmVzdWx0cyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25SZXN1bHRzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdID0gW10pIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29sbGVjdChyZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQpIHtcbiAgICAgICAgLy8gT25seSBjb2xsZWN0IGZhaWx1cmVzXG4gICAgICAgIGlmICghcmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzLmV2ZXJ5KHggPT4geC5pc1N1Y2Nlc3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvclRyZWVMaXN0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHMubWFwKGNoaWxkID0+IGNoaWxkLmVycm9yVHJlZSgpKS5qb2luKCdcXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwIHVwIGFsbCB2YWxpZGF0aW9uIHJlc3VsdHMgaW50byBhIHNpbmdsZSB0cmVlIG5vZGVcbiAgICAgKlxuICAgICAqIElmIHRoZXJlIGFyZSBmYWlsdXJlcyBpbiB0aGUgY29sbGVjdGlvbiwgYWRkIGEgbWVzc2FnZSwgb3RoZXJ3aXNlXG4gICAgICogcmV0dXJuIGEgc3VjY2Vzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JhcChtZXNzYWdlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdWNjZXNzKSB7wqByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTOyB9XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChtZXNzYWdlLCB0aGlzKTtcbiAgICB9XG59XG5cbi8vIFNpbmdsZXRvbiBvYmplY3QgdG8gc2F2ZSBvbiBhbGxvY2F0aW9uc1xuZXhwb3J0IGNvbnN0IFZBTElEQVRJT05fU1VDQ0VTUyA9IG5ldyBWYWxpZGF0aW9uUmVzdWx0KCk7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRvciA9ICh4OiBhbnkpID0+IFZhbGlkYXRpb25SZXN1bHQ7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhpcyBvYmplY3QgY2FuIGJlIHZhbGlkYXRlZCBhdCBhbGxcbiAqXG4gKiBUcnVlIHVubGVzcyBpdCdzIHVuZGVmaW5lZCBvciBhIENsb3VkRm9ybWF0aW9uIGludHJpbnNpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuSW5zcGVjdCh4OiBhbnkpIHtcbiAgICAvLyBOb3RlOiB1c2luZyB3ZWFrIGVxdWFsaXR5IG9uIHB1cnBvc2UsIHdlIGFsc28gd2FudCB0byBjYXRjaCB1bmRlZmluZWRcbiAgICByZXR1cm4gKHggIT0gbnVsbCAmJiAhaXNDbG91ZEZvcm1hdGlvbkludHJpbnNpYyh4KSk7XG59XG5cbi8vIENsb3VkRm9ybWF0aW9uIHZhbGlkYXRvcnMgZm9yIHByaW1pdGl2ZSB0eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKHg6IGFueSk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmIChjYW5JbnNwZWN0KHgpICYmIHR5cGVvZiB4ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYCR7SlNPTi5zdHJpbmdpZnkoeCl9IHNob3VsZCBiZSBhIHN0cmluZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIoeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKGNhbkluc3BlY3QoeCkgJiYgdHlwZW9mIHggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHtKU09OLnN0cmluZ2lmeSh4KX0gc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgfVxuICAgIHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4oeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKGNhbkluc3BlY3QoeCkgJiYgdHlwZW9mIHggIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYCR7SlNPTi5zdHJpbmdpZnkoeCl9IHNob3VsZCBiZSBhIGJvb2xlYW5gKTtcbiAgICB9XG4gICAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh4OiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoY2FuSW5zcGVjdCh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYCR7SlNPTi5zdHJpbmdpZnkoeCl9IHNob3VsZCBiZSBhIERhdGVgKTtcbiAgICB9XG5cbiAgICBpZiAoeCAhPT0gdW5kZWZpbmVkICYmIGlzTmFOKHguZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoJ2dvdCBhbiB1bnBhcnNlYWJsZSBEYXRlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KHg6IGFueSk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmIChjYW5JbnNwZWN0KHgpICYmIHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYCR7SlNPTi5zdHJpbmdpZnkoeCl9IHNob3VsZCBiZSBhbiAnb2JqZWN0J2ApO1xuICAgIH1cbiAgICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYWcoeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7wqByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTOyB9XG5cbiAgICBpZiAoeC5rZXkgPT0gbnVsbCB8fCB4LnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uUmVzdWx0KGAke0pTT04uc3RyaW5naWZ5KHgpfSBzaG91bGQgaGF2ZSBhICdrZXknIGFuZCBhICd2YWx1ZScgcHJvcGVydHlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGxpc3QgdmFsaWRhdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBlbGVtZW50IHZhbGlkYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFZhbGlkYXRvcihlbGVtZW50VmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3Ige1xuICAgIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgICAgIGlmICghY2FuSW5zcGVjdCh4KSkge8KgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUzsgfVxuXG4gICAgICAgIGlmICgheC5mb3JFYWNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYCR7SlNPTi5zdHJpbmdpZnkoeCl9IHNob3VsZCBiZSBhIGxpc3RgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHhbaV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlbGVtZW50VmFsaWRhdG9yKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzKSB7IHJldHVybiByZXN1bHQucHJlZml4KGBlbGVtZW50ICR7aX1gKTsgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbiAgICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGhhc2ggdmFsaWRhdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBlbGVtZW50IHZhbGlkYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaFZhbGlkYXRvcihlbGVtZW50VmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3Ige1xuICAgIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgICAgIGlmICghY2FuSW5zcGVjdCh4KSkgeyByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTOyB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoeCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVsZW1lbnRWYWxpZGF0b3IoeFtrZXldKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzU3VjY2VzcykgeyByZXR1cm4gcmVzdWx0LnByZWZpeChgZWxlbWVudCAnJHtrZXl9J2ApOyB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xuICAgIH07XG59XG5cbi8qKlxuICogRGVjb3JhdGUgYSB2YWxpZGF0b3Igd2l0aCBhIG1lc3NhZ2UgY2xhcmlmeWluZyB0aGUgcHJvcGVydHkgdGhlIGZhaWx1cmUgaXMgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IocHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3Ige1xuICAgIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IoeCkucHJlZml4KHByb3BOYW1lKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIHZhbGlkYXRvciB0aGF0IHdpbGwgZmFpbCBpZiB0aGUgcGFzc2VkIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50XG4gKlxuICogRG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgcHJvcGVydHkgYWN0dWFsbHkgbm90IGJlaW5nIHByZXNlbnQsIHZzIGJlaW5nIHByZXNlbnQgYnV0ICdudWxsJ1xuICogb3IgJ3VuZGVmaW5lZCcgKGNvdXJ0ZXN5IG9mIEphdmFTY3JpcHQpLCB3aGljaCBpcyBnZW5lcmFsbHkgdGhlIGJlaGF2aW9yIHRoYXQgd2Ugd2FudC5cbiAqXG4gKiBFbXB0eSBzdHJpbmdzIGFyZSBjb25zaWRlcmVkIFwicHJlc2VudFwiLS1kb24ndCBrbm93IGlmIHRoaXMgYWdyZWVzIHdpdGggaG93IENsb3VkRm9ybWF0aW9uIGxvb2tzXG4gKiBhdCB0aGUgd29ybGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZFZhbGlkYXRvcih4OiBhbnkpIHtcbiAgICBpZiAoeCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgcmVxdWlyZWQgYnV0IG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbn1cblxuLyoqXG4gKiBSZXF1aXJlIGEgcHJvcGVydHkgZnJvbSBhIHByb3BlcnR5IGJhZy5cbiAqXG4gKiBAcGFyYW0gcHJvcHMgICAgdGhlIHByb3BlcnR5IGJhZyBmcm9tIHdoaWNoIGEgcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gKiBAcGFyYW0gbmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnR5LlxuICogQHBhcmFtIHR5cGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3QgdHlwZSB0aGF0IHJlcXVpcmVzIHRoZSBwcm9wZXJ0eVxuICpcbiAqIEByZXR1cm5zIHRoZSB2YWx1ZSBvZiBgYHByb3BzW25hbWVdYGBcbiAqXG4gKiBAdGhyb3dzIGlmIHRoZSBwcm9wZXJ0eSBgYG5hbWVgYCBpcyBub3QgcHJlc2VudCBpbiBgYHByb3BzYGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUHJvcGVydHkocHJvcHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCBuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IENvbnN0cnVjdCk6IGFueSB7XG4gICAgaWYgKCEobmFtZSBpbiBwcm9wcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2NvbnRleHQudG9TdHJpbmcoKX0gaXMgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eTogJHtuYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgIC8vIFBvc3NpYmx5IGFkZCB0eXBlLWNoZWNraW5nIGhlcmUuLi5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIGFueSBvZiB0aGUgZ2l2ZW4gdmFsaWRhdG9ycyBtYXRjaGVzXG4gKlxuICogV2UgYWRkIGVpdGhlci9vciB3b3JkcyB0byB0aGUgZnJvbnQgb2YgdGhlIGVycm9yIG1lc2FnZXMgc28gdGhhdCB0aGV5IHJlYWRcbiAqIG1vcmUgbmljZWx5LiBFeGFtcGxlOlxuICpcbiAqICAgICBQcm9wZXJ0aWVzIG5vdCBjb3JyZWN0IGZvciAnRnVuY3Rpb25Qcm9wcydcbiAqICAgICAgICAgY29kZVVyaTogbm90IG9uZSBvZiB0aGUgcG9zc2libGUgdHlwZXNcbiAqICAgICAgICAgICAgIGVpdGhlcjogcHJvcGVydGllcyBub3QgY29ycmVjdCBmb3IgJ1MzTG9jYXRpb25Qcm9wZXJ0eSdcbiAqICAgICAgICAgICAgICAgICBidWNrZXQ6IHJlcXVpcmVkIGJ1dCBtaXNzaW5nXG4gKiAgICAgICAgICAgICAgICAga2V5OiByZXF1aXJlZCBidXQgbWlzc2luZ1xuICogICAgICAgICAgICAgICAgIHZlcnNpb246IHJlcXVpcmVkIGJ1dCBtaXNzaW5nXG4gKiAgICAgICAgICAgICBvcjogJzMnIHNob3VsZCBiZSBhICdzdHJpbmcnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pb25WYWxpZGF0b3IoLi4udmFsaWRhdG9yczogVmFsaWRhdG9yW10pOiBWYWxpZGF0b3Ige1xuICAgIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgVmFsaWRhdGlvblJlc3VsdHMoKTtcbiAgICAgICAgbGV0IGVpdGhlck9yID0gJ2VpdGhlcic7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHsgcmV0dXJuIHJlc3VsdDsgfVxuICAgICAgICAgICAgcmVzdWx0cy5jb2xsZWN0KHJlc3VsdC5wcmVmaXgoZWl0aGVyT3IpKTtcbiAgICAgICAgICAgIGVpdGhlck9yID0gJ29yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cy53cmFwKCdub3Qgb25lIG9mIHRoZSBwb3NzaWJsZSB0eXBlcycpO1xuICAgIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGluZGljYXRlZCB2YWx1ZSByZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljLlxuICpcbiAqIENsb3VkRm9ybWF0aW9uIGluc3RyaW5zaWNzIGFyZSBtb2RlbGVkIGFzIG9iamVjdHMgd2l0aCBhIHNpbmdsZSBrZXksIHdoaWNoXG4gKiBsb29rIGxpa2U6IHsgXCJGbjo6R2V0QXR0XCI6IFsuLi5dIH0gb3Igc2ltaWxhci5cbiAqL1xuZnVuY3Rpb24gaXNDbG91ZEZvcm1hdGlvbkludHJpbnNpYyh4OiBhbnkpIHtcbiAgICBpZiAoISh0eXBlb2YgeCA9PT0gJ29iamVjdCcpKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh4KTtcbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICByZXR1cm4ga2V5c1swXSA9PT0gJ1JlZicgfHwga2V5c1swXS5zdWJzdHIoMCwgNCkgPT09ICdGbjo6Jztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3RCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVZLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBQzFDLFFBQUEsdUJBQXVCLEdBQVcsUUFBUSxDQUFDO0FBQzNDLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBQzFDLFFBQUEsc0JBQXNCLEdBQVcsUUFBUSxDQUFDO0FBRXZEOzs7Ozs7R0FNRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLENBQVE7SUFDM0MsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsMkNBQTJDO0lBQzNDLE9BQU8sR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoSyxDQUFDO0FBUEQsb0RBT0M7QUFFRDs7R0FFRztBQUNILFNBQVMsR0FBRyxDQUFDLENBQVM7SUFDcEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1YsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsQ0FBTTtJQUN4QyxPQUFPO1FBQ0wsR0FBRyxFQUFF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O0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuL2NvcmUvY29uc3RydWN0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJPUEVSVFkgTUFQUEVSU1xuLy9cbi8vIFRoZXNlIGFyZSB1c2VkIHdoaWxlIGNvbnZlcnRpbmcgZ2VuZXJhdGVkIGNsYXNzZXMvcHJvcGVydHkgYmFncyB0byBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBvYmplY3RzXG4vL1xuLy8gV2UgdXNlIGlkZW50aXR5IG1hcHBlcnMgZm9yIHRoZSBwcmltaXRpdmUgdHlwZXMuIFRoZXNlIGRvbid0IGRvIGFueXRoaW5nIGJ1dCBhcmUgdGhlcmUgdG8gbWFrZSB0aGUgY29kZVxuLy8gZ2VuZXJhdGlvbiB3b3JrIG91dCBuaWNlbHkgKHNvIHRoZSBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IG5lZWQgdG8gZW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgcHJpbWl0aXZlXG4vLyB2cy4gY29tcGxleCB0eXBlcykuXG5leHBvcnQgdHlwZSBNYXBwZXIgPSAoeDogYW55KSA9PiBhbnk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHg6IGFueSkge1xuICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvQ2xvdWRGb3JtYXRpb246IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Ub0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBvYmplY3RUb0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBudW1iZXJUb0Nsb3VkRm9ybWF0aW9uOiBNYXBwZXIgPSBpZGVudGl0eTtcblxuLyoqXG4gKiBUaGUgZGF0ZSBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgYXMgYW4gSVNPIGRhdGUgaW4gVVRDXG4gKlxuICogU29tZSB1c2FnZSBzaXRlcyByZXF1aXJlIGEgZGF0ZSwgc29tZSByZXF1aXJlIGEgdGltZXN0YW1wLiBXZSdsbFxuICogYWx3YXlzIG91dHB1dCBhIHRpbWVzdGFtcCBhbmQgaG9wZSB0aGUgcGFyc2VyIG9uIHRoZSBvdGhlciBlbmRcbiAqIGlzIHNtYXJ0IGVub3VnaCB0byBpZ25vcmUgdGhlIHRpbWUgcGFydC4uLiAoPylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0Nsb3VkRm9ybWF0aW9uKHg/OiBEYXRlKTogYW55IHtcbiAgaWYgKCF4KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgcmV0dXJuIGAke3guZ2V0VVRDRnVsbFllYXIoKX0tJHtwYWQoeC5nZXRVVENNb250aCgpICsgMSl9LSR7cGFkKHguZ2V0VVRDRGF0ZSgpKX1UJHtwYWQoeC5nZXRVVENIb3VycygpKX06JHtwYWQoeC5nZXRVVENNaW51dGVzKCkpfToke3BhZCh4LmdldFVUQ1NlY29uZHMoKSl9YDtcbn1cblxuLyoqXG4gKiBQYWQgYSBudW1iZXIgdG8gMiBkZWNpbWFsIHBsYWNlc1xuICovXG5mdW5jdGlvbiBwYWQoeDogbnVtYmVyKSB7XG4gIGlmICh4IDwgMTApIHtcbiAgICByZXR1cm4gXCIwXCIgKyB4LnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIHgudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUdXJuIGEgdGFnIG9iamVjdCBpbnRvIHRoZSBwcm9wZXIgQ2xvdWRGb3JtYXRpb24gcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ1RvQ2xvdWRGb3JtYXRpb24oeDogYW55KTogYW55IHtcbiAgcmV0dXJuIHtcbiAgICBLZXk6IHgua2V5LFxuICAgIFZhbHVlOiB4LnZhbHVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0TWFwcGVyKGVsZW1lbnRNYXBwZXI6IE1hcHBlcik6IE1hcHBlciB7XG4gIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7wqByZXR1cm4geDsgfVxuICAgIHJldHVybiB4Lm1hcChlbGVtZW50TWFwcGVyKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNYXBwZXIoZWxlbWVudE1hcHBlcjogTWFwcGVyKTogTWFwcGVyIHtcbiAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICBpZiAoIWNhbkluc3BlY3QoeCkpIHsgcmV0dXJuIHg7IH1cblxuICAgIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgICBPYmplY3Qua2V5cyh4KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHJldFtrZXldID0gZWxlbWVudE1hcHBlcih4W2tleV0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSB1bmlvbiBtYXBwZXJcbiAqXG4gKiBUYWtlcyBhIGxpc3Qgb2YgdmFsaWRhdG9ycyBhbmQgYSBsaXN0IG9mIG1hcHBlcnMsIHdoaWNoIHNob3VsZCBjb3JyZXNwb25kIHBhaXJ3aXNlLlxuICpcbiAqIFRoZSBtYXBwZXIgb2YgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgdmFsaWRhdG9yIHdpbGwgYmUgY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pb25NYXBwZXIodmFsaWRhdG9yczogVmFsaWRhdG9yW10sIG1hcHBlcnM6IE1hcHBlcltdKTogTWFwcGVyIHtcbiAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoICE9PSBtYXBwZXJzLmxlbmd0aCkge1xuICAgIHRocm93IEVycm9yKCdOb3QgdGhlIHNhbWUgYW1vdW50IG9mIHZhbGlkYXRvcnMgYW5kIG1hcHBlcnMgcGFzc2VkIHRvIHVuaW9uTWFwcGVyKCknKTtcbiAgfVxuXG4gIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7IHJldHVybiB4OyB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxpZGF0b3JzW2ldKHgpLmlzU3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gbWFwcGVyc1tpXSh4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGJlIHBvc3NpYmxlIGJlY2F1c2UgdGhlIHVuaW9uIG11c3QgaGF2ZSBwYXNzZWQgdmFsaWRhdGlvbiBiZWZvcmUgdGhpcyBmdW5jdGlvblxuICAgIC8vIHdpbGwgYmUgY2FsbGVkLCBidXQgY2F0Y2ggaXQgYW55d2F5LlxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHZhbGlkYXRvcnMgbWF0Y2hlZCBpbiB0aGUgdW5pb24oKScpO1xuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWQUxJREFUT1JTXG4vL1xuLy8gVGhlc2UgYXJlIHVzZWQgd2hpbGUgY2hlY2tpbmcgdGhhdCBzdXBwbGllZCBwcm9wZXJ0eSBiYWdzIG1hdGNoIHRoZSBleHBlY3RlZCBzY2hlbWFcbi8vXG4vLyBXZSBoYXZlIGEgY291cGxlIG9mIGRhdGF0eXBlcyB0aGF0IG1vZGVsIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBjb2xsZWN0aW9ucyBvZiB2YWxpZGF0aW9uXG4vLyBlcnJvcnMgKHRvZ2V0aGVyIGZvcm1pbmcgYSB0cmVlIG9mIGVycm9ycyBzbyB0aGF0IHdlIGNhbiB0cmFjZSB2YWxpZGF0aW9uIGVycm9ycyB0aHJvdWdoXG4vLyBhbiBvYmplY3QgZ3JhcGgpLCBhbmQgdmFsaWRhdG9ycy5cbi8vXG4vLyBWYWxpZGF0b3JzIGFyZSBzaW1wbHkgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIHZhbHVlIGFuZCByZXR1cm4gYSB2YWxpZGF0aW9uIHJlc3VsdHMuIFRoZW5cbi8vIHdlIGhhdmUgc29tZSBjb21iaW5hdG9ycyB0byB0dXJuIHByaW1pdGl2ZSB2YWxpZGF0b3JzIGludG8gbW9yZSBjb21wbGV4IHZhbGlkYXRvcnMuXG4vL1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIHZhbGlkYXRpb24gcmVzdWx0c1xuICpcbiAqIE1vZGVscyBhIHRyZWUgb2YgdmFsaWRhdGlvbiBlcnJvcnMgc28gdGhhdCB3ZSBoYXZlIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGVcbiAqIGFib3V0IHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJywgcmVhZG9ubHkgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdHMgPSBuZXcgVmFsaWRhdGlvblJlc3VsdHMoKSkge1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVycm9yTWVzc2FnZSAmJiB0aGlzLnJlc3VsdHMuaXNTdWNjZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFR1cm4gYSBmYWlsZWQgdmFsaWRhdGlvbiBpbnRvIGFuIGV4Y2VwdGlvblxuICAgKi9cbiAgcHVibGljIGFzc2VydFN1Y2Nlc3MoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VjY2Vzcykge1xuICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yVHJlZSgpO1xuICAgICAgLy8gVGhlIGZpcnN0IGxldHRlciB3aWxsIGJlIGxvd2VyY2FzZSwgc28gdXBwZXJjYXNlIGl0IGZvciBhIG5pY2VyIGVycm9yIG1lc3NhZ2VcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbWVzc2FnZS5zdWJzdHIoMSk7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVuZGVyaW5nIG9mIHRoZSB0cmVlIG9mIHZhbGlkYXRpb24gZmFpbHVyZXNcbiAgICovXG4gIHB1YmxpYyBlcnJvclRyZWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjaGlsZE1lc3NhZ2VzID0gdGhpcy5yZXN1bHRzLmVycm9yVHJlZUxpc3QoKTtcbiAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgKyAoY2hpbGRNZXNzYWdlcy5sZW5ndGggPyBgXFxuICAke2NoaWxkTWVzc2FnZXMucmVwbGFjZSgvXFxuL2csICdcXG4gICcpfWAgOiAnJyk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB0aGlzIHJlc3VsdCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UsIGlmIGl0IGNvbmNlcm5zIGFuIGVycm9yXG4gICAqL1xuICBwdWJsaWMgcHJlZml4KG1lc3NhZ2U6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICh0aGlzLmlzU3VjY2VzcykgeyByZXR1cm4gdGhpczsgfVxuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHttZXNzYWdlfTogJHt0aGlzLmVycm9yTWVzc2FnZX1gLCB0aGlzLnJlc3VsdHMpO1xuICB9XG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHZhbGlkYXRpb24gcmVzdWx0c1xuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblJlc3VsdHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdID0gW10pIHtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsZWN0KHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdCkge1xuICAgIC8vIE9ubHkgY29sbGVjdCBmYWlsdXJlc1xuICAgIGlmICghcmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgdGhpcy5yZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU3VjY2VzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzLmV2ZXJ5KHggPT4geC5pc1N1Y2Nlc3MpO1xuICB9XG5cbiAgcHVibGljIGVycm9yVHJlZUxpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzLm1hcChjaGlsZCA9PiBjaGlsZC5lcnJvclRyZWUoKSkuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB1cCBhbGwgdmFsaWRhdGlvbiByZXN1bHRzIGludG8gYSBzaW5nbGUgdHJlZSBub2RlXG4gICAqXG4gICAqIElmIHRoZXJlIGFyZSBmYWlsdXJlcyBpbiB0aGUgY29sbGVjdGlvbiwgYWRkIGEgbWVzc2FnZSwgb3RoZXJ3aXNlXG4gICAqIHJldHVybiBhIHN1Y2Nlc3MuXG4gICAqL1xuICBwdWJsaWMgd3JhcChtZXNzYWdlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAodGhpcy5pc1N1Y2Nlc3MpIHvCoHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7IH1cbiAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQobWVzc2FnZSwgdGhpcyk7XG4gIH1cbn1cblxuLy8gU2luZ2xldG9uIG9iamVjdCB0byBzYXZlIG9uIGFsbG9jYXRpb25zXG5leHBvcnQgY29uc3QgVkFMSURBVElPTl9TVUNDRVNTID0gbmV3IFZhbGlkYXRpb25SZXN1bHQoKTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKHg6IGFueSkgPT4gVmFsaWRhdGlvblJlc3VsdDtcblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGlzIG9iamVjdCBjYW4gYmUgdmFsaWRhdGVkIGF0IGFsbFxuICpcbiAqIFRydWUgdW5sZXNzIGl0J3MgdW5kZWZpbmVkIG9yIGEgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5JbnNwZWN0KHg6IGFueSkge1xuICAvLyBOb3RlOiB1c2luZyB3ZWFrIGVxdWFsaXR5IG9uIHB1cnBvc2UsIHdlIGFsc28gd2FudCB0byBjYXRjaCB1bmRlZmluZWRcbiAgcmV0dXJuICh4ICE9IG51bGwgJiYgIWlzQ2xvdWRGb3JtYXRpb25JbnRyaW5zaWMoeCkpO1xufVxuXG4vLyBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0b3JzIGZvciBwcmltaXRpdmUgdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh4OiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaWYgKGNhbkluc3BlY3QoeCkgJiYgdHlwZW9mIHggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uUmVzdWx0KGAke0pTT04uc3RyaW5naWZ5KHgpfSBzaG91bGQgYmUgYSBzdHJpbmdgKTtcbiAgfVxuICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIoeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlmIChjYW5JbnNwZWN0KHgpICYmIHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHtKU09OLnN0cmluZ2lmeSh4KX0gc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih4OiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaWYgKGNhbkluc3BlY3QoeCkgJiYgdHlwZW9mIHggIT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHtKU09OLnN0cmluZ2lmeSh4KX0gc2hvdWxkIGJlIGEgYm9vbGVhbmApO1xuICB9XG4gIHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURhdGUoeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlmIChjYW5JbnNwZWN0KHgpICYmICEoeCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uUmVzdWx0KGAke0pTT04uc3RyaW5naWZ5KHgpfSBzaG91bGQgYmUgYSBEYXRlYCk7XG4gIH1cblxuICBpZiAoeCAhPT0gdW5kZWZpbmVkICYmIGlzTmFOKHguZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdCgnZ290IGFuIHVucGFyc2VhYmxlIERhdGUnKTtcbiAgfVxuXG4gIHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh4OiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaWYgKGNhbkluc3BlY3QoeCkgJiYgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uUmVzdWx0KGAke0pTT04uc3RyaW5naWZ5KHgpfSBzaG91bGQgYmUgYW4gJ29iamVjdCdgKTtcbiAgfVxuICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYWcoeDogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlmICghY2FuSW5zcGVjdCh4KSkge8KgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUzsgfVxuXG4gIGlmICh4LmtleSA9PSBudWxsIHx8IHgudmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHtKU09OLnN0cmluZ2lmeSh4KX0gc2hvdWxkIGhhdmUgYSAna2V5JyBhbmQgYSAndmFsdWUnIHByb3BlcnR5YCk7XG4gIH1cblxuICByZXR1cm4gVkFMSURBVElPTl9TVUNDRVNTO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGxpc3QgdmFsaWRhdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBlbGVtZW50IHZhbGlkYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFZhbGlkYXRvcihlbGVtZW50VmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3Ige1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIGlmICghY2FuSW5zcGVjdCh4KSkge8KgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUzsgfVxuXG4gICAgaWYgKCF4LmZvckVhY2gpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvblJlc3VsdChgJHtKU09OLnN0cmluZ2lmeSh4KX0gc2hvdWxkIGJlIGEgbGlzdGApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHhbaV07XG4gICAgICBjb25zdCByZXN1bHQgPSBlbGVtZW50VmFsaWRhdG9yKGVsZW1lbnQpO1xuICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzKSB7IHJldHVybiByZXN1bHQucHJlZml4KGBlbGVtZW50ICR7aX1gKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgaGFzaCB2YWxpZGF0b3IgYmFzZWQgb24gdGhlIGdpdmVuIGVsZW1lbnQgdmFsaWRhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoVmFsaWRhdG9yKGVsZW1lbnRWYWxpZGF0b3I6IFZhbGlkYXRvcik6IFZhbGlkYXRvciB7XG4gIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7IHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7IH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHgpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBlbGVtZW50VmFsaWRhdG9yKHhba2V5XSk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1N1Y2Nlc3MpIHsgcmV0dXJuIHJlc3VsdC5wcmVmaXgoYGVsZW1lbnQgJyR7a2V5fSdgKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBWQUxJREFUSU9OX1NVQ0NFU1M7XG4gIH07XG59XG5cbi8qKlxuICogRGVjb3JhdGUgYSB2YWxpZGF0b3Igd2l0aCBhIG1lc3NhZ2UgY2xhcmlmeWluZyB0aGUgcHJvcGVydHkgdGhlIGZhaWx1cmUgaXMgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IocHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3Ige1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIHJldHVybiB2YWxpZGF0b3IoeCkucHJlZml4KHByb3BOYW1lKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSB2YWxpZGF0b3IgdGhhdCB3aWxsIGZhaWwgaWYgdGhlIHBhc3NlZCBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudFxuICpcbiAqIERvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHByb3BlcnR5IGFjdHVhbGx5IG5vdCBiZWluZyBwcmVzZW50LCB2cyBiZWluZyBwcmVzZW50IGJ1dCAnbnVsbCdcbiAqIG9yICd1bmRlZmluZWQnIChjb3VydGVzeSBvZiBKYXZhU2NyaXB0KSwgd2hpY2ggaXMgZ2VuZXJhbGx5IHRoZSBiZWhhdmlvciB0aGF0IHdlIHdhbnQuXG4gKlxuICogRW1wdHkgc3RyaW5ncyBhcmUgY29uc2lkZXJlZCBcInByZXNlbnRcIi0tZG9uJ3Qga25vdyBpZiB0aGlzIGFncmVlcyB3aXRoIGhvdyBDbG91ZEZvcm1hdGlvbiBsb29rc1xuICogYXQgdGhlIHdvcmxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IoeDogYW55KSB7XG4gIGlmICh4ID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25SZXN1bHQoYHJlcXVpcmVkIGJ1dCBtaXNzaW5nYCk7XG4gIH1cbiAgcmV0dXJuIFZBTElEQVRJT05fU1VDQ0VTUztcbn1cblxuLyoqXG4gKiBSZXF1aXJlIGEgcHJvcGVydHkgZnJvbSBhIHByb3BlcnR5IGJhZy5cbiAqXG4gKiBAcGFyYW0gcHJvcHMgIHRoZSBwcm9wZXJ0eSBiYWcgZnJvbSB3aGljaCBhIHByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICogQHBhcmFtIG5hbWUgICB0aGUgbmFtZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydHkuXG4gKiBAcGFyYW0gdHlwZU5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cnVjdCB0eXBlIHRoYXQgcmVxdWlyZXMgdGhlIHByb3BlcnR5XG4gKlxuICogQHJldHVybnMgdGhlIHZhbHVlIG9mIGBgcHJvcHNbbmFtZV1gYFxuICpcbiAqIEB0aHJvd3MgaWYgdGhlIHByb3BlcnR5IGBgbmFtZWBgIGlzIG5vdCBwcmVzZW50IGluIGBgcHJvcHNgYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVQcm9wZXJ0eShwcm9wczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIG5hbWU6IHN0cmluZywgY29udGV4dDogQ29uc3RydWN0KTogYW55IHtcbiAgaWYgKCEobmFtZSBpbiBwcm9wcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29udGV4dC50b1N0cmluZygpfSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiAke25hbWV9YCk7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBwcm9wc1tuYW1lXTtcbiAgLy8gUG9zc2libHkgYWRkIHR5cGUtY2hlY2tpbmcgaGVyZS4uLlxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIGFueSBvZiB0aGUgZ2l2ZW4gdmFsaWRhdG9ycyBtYXRjaGVzXG4gKlxuICogV2UgYWRkIGVpdGhlci9vciB3b3JkcyB0byB0aGUgZnJvbnQgb2YgdGhlIGVycm9yIG1lc2FnZXMgc28gdGhhdCB0aGV5IHJlYWRcbiAqIG1vcmUgbmljZWx5LiBFeGFtcGxlOlxuICpcbiAqICAgUHJvcGVydGllcyBub3QgY29ycmVjdCBmb3IgJ0Z1bmN0aW9uUHJvcHMnXG4gKiAgICAgY29kZVVyaTogbm90IG9uZSBvZiB0aGUgcG9zc2libGUgdHlwZXNcbiAqICAgICAgIGVpdGhlcjogcHJvcGVydGllcyBub3QgY29ycmVjdCBmb3IgJ1MzTG9jYXRpb25Qcm9wZXJ0eSdcbiAqICAgICAgICAgYnVja2V0OiByZXF1aXJlZCBidXQgbWlzc2luZ1xuICogICAgICAgICBrZXk6IHJlcXVpcmVkIGJ1dCBtaXNzaW5nXG4gKiAgICAgICAgIHZlcnNpb246IHJlcXVpcmVkIGJ1dCBtaXNzaW5nXG4gKiAgICAgICBvcjogJzMnIHNob3VsZCBiZSBhICdzdHJpbmcnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pb25WYWxpZGF0b3IoLi4udmFsaWRhdG9yczogVmFsaWRhdG9yW10pOiBWYWxpZGF0b3Ige1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgVmFsaWRhdGlvblJlc3VsdHMoKTtcbiAgICBsZXQgZWl0aGVyT3IgPSAnZWl0aGVyJztcblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvcih4KTtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7IHJldHVybiByZXN1bHQ7IH1cbiAgICAgIHJlc3VsdHMuY29sbGVjdChyZXN1bHQucHJlZml4KGVpdGhlck9yKSk7XG4gICAgICBlaXRoZXJPciA9ICdvcic7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzLndyYXAoJ25vdCBvbmUgb2YgdGhlIHBvc3NpYmxlIHR5cGVzJyk7XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGluZGljYXRlZCB2YWx1ZSByZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljLlxuICpcbiAqIENsb3VkRm9ybWF0aW9uIGluc3RyaW5zaWNzIGFyZSBtb2RlbGVkIGFzIG9iamVjdHMgd2l0aCBhIHNpbmdsZSBrZXksIHdoaWNoXG4gKiBsb29rIGxpa2U6IHsgXCJGbjo6R2V0QXR0XCI6IFsuLi5dIH0gb3Igc2ltaWxhci5cbiAqL1xuZnVuY3Rpb24gaXNDbG91ZEZvcm1hdGlvbkludHJpbnNpYyh4OiBhbnkpIHtcbiAgaWYgKCEodHlwZW9mIHggPT09ICdvYmplY3QnKSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHgpO1xuICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgcmV0dXJuIGtleXNbMF0gPT09ICdSZWYnIHx8IGtleXNbMF0uc3Vic3RyKDAsIDQpID09PSAnRm46Oic7XG59XG4iXX0=

@@ -78,2 +78,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1bmlxdWVpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUEyQztBQUMzQyxpQ0FBa0M7QUFFbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFckIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQjtBQUUvQzs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUM3QyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUVyRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztLQUNyRjtJQUVELDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsZ0NBQWdDO0lBQ2hDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssb0JBQW9CLENBQUM7U0FDdkMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1NBQzFCLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDUixLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTdCLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4QixDQUFDO0FBdEJELG9DQXNCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFjO0lBQzVCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLENBQVM7SUFDcEMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5RCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCO0tBQ0o7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9ICdSZXNvdXJjZSc7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgY29tcGxldGUgaGlkZGVuIGZyb20gdGhlIGxvZ2ljYWwgSUQgY2FsY3VsYXRpb24uXG4gKi9cbmNvbnN0IEhJRERFTl9JRCA9ICdEZWZhdWx0JztcblxuY29uc3QgUEFUSF9TRVAgPSAnLyc7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHVuaXF1ZSBJRCBmb3IgYSBzZXQgb2YgdGV4dHVhbCBjb21wb25lbnRzLlxuICpcbiAqIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGluZyBhIGhhc2ggb24gdGhlIGZ1bGwgcGF0aCBhbmQgdXNpbmcgaXQgYXMgYSBzdWZmaXhcbiAqIG9mIGEgbGVuZ3RoLWxpbWl0ZWQgXCJodW1hblwiIHJlbmRpdGlvbiBvZiB0aGUgcGF0aCBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnRzIFRoZSBwYXRoIGNvbXBvbmVudHNcbiAqIEByZXR1cm5zIGEgdW5pcXVlIGFscGhhLW51bWVyaWMgaWRlbnRpZmllciB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgMjU1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVW5pcXVlSWQoY29tcG9uZW50czogc3RyaW5nW10pIHtcbiAgICBjb21wb25lbnRzID0gY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4ICE9PSBISURERU5fSUQpO1xuXG4gICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNhbGN1bGF0ZSBhIHVuaXF1ZSBpZCBmb3IgYW4gZW1wdHkgc2V0IG9mIGNvbXBvbmVudHMnKTtcbiAgICB9XG5cbiAgICAvLyB0b3AtbGV2ZWwgcmVzb3VyY2VzIHdpbGwgc2ltcGx5IHVzZSB0aGUgYG5hbWVgIGFzLWlzIGluIG9yZGVyIHRvIHN1cHBvcnRcbiAgICAvLyB0cmFuc3BhcmVudCBtaWdyYXRpb24gb2YgY2xvdWRmb3JtYXRpb24gdGVtcGxhdGVzIHRvIHRoZSBDREsgd2l0aG91dCB0aGVcbiAgICAvLyBuZWVkIHRvIHJlbmFtZSBhbGwgcmVzb3VyY2VzLlxuICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50c1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNoID0gcGF0aEhhc2goY29tcG9uZW50cyk7XG4gICAgY29uc3QgaHVtYW4gPSByZW1vdmVEdXBlcyhjb21wb25lbnRzKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gSElEREVOX0ZST01fSFVNQU5fSUQpXG4gICAgICAgIC5tYXAocmVtb3ZlTm9uQWxwaGFudW1lcmljKVxuICAgICAgICAuam9pbignJylcbiAgICAgICAgLnNsaWNlKDAsIE1BWF9IVU1BTl9MRU4pO1xuXG4gICAgcmV0dXJuIGh1bWFuICsgaGFzaDtcbn1cblxuLyoqXG4gKiBUYWtlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBUaGUgaGFzaCBpcyBsaW1pdGVkIGluIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHBhdGhIYXNoKHBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZDUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpLmRpZ2VzdChcImhleFwiKTtcbiAgICByZXR1cm4gbWQ1LnNsaWNlKDAsIEhBU0hfTEVOKS50b1VwcGVyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTm9uQWxwaGFudW1lcmljKHM6IHN0cmluZykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnJyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZSBcInRlcm1zXCIgZnJvbSB0aGUgcGF0aCBsaXN0XG4gKlxuICogSWYgdGhlIHByZXZpb3VzIHBhdGggY29tcG9uZW50IG5hbWUgZW5kcyB3aXRoIHRoaXMgY29tcG9uZW50IG5hbWUsIHNraXAgdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwZXMocGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHBhdGgpIHtcbiAgICAgICAgaWYgKHJldC5sZW5ndGggPT09IDAgfHwgIXJldFtyZXQubGVuZ3RoIC0gMV0uZW5kc1dpdGgoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgcmV0LnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1bmlxdWVpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUEyQztBQUMzQyxpQ0FBa0M7QUFFbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFckIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQjtBQUUvQzs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUVyRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztLQUNuRjtJQUVELDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsZ0NBQWdDO0lBQ2hDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEI7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssb0JBQW9CLENBQUM7U0FDdkMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1NBQzFCLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDUixLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTNCLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QixDQUFDO0FBdEJELG9DQXNCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFjO0lBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLENBQVM7SUFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDNUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JCO0tBQ0Y7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9ICdSZXNvdXJjZSc7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgY29tcGxldGUgaGlkZGVuIGZyb20gdGhlIGxvZ2ljYWwgSUQgY2FsY3VsYXRpb24uXG4gKi9cbmNvbnN0IEhJRERFTl9JRCA9ICdEZWZhdWx0JztcblxuY29uc3QgUEFUSF9TRVAgPSAnLyc7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHVuaXF1ZSBJRCBmb3IgYSBzZXQgb2YgdGV4dHVhbCBjb21wb25lbnRzLlxuICpcbiAqIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGluZyBhIGhhc2ggb24gdGhlIGZ1bGwgcGF0aCBhbmQgdXNpbmcgaXQgYXMgYSBzdWZmaXhcbiAqIG9mIGEgbGVuZ3RoLWxpbWl0ZWQgXCJodW1hblwiIHJlbmRpdGlvbiBvZiB0aGUgcGF0aCBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnRzIFRoZSBwYXRoIGNvbXBvbmVudHNcbiAqIEByZXR1cm5zIGEgdW5pcXVlIGFscGhhLW51bWVyaWMgaWRlbnRpZmllciB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgMjU1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVW5pcXVlSWQoY29tcG9uZW50czogc3RyaW5nW10pIHtcbiAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuZmlsdGVyKHggPT4geCAhPT0gSElEREVOX0lEKTtcblxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjYWxjdWxhdGUgYSB1bmlxdWUgaWQgZm9yIGFuIGVtcHR5IHNldCBvZiBjb21wb25lbnRzJyk7XG4gIH1cblxuICAvLyB0b3AtbGV2ZWwgcmVzb3VyY2VzIHdpbGwgc2ltcGx5IHVzZSB0aGUgYG5hbWVgIGFzLWlzIGluIG9yZGVyIHRvIHN1cHBvcnRcbiAgLy8gdHJhbnNwYXJlbnQgbWlncmF0aW9uIG9mIGNsb3VkZm9ybWF0aW9uIHRlbXBsYXRlcyB0byB0aGUgQ0RLIHdpdGhvdXQgdGhlXG4gIC8vIG5lZWQgdG8gcmVuYW1lIGFsbCByZXNvdXJjZXMuXG4gIGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBjb21wb25lbnRzWzBdO1xuICB9XG5cbiAgY29uc3QgaGFzaCA9IHBhdGhIYXNoKGNvbXBvbmVudHMpO1xuICBjb25zdCBodW1hbiA9IHJlbW92ZUR1cGVzKGNvbXBvbmVudHMpXG4gICAgLmZpbHRlcih4ID0+IHggIT09IEhJRERFTl9GUk9NX0hVTUFOX0lEKVxuICAgIC5tYXAocmVtb3ZlTm9uQWxwaGFudW1lcmljKVxuICAgIC5qb2luKCcnKVxuICAgIC5zbGljZSgwLCBNQVhfSFVNQU5fTEVOKTtcblxuICByZXR1cm4gaHVtYW4gKyBoYXNoO1xufVxuXG4vKipcbiAqIFRha2UgYSBoYXNoIG9mIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIFRoZSBoYXNoIGlzIGxpbWl0ZWQgaW4gc2l6ZS5cbiAqL1xuZnVuY3Rpb24gcGF0aEhhc2gocGF0aDogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBtZDUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpLmRpZ2VzdChcImhleFwiKTtcbiAgcmV0dXJuIG1kNS5zbGljZSgwLCBIQVNIX0xFTikudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU5vbkFscGhhbnVtZXJpYyhzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW15BLVphLXowLTldL2csICcnKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlIFwidGVybXNcIiBmcm9tIHRoZSBwYXRoIGxpc3RcbiAqXG4gKiBJZiB0aGUgcHJldmlvdXMgcGF0aCBjb21wb25lbnQgbmFtZSBlbmRzIHdpdGggdGhpcyBjb21wb25lbnQgbmFtZSwgc2tpcCB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiByZW1vdmVEdXBlcyhwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBwYXRoKSB7XG4gICAgaWYgKHJldC5sZW5ndGggPT09IDAgfHwgIXJldFtyZXQubGVuZ3RoIC0gMV0uZW5kc1dpdGgoY29tcG9uZW50KSkge1xuICAgICAgcmV0LnB1c2goY29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuIl19

@@ -5,3 +5,3 @@ {

"cli-color@0.1.7",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.1.7",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Mariusz Nowak",

@@ -5,3 +5,3 @@ {

"difflib@0.2.4",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.2.4",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Xueqiao Xu",

@@ -5,3 +5,3 @@ {

"dreamopt@0.6.0",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.6.0",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Andrey Tarantsov",

@@ -5,3 +5,3 @@ {

"es5-ext@0.8.2",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.8.2",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Mariusz Nowak",

@@ -5,3 +5,3 @@ {

"heap@0.2.6",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.2.6",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Xueqiao Xu",

@@ -5,3 +5,3 @@ {

"js-base64@2.4.9",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "2.4.9",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Dan Kogai"

@@ -5,3 +5,3 @@ {

"json-diff@0.3.1",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.3.1",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Andrey Tarantsov",

@@ -5,3 +5,3 @@ {

"wordwrap@1.0.0",
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
"/codebuild/output/src832442238/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "1.0.0",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src832442238/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "James Halliday",

{
"name": "@aws-cdk/cdk",
"version": "0.9.2",
"version": "0.10.0",
"description": "AWS Cloud Development Kit Core Library",

@@ -56,8 +56,8 @@ "main": "lib/index.js",

"@types/js-base64": "^2.3.1",
"cdk-build-tools": "^0.9.2",
"cfn2ts": "^0.9.2",
"pkglint": "^0.9.2"
"cdk-build-tools": "^0.10.0",
"cfn2ts": "^0.10.0",
"pkglint": "^0.10.0"
},
"dependencies": {
"@aws-cdk/cx-api": "^0.9.2",
"@aws-cdk/cx-api": "^0.10.0",
"js-base64": "^2.4.5",

@@ -64,0 +64,0 @@ "json-diff": "^0.3.1"

@@ -56,2 +56,2 @@ "use strict";

exports.evaluateCFN = evaluateCFN;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2ZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZhbHVhdGUtY2ZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFXLEVBQUUsVUFBbUMsRUFBRTtJQUMxRSxNQUFNLFVBQVUsR0FBUTtRQUNwQixVQUFVLENBQUMsU0FBaUIsRUFBRSxJQUFjO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELEtBQUssQ0FBQyxTQUFpQjtZQUNuQixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFNBQVMsdUJBQXVCLENBQUMsQ0FBQzthQUNuRjtZQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtZQUNqRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLFNBQVMsSUFBSSxhQUFhLHVCQUF1QixDQUFDLENBQUM7YUFDM0c7WUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO0tBQ0osQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhCLFNBQVMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUN4RSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuRDtZQUVELE1BQU0sR0FBRyxHQUF5QixFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDcEM7WUFDRCxPQUFPLEdBQUcsQ0FBQztTQUNkO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsSUFBUztRQUM5QyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsQ0FBQztTQUMzRDtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0FBQ0wsQ0FBQztBQXhERCxrQ0F3REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNpbXBsZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBDbG91ZEZvcm1hdGlvbiBpbnRyaW5zaWNzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcm9kdWN0aW9uIHF1YWxpdHksIGl0IGV4aXN0cyB0byBzdXBwb3J0IHRlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVDRk4ob2JqZWN0OiBhbnksIGNvbnRleHQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGludHJpbnNpY3M6IGFueSA9IHtcbiAgICAgICAgJ0ZuOjpKb2luJyhzZXBhcmF0b3I6IHN0cmluZywgYXJnczogc3RyaW5nW10pIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzLm1hcChldmFsdWF0ZSkuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdSZWYnKGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShsb2dpY2FsSWQgaW4gY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBldmFsdWF0ZSBSZWYgb2YgJyR7bG9naWNhbElkfScgYnV0IG5vdCBpbiBjb250ZXh0IWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbbG9naWNhbElkXTtcbiAgICAgICAgfSxcblxuICAgICAgICAnRm46OkdldEF0dCcobG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7bG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIGV2YWx1YXRlIEZuOjpHZXRBdHQgb2YgJyR7bG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9JyBidXQgbm90IGluIGNvbnRleHQhYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFtrZXldO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBldmFsdWF0ZShvYmplY3QpO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUob2JqOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLm1hcChldmFsdWF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxICYmIChrZXlzWzBdLnN0YXJ0c1dpdGgoJ0ZuOjonKSB8fCBrZXlzWzBdID09PSAnUmVmJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVJbnRyaW5zaWMoa2V5c1swXSwgb2JqW2tleXNbMF1dKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmV0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gZXZhbHVhdGVDRk4ob2JqW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGVJbnRyaW5zaWMobmFtZTogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKCEobmFtZSBpbiBpbnRyaW5zaWNzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRyaW5zaWMgJHtuYW1lfSBub3Qgc3VwcG9ydGVkIGhlcmVgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICAgICAgYXJncyA9IFthcmdzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnRyaW5zaWNzW25hbWVdLmFwcGx5KGludHJpbnNpY3MsIGFyZ3MpO1xuICAgIH1cbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2ZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZhbHVhdGUtY2ZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFXLEVBQUUsVUFBbUMsRUFBRTtJQUM1RSxNQUFNLFVBQVUsR0FBUTtRQUN0QixVQUFVLENBQUMsU0FBaUIsRUFBRSxJQUFjO1lBQzFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELEtBQUssQ0FBQyxTQUFpQjtZQUNyQixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFNBQVMsdUJBQXVCLENBQUMsQ0FBQzthQUNqRjtZQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtZQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLFNBQVMsSUFBSSxhQUFhLHVCQUF1QixDQUFDLENBQUM7YUFDekc7WUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhCLFNBQVMsUUFBUSxDQUFDLEdBQVE7UUFDeEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQjtRQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUMxRSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRDtZQUVELE1BQU0sR0FBRyxHQUF5QixFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbEM7WUFDRCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsSUFBUztRQUNoRCxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsQ0FBQztTQUN6RDtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2Y7UUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDO0FBeERELGtDQXdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2ltcGxlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIENsb3VkRm9ybWF0aW9uIGludHJpbnNpY3MuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IHByb2R1Y3Rpb24gcXVhbGl0eSwgaXQgZXhpc3RzIHRvIHN1cHBvcnQgdGVzdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUNGTihvYmplY3Q6IGFueSwgY29udGV4dDoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fSk6IGFueSB7XG4gIGNvbnN0IGludHJpbnNpY3M6IGFueSA9IHtcbiAgICAnRm46OkpvaW4nKHNlcGFyYXRvcjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSkge1xuICAgICAgcmV0dXJuIGFyZ3MubWFwKGV2YWx1YXRlKS5qb2luKHNlcGFyYXRvcik7XG4gICAgfSxcblxuICAgICdSZWYnKGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gICAgICBpZiAoIShsb2dpY2FsSWQgaW4gY29udGV4dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gZXZhbHVhdGUgUmVmIG9mICcke2xvZ2ljYWxJZH0nIGJ1dCBub3QgaW4gY29udGV4dCFgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZXh0W2xvZ2ljYWxJZF07XG4gICAgfSxcblxuICAgICdGbjo6R2V0QXR0Jyhsb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBrZXkgPSBgJHtsb2dpY2FsSWR9LiR7YXR0cmlidXRlTmFtZX1gO1xuICAgICAgaWYgKCEoa2V5IGluIGNvbnRleHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIGV2YWx1YXRlIEZuOjpHZXRBdHQgb2YgJyR7bG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9JyBidXQgbm90IGluIGNvbnRleHQhYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGV4dFtrZXldO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZXZhbHVhdGUob2JqZWN0KTtcblxuICBmdW5jdGlvbiBldmFsdWF0ZShvYmo6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoZXZhbHVhdGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEgJiYgKGtleXNbMF0uc3RhcnRzV2l0aCgnRm46OicpIHx8IGtleXNbMF0gPT09ICdSZWYnKSkge1xuICAgICAgICByZXR1cm4gZXZhbHVhdGVJbnRyaW5zaWMoa2V5c1swXSwgb2JqW2tleXNbMF1dKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICByZXRba2V5XSA9IGV2YWx1YXRlQ0ZOKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV2YWx1YXRlSW50cmluc2ljKG5hbWU6IHN0cmluZywgYXJnczogYW55KSB7XG4gICAgaWYgKCEobmFtZSBpbiBpbnRyaW5zaWNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRyaW5zaWMgJHtuYW1lfSBub3Qgc3VwcG9ydGVkIGhlcmVgKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgIGFyZ3MgPSBbYXJnc107XG4gICAgfVxuXG4gICAgcmV0dXJuIGludHJpbnNpY3NbbmFtZV0uYXBwbHkoaW50cmluc2ljcywgYXJncyk7XG4gIH1cbn1cbiJdfQ==

@@ -195,2 +195,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ0wsc0NBQXNDLENBQUMsSUFBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxLQUFLO29CQUNMLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO29CQUN0QixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO29CQUN6QixHQUFHO29CQUNILGFBQWEsQ0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsd0VBQXdFLENBQUMsSUFBVTtRQUMvRSxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE1BQU0sRUFBRSxXQUFXO1lBQ25CLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFlBQVksRUFBRSxzQkFBc0I7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxRQUFR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QUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0o7Q0FFSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFybkNvbXBvbmVudHMsIEFyblV0aWxzLCByZXNvbHZlLCBUb2tlbiB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIGRlZmF1bHRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdteXF1ZXVlbmFtZSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgICAgIFsgJycsXG4gICAgICAgICAgWyAnYXJuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnc3FzJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpSZWdpb24nIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6QWNjb3VudElkJyB9LFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ215cXVldWVuYW1lJyBdIF0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIHZhcmlvdXMgY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBhcm4gPSBBcm5VdGlscy5mcm9tQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnZHluYW1vZGInLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICd0YWJsZScsXG4gICAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnbXl0YWJsZS9zdHJlYW0vbGFiZWwnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSwgeyAnRm46OkpvaW4nOlxuICAgICAgICBbICcnLFxuICAgICAgICAgIFsgJ2FybicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnYXdzLWNuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICdkeW5hbW9kYicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAndXMtZWFzdC0xJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAgICcvJyxcbiAgICAgICAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcgXSBdIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FsbG93IGVtcHR5IHN0cmluZyBpbiBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ215LWJ1Y2tldCcsXG4gICAgICAgICAgICBhY2NvdW50OiAnJyxcbiAgICAgICAgICAgIHJlZ2lvbjogJycsXG4gICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGFybiksIHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcm4nLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICdzMycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJ215LWJ1Y2tldCcsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc291cmNlUGF0aFNlcCBjYW4gYmUgc2V0IHRvIFwiOlwiIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCIvXCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ2NvZGVkZXBsb3knLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdhcHBsaWNhdGlvbicsXG4gICAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ1dvcmRQcmVzc19BcHAnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSwgeyAnRm46OkpvaW4nOlxuICAgICAgICBbICcnLFxuICAgICAgICAgIFsgJ2FybicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ2NvZGVkZXBsb3knLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ1dvcmRQcmVzc19BcHAnIF0gXSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdmYWlscyBpZiByZXNvdXJjZVBhdGhTZXAgaXMgbmVpdGhlciBcIjpcIiBub3IgXCIvXCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ2ZvbycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2JhcicsXG4gICAgICAgICAgICBzZXA6ICd4JyB9KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQXJuLnBhcnNlKHMpJzoge1xuXG4gICAgICAgICdmYWlscyc6IHtcbiAgICAgICAgICAgICdpZiBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBcImFybjpcIicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKFwiYmFybjpmb286eDphOjE6MlwiKSwgL0FSTnMgbXVzdCBzdGFydCB3aXRoIFwiYXJuOlwiOiBiYXJuOmZvby8pO1xuICAgICAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgJ2lmIHRoZSBBUk4gZG9lc250IGhhdmUgZW5vdWdoIGNvbXBvbmVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZSgnYXJuOmlzOnRvbzpzaG9ydCcpLCAvQVJOcyBtdXN0IGhhdmUgYXQgbGVhc3QgNiBjb21wb25lbnRzOiBhcm46aXM6dG9vOnNob3J0Lyk7XG4gICAgICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAnaWYgXCJzZXJ2aWNlXCIgaXMgbm90IHNwZWNpZmllZCcodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKCdhcm46YXdzOjo0OjU6NicpLCAvVGhlIGBzZXJ2aWNlYCBjb21wb25lbnQgXFwoM3JkIGNvbXBvbmVudFxcKSBpcyByZXF1aXJlZC8pO1xuICAgICAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgJ2lmIFwicmVzb3VyY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoJ2Fybjphd3M6c2VydmljZTo6OicpLCAvVGhlIGByZXNvdXJjZWAgY29tcG9uZW50IFxcKDZ0aCBjb21wb25lbnRcXCkgaXMgcmVxdWlyZWQvKTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAndmFyaW91cyBzdWNjZXNzZnVsIHBhcnNlcycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdHM6IHsgW2Fybjogc3RyaW5nXTogQXJuQ29tcG9uZW50cyB9ID0ge1xuICAgICAgICAgICAgICAgICdhcm46YXdzOmE0YjpyZWdpb246YWNjb3VudGlkOnJlc291cmNldHlwZS9yZXNvdXJjZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2E0YicsXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogJ3JlZ2lvbicsXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6ICdhY2NvdW50aWQnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ3Jlc291cmNldHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ3Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmFwaWdhdGV3YXk6dXMtZWFzdC0xOjphMTIzNDU2Nzg5MDEyYmMzZGU0NTY3ODkwMWYyM2E0NTovdGVzdC9teWRlbW9yZXNvdXJjZS8qJzoge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MnLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnYTEyMzQ1Njc4OTAxMmJjM2RlNDU2Nzg5MDFmMjNhNDUnLFxuICAgICAgICAgICAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnL3Rlc3QvbXlkZW1vcmVzb3VyY2UvKidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdhcm46YXdzLWNuOmNsb3VkOTo6MTIzNDU2Nzg5MDEyOmVudmlyb25tZW50OjgxZTkwMDMxNzM0NzU4NWEwNjAxZTA0YzhkNTJlYUVYJzoge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnY2xvdWQ5JyxcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnZW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICc4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCcsXG4gICAgICAgICAgICAgICAgICAgIHNlcDogJzonXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOjpjb2duaXRvLXN5bmM6OjppZGVudGl0eXBvb2wvdXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYSc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2NvZ25pdG8tc3luYycsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnaWRlbnRpdHlwb29sJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAndXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYScsXG4gICAgICAgICAgICAgICAgICAgIHNlcDogJy8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czpzMzo6Om15X2NvcnBvcmF0ZV9idWNrZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnbXlfY29ycG9yYXRlX2J1Y2tldCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykuZm9yRWFjaChhcm4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGVzdHNbYXJuXTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChBcm5VdGlscy5wYXJzZShhcm4pLCBleHBlY3RlZCwgYXJuKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAnYSBUb2tlbiB3aXRoIDogc2VwYXJhdG9yJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0aGVUb2tlbiA9IHsgUmVmOiAnU29tZVBhcmFtZXRlcicgfTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IFRva2VuKCgpID0+IHRoZVRva2VuKSwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucGFydGl0aW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnNlcnZpY2UpLCB7ICdGbjo6U2VsZWN0JzogWyAyLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVnaW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMywgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLmFjY291bnQpLCB7ICdGbjo6U2VsZWN0JzogWyA0LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2UpLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgNiwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwocGFyc2VkLnNlcCwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2EgVG9rZW4gd2l0aCAvIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgdGhlVG9rZW4gPSB7IFJlZjogJ1NvbWVQYXJhbWV0ZXInIH07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBBcm5VdGlscy5wYXJzZVRva2VuKG5ldyBUb2tlbigoKSA9PiB0aGVUb2tlbikpO1xuXG4gICAgICAgICAgICB0ZXN0LmVxdWFsKHBhcnNlZC5zZXAsICcvJyk7XG5cbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnJlc291cmNlKSwgeyAnRm46OlNlbGVjdCc6IFsgMCwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICcvJywgeyAnRm46OlNlbGVjdCc6IFsgNSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19IF19IF19KTtcblxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG59OyJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ1Asc0NBQXNDLENBQUMsSUFBVTtRQUMvQyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ1AsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxLQUFLO29CQUNMLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO29CQUN0QixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO29CQUN6QixHQUFHO29CQUNILGFBQWEsQ0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx3RUFBd0UsQ0FBQyxJQUFVO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLGNBQVEsQ0FBQyxjQUFjLENBQUM7WUFDbEMsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsWUFBWSxFQUFFLHNCQUFzQjtTQUNyQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFDekMsQ0FBRSxFQUFFO2dCQUNGLENBQUUsS0FBSztvQkFDUCxHQUFHO29CQUNILFFBQVE7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QUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FDRjtDQUVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQXJuQ29tcG9uZW50cywgQXJuVXRpbHMsIHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIGRlZmF1bHRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICByZXNvdXJjZTogJ215cXVldWVuYW1lJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgJ3NxcycsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgeyBSZWY6ICdBV1M6OkFjY291bnRJZCcgfSxcbiAgICAgICc6JyxcbiAgICAgICdteXF1ZXVlbmFtZScgXSBdIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjcmVhdGUgZnJvbSBjb21wb25lbnRzIHdpdGggc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ2R5bmFtb2RiJyxcbiAgICAgIHJlc291cmNlOiAndGFibGUnLFxuICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgcGFydGl0aW9uOiAnYXdzLWNuJyxcbiAgICAgIHJlc291cmNlTmFtZTogJ215dGFibGUvc3RyZWFtL2xhYmVsJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICAnYXdzLWNuJyxcbiAgICAgICc6JyxcbiAgICAgICdkeW5hbW9kYicsXG4gICAgICAnOicsXG4gICAgICAndXMtZWFzdC0xJyxcbiAgICAgICc6JyxcbiAgICAgICcxMjM0NTY3ODkwMTInLFxuICAgICAgJzonLFxuICAgICAgJ3RhYmxlJyxcbiAgICAgICcvJyxcbiAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcgXSBdIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhbGxvdyBlbXB0eSBzdHJpbmcgaW4gY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICByZXNvdXJjZTogJ215LWJ1Y2tldCcsXG4gICAgICBhY2NvdW50OiAnJyxcbiAgICAgIHJlZ2lvbjogJycsXG4gICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7XG4gICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbXG4gICAgICAgICAgJ2FybicsXG4gICAgICAgICAgJzonLFxuICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICc6JyxcbiAgICAgICAgICAnczMnLFxuICAgICAgICAgICc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJzonLFxuICAgICAgICAgICdteS1idWNrZXQnLFxuICAgICAgICBdXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncmVzb3VyY2VQYXRoU2VwIGNhbiBiZSBzZXQgdG8gXCI6XCIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBcIi9cIicodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdjb2RlZGVwbG95JyxcbiAgICAgIHJlc291cmNlOiAnYXBwbGljYXRpb24nLFxuICAgICAgc2VwOiAnOicsXG4gICAgICByZXNvdXJjZU5hbWU6ICdXb3JkUHJlc3NfQXBwJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgJ2NvZGVkZXBsb3knLFxuICAgICAgJzonLFxuICAgICAgeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSxcbiAgICAgICc6JyxcbiAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAnOicsXG4gICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgJzonLFxuICAgICAgJ1dvcmRQcmVzc19BcHAnIF0gXSB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgaWYgcmVzb3VyY2VQYXRoU2VwIGlzIG5laXRoZXIgXCI6XCIgbm9yIFwiL1wiJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ2ZvbycsXG4gICAgICByZXNvdXJjZTogJ2JhcicsXG4gICAgICBzZXA6ICd4JyB9KSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0Fybi5wYXJzZShzKSc6IHtcblxuICAgICdmYWlscyc6IHtcbiAgICAgICdpZiBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBcImFybjpcIicodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZShcImJhcm46Zm9vOng6YToxOjJcIiksIC9BUk5zIG11c3Qgc3RhcnQgd2l0aCBcImFybjpcIjogYmFybjpmb28vKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICB9LFxuXG4gICAgICAnaWYgdGhlIEFSTiBkb2VzbnQgaGF2ZSBlbm91Z2ggY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZSgnYXJuOmlzOnRvbzpzaG9ydCcpLCAvQVJOcyBtdXN0IGhhdmUgYXQgbGVhc3QgNiBjb21wb25lbnRzOiBhcm46aXM6dG9vOnNob3J0Lyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfSxcblxuICAgICAgJ2lmIFwic2VydmljZVwiIGlzIG5vdCBzcGVjaWZpZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoJ2Fybjphd3M6OjQ6NTo2JyksIC9UaGUgYHNlcnZpY2VgIGNvbXBvbmVudCBcXCgzcmQgY29tcG9uZW50XFwpIGlzIHJlcXVpcmVkLyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfSxcblxuICAgICAgJ2lmIFwicmVzb3VyY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKCdhcm46YXdzOnNlcnZpY2U6OjonKSwgL1RoZSBgcmVzb3VyY2VgIGNvbXBvbmVudCBcXCg2dGggY29tcG9uZW50XFwpIGlzIHJlcXVpcmVkLyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAndmFyaW91cyBzdWNjZXNzZnVsIHBhcnNlcycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgdGVzdHM6IHsgW2Fybjogc3RyaW5nXTogQXJuQ29tcG9uZW50cyB9ID0ge1xuICAgICAgICAnYXJuOmF3czphNGI6cmVnaW9uOmFjY291bnRpZDpyZXNvdXJjZXR5cGUvcmVzb3VyY2UnOiB7XG4gICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICBzZXJ2aWNlOiAnYTRiJyxcbiAgICAgICAgICByZWdpb246ICdyZWdpb24nLFxuICAgICAgICAgIGFjY291bnQ6ICdhY2NvdW50aWQnLFxuICAgICAgICAgIHJlc291cmNlOiAncmVzb3VyY2V0eXBlJyxcbiAgICAgICAgICByZXNvdXJjZU5hbWU6ICdyZXNvdXJjZScsXG4gICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjphd3M6YXBpZ2F0ZXdheTp1cy1lYXN0LTE6OmExMjM0NTY3ODkwMTJiYzNkZTQ1Njc4OTAxZjIzYTQ1Oi90ZXN0L215ZGVtb3Jlc291cmNlLyonOiB7XG4gICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2ExMjM0NTY3ODkwMTJiYzNkZTQ1Njc4OTAxZjIzYTQ1JyxcbiAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICByZXNvdXJjZU5hbWU6ICcvdGVzdC9teWRlbW9yZXNvdXJjZS8qJ1xuICAgICAgICB9LFxuICAgICAgICAnYXJuOmF3cy1jbjpjbG91ZDk6OjEyMzQ1Njc4OTAxMjplbnZpcm9ubWVudDo4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCc6IHtcbiAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgIHNlcnZpY2U6ICdjbG91ZDknLFxuICAgICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgIHJlc291cmNlOiAnZW52aXJvbm1lbnQnLFxuICAgICAgICAgIHJlc291cmNlTmFtZTogJzgxZTkwMDMxNzM0NzU4NWEwNjAxZTA0YzhkNTJlYUVYJyxcbiAgICAgICAgICBzZXA6ICc6J1xuICAgICAgICB9LFxuICAgICAgICAnYXJuOjpjb2duaXRvLXN5bmM6OjppZGVudGl0eXBvb2wvdXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYSc6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnY29nbml0by1zeW5jJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2lkZW50aXR5cG9vbCcsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAndXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYScsXG4gICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0Jzoge1xuICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICByZXNvdXJjZTogJ215X2NvcnBvcmF0ZV9idWNrZXQnXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5mb3JFYWNoKGFybiA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGVzdHNbYXJuXTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoQXJuVXRpbHMucGFyc2UoYXJuKSwgZXhwZWN0ZWQsIGFybik7XG4gICAgICB9KTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhIFRva2VuIHdpdGggOiBzZXBhcmF0b3InKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHRoZVRva2VuID0geyBSZWY6ICdTb21lUGFyYW1ldGVyJyB9O1xuICAgICAgY29uc3QgcGFyc2VkID0gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oKCkgPT4gdGhlVG9rZW4pLCAnOicpO1xuXG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5wYXJ0aXRpb24pLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQuc2VydmljZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDIsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZWdpb24pLCB7ICdGbjo6U2VsZWN0JzogWyAzLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQuYWNjb3VudCksIHsgJ0ZuOjpTZWxlY3QnOiBbIDQsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyA2LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5lcXVhbChwYXJzZWQuc2VwLCAnOicpO1xuXG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2EgVG9rZW4gd2l0aCAvIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgdGhlVG9rZW4gPSB7IFJlZjogJ1NvbWVQYXJhbWV0ZXInIH07XG4gICAgICBjb25zdCBwYXJzZWQgPSBBcm5VdGlscy5wYXJzZVRva2VuKG5ldyBUb2tlbigoKSA9PiB0aGVUb2tlbikpO1xuXG4gICAgICB0ZXN0LmVxdWFsKHBhcnNlZC5zZXAsICcvJyk7XG5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnJlc291cmNlKSwgeyAnRm46OlNlbGVjdCc6IFsgMCwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICcvJywgeyAnRm46OlNlbGVjdCc6IFsgNSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19IF19IF19KTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuICB9LFxuXG59O1xuIl19

@@ -134,2 +134,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jbG91ZGZvcm1hdGlvbi1qc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jbG91ZGZvcm1hdGlvbi1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBOEY7QUFDOUYsaURBQTZDO0FBb0s3Qzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBVTtJQUNuQyxPQUFPO1FBQ0gsSUFBSSxXQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hCLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN6QixDQUFDO0FBQ04sQ0FBQztBQTFLRCxpQkFBUztJQUNMLHlDQUF5QyxDQUFDLElBQVU7UUFDaEQsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLE9BQU87UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrRUFBa0UsQ0FBQyxJQUFVO1FBQ3pFLEtBQUssTUFBTSxLQUFLLElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEQsUUFBUTtZQUNSLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFFN0MsT0FBTztZQUNQLE1BQU0sUUFBUSxHQUFHLGFBQU8sQ0FBQyx3QkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUU3RCxPQUFPO1lBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7U0FDakY7UUFF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dW5pdCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkpTT04sIENsb3VkRm9ybWF0aW9uVG9rZW4sIEZuQ29uY2F0LCByZXNvbHZlLCBUb2tlbiB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBldmFsdWF0ZUNGTiB9IGZyb20gJy4vZXZhbHVhdGUtY2ZuJztcblxuZXhwb3J0ID0ge1xuICAgICdwbGFpbiBKU09OLnN0cmluZ2lmeSgpIG9uIGEgVG9rZW4gZmFpbHMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ3ZhbHVlJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHRva2VuIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3N0cmluZyB0b2tlbnMgY2FuIGJlIEpTT05pZmllZCBhbmQgSlNPTmlmaWNhdGlvbiBjYW4gYmUgcmV2ZXJzZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCd3b29mIHdvb2YnKSkge1xuICAgICAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgICAgIGNvbnN0IGZpZG8gPSB7IG5hbWU6ICdGaWRvJywgc3BlYWtzOiB0b2tlbiB9O1xuXG4gICAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeShmaWRvKSk7XG5cbiAgICAgICAgICAgIC8vIFRIRU5cbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ3tcIm5hbWVcIjpcIkZpZG9cIixcInNwZWFrc1wiOlwid29vZiB3b29mXCJ9Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3N0cmluZyB0b2tlbnMgY2FuIGJlIGVtYmVkZGVkIHdoaWxlIGJlaW5nIEpTT05pZmllZCcodGVzdDogVGVzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ3dvb2Ygd29vZicpKSB7XG4gICAgICAgICAgICAvLyBHSVZFTlxuICAgICAgICAgICAgY29uc3QgZmlkbyA9IHsgbmFtZTogJ0ZpZG8nLCBzcGVha3M6IGBkZWVwICR7dG9rZW59YCB9O1xuXG4gICAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeShmaWRvKSk7XG5cbiAgICAgICAgICAgIC8vIFRIRU5cbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ3tcIm5hbWVcIjpcIkZpZG9cIixcInNwZWFrc1wiOlwiZGVlcCB3b29mIHdvb2ZcIn0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaW50ZWdlciBUb2tlbnMgYmVoYXZlIGNvcnJlY3RseSBpbiBzdHJpbmdpZmljYXRpb24gYW5kIEpTT05pZmljYXRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgbnVtID0gbmV3IFRva2VuKCgpID0+IDEpO1xuICAgICAgICBjb25zdCBlbWJlZGRlZCA9IGB0aGUgbnVtYmVyIGlzICR7bnVtfWA7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmUoZW1iZWRkZWQpKSwgXCJ0aGUgbnVtYmVyIGlzIDFcIik7XG4gICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZShDbG91ZEZvcm1hdGlvbkpTT04uc3RyaW5naWZ5KHsgZW1iZWRkZWQgfSkpKSwgXCJ7XFxcImVtYmVkZGVkXFxcIjpcXFwidGhlIG51bWJlciBpcyAxXFxcIn1cIik7XG4gICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZShDbG91ZEZvcm1hdGlvbkpTT04uc3RyaW5naWZ5KHsgbnVtIH0pKSksIFwie1xcXCJudW1cXFwiOjF9XCIpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIGluIHN0cmluZ3Mgc3Vydml2ZSBhZGRpdGlvbmFsIFRva2VuSlNPTi5zdHJpbmdpZmljYXRpb24oKScodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ3BvbmchJykpIHtcbiAgICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeShgcGluZz8gJHt0b2tlbn1gKTtcblxuICAgICAgICAgICAgLy8gVEhFTlxuICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlKHN0cmluZ2lmaWVkKSksICdcInBpbmc/IHBvbmchXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaW50cmluc2ljIFRva2VucyBlbWJlZCBjb3JyZWN0bHkgaW4gSlNPTmlmaWNhdGlvbicodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBidWNrZXROYW1lID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oeyBSZWY6ICdNeUJ1Y2tldCcgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7IHRoZUJ1Y2tldDogYnVja2V0TmFtZSB9KSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkLCBjb250ZXh0KSwgJ3tcInRoZUJ1Y2tldFwiOlwiVGhlTmFtZVwifScpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnZW1iZWRkZWQgc3RyaW5nIGxpdGVyYWxzIGluIGludHJpbnNpY3MgYXJlIGVzY2FwZWQgd2hlbiBjYWxsaW5nIFRva2VuSlNPTi5zdHJpbmdpZnkoKScodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IEZuQ29uY2F0KCdIZWxsbycsICdUaGlzXFxuSXMnLCAnVmVyeSBcImNvb2xcIicpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKENsb3VkRm9ybWF0aW9uSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbGl0ZXJhbDogJ0kgY2FuIGFsc28gXCJjb250YWluXCIgcXVvdGVzJyxcbiAgICAgICAgICAgIHRva2VuXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ3tcImxpdGVyYWxcIjpcIkkgY2FuIGFsc28gXFxcXFwiY29udGFpblxcXFxcIiBxdW90ZXNcIixcInRva2VuXCI6XCJIZWxsb1RoaXNcXFxcbklzVmVyeSBcXFxcXCJjb29sXFxcXFwiXCJ9JztcbiAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksIGV4cGVjdGVkKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1Rva2VucyBpbiBUb2tlbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbih7IFJlZjogJ015QnVja2V0JyB9KTtcbiAgICAgICAgY29uc3QgY29tYmluZWROYW1lID0gbmV3IEZuQ29uY2F0KCdUaGUgYnVja2V0IG5hbWUgaXMgJywgYnVja2V0TmFtZSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7IHRoZUJ1Y2tldDogY29tYmluZWROYW1lIH0pKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7TXlCdWNrZXQ6ICdUaGVOYW1lJ307XG4gICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAne1widGhlQnVja2V0XCI6XCJUaGUgYnVja2V0IG5hbWUgaXMgVGhlTmFtZVwifScpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnRG91Ymx5IG5lc3RlZCBzdHJpbmdzIGV2YWx1YXRlIGNvcnJlY3RseSBpbiBKU09OIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBmaWRvU2F5cyA9IG5ldyBUb2tlbigoKSA9PiAnd29vZicpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKENsb3VkRm9ybWF0aW9uSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgaW5mb3JtYXRpb246IGBEaWQgeW91IGtub3cgdGhhdCBGaWRvIHNheXM6ICR7Zmlkb1NheXN9YFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICd7XCJpbmZvcm1hdGlvblwiOlwiRGlkIHlvdSBrbm93IHRoYXQgRmlkbyBzYXlzOiB3b29mXCJ9Jyk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdEb3VibHkgbmVzdGVkIGludHJpbnNpY3MgZXZhbHVhdGUgY29ycmVjdGx5IGluIEpTT04gY29udGV4dCcodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IGZpZG9TYXlzID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gKHsgUmVmOiAnU29tZXRoaW5nJyB9KSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBpbmZvcm1hdGlvbjogYERpZCB5b3Uga25vdyB0aGF0IEZpZG8gc2F5czogJHtmaWRvU2F5c31gXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7U29tZXRoaW5nOiAnd29vZiB3b29mJ307XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkLCBjb250ZXh0KSwgJ3tcImluZm9ybWF0aW9uXCI6XCJEaWQgeW91IGtub3cgdGhhdCBGaWRvIHNheXM6IHdvb2Ygd29vZlwifScpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnUXVvdGVkIHN0cmluZ3MgaW4gZW1iZWRkZWQgSlNPTiBjb250ZXh0IGFyZSBlc2NhcGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgZmlkb1NheXMgPSBuZXcgVG9rZW4oKCkgPT4gJ1wid29vZlwiJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBpbmZvcm1hdGlvbjogYERpZCB5b3Uga25vdyB0aGF0IEZpZG8gc2F5czogJHtmaWRvU2F5c31gXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ3tcImluZm9ybWF0aW9uXCI6XCJEaWQgeW91IGtub3cgdGhhdCBGaWRvIHNheXM6IFxcXFxcIndvb2ZcXFxcXCJcIn0nKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxufTtcblxuLyoqXG4gKiBSZXR1cm4gdHdvIFRva2Vucywgb25lIG9mIHdoaWNoIGV2YWx1YXRlcyB0byBhIFRva2VuIGRpcmVjdGx5LCBvbmUgd2hpY2ggZXZhbHVhdGVzIHRvIGl0IGxhemlseVxuICovXG5mdW5jdGlvbiB0b2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBhbnkpOiBUb2tlbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBuZXcgVG9rZW4odmFsdWUpLFxuICAgICAgICBuZXcgVG9rZW4oKCkgPT4gdmFsdWUpXG4gICAgXTtcbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jbG91ZGZvcm1hdGlvbi1qc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jbG91ZGZvcm1hdGlvbi1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBOEY7QUFDOUYsaURBQTZDO0FBb0s3Qzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBVTtJQUNyQyxPQUFPO1FBQ0wsSUFBSSxXQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hCLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQTFLRCxpQkFBUztJQUNQLHlDQUF5QyxDQUFDLElBQVU7UUFDbEQsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLE9BQU87UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtFQUFrRSxDQUFDLElBQVU7UUFDM0UsS0FBSyxNQUFNLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNwRCxRQUFRO1lBQ1IsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUU3QyxPQUFPO1lBQ1AsTUFBTSxRQUFRLEdBQUcsYUFBTyxDQUFDLHdCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRTdELE9BQU87WUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztTQUMvRTtRQUVE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b3J0IHsgQ2xvdWRGb3JtYXRpb25KU09OLCBDbG91ZEZvcm1hdGlvblRva2VuLCBGbkNvbmNhdCwgcmVzb2x2ZSwgVG9rZW4gfSBmcm9tICcuLi8uLi9saWInO1xuaW1wb3J0IHsgZXZhbHVhdGVDRk4gfSBmcm9tICcuL2V2YWx1YXRlLWNmbic7XG5cbmV4cG9ydCA9IHtcbiAgJ3BsYWluIEpTT04uc3RyaW5naWZ5KCkgb24gYSBUb2tlbiBmYWlscycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ3ZhbHVlJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgSlNPTi5zdHJpbmdpZnkoeyB0b2tlbiB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzdHJpbmcgdG9rZW5zIGNhbiBiZSBKU09OaWZpZWQgYW5kIEpTT05pZmljYXRpb24gY2FuIGJlIHJldmVyc2VkJyh0ZXN0OiBUZXN0KSB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCd3b29mIHdvb2YnKSkge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGZpZG8gPSB7IG5hbWU6ICdGaWRvJywgc3BlYWtzOiB0b2tlbiB9O1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeShmaWRvKSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ3tcIm5hbWVcIjpcIkZpZG9cIixcInNwZWFrc1wiOlwid29vZiB3b29mXCJ9Jyk7XG4gICAgfVxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3N0cmluZyB0b2tlbnMgY2FuIGJlIGVtYmVkZGVkIHdoaWxlIGJlaW5nIEpTT05pZmllZCcodGVzdDogVGVzdCkge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnd29vZiB3b29mJykpIHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBmaWRvID0geyBuYW1lOiAnRmlkbycsIHNwZWFrczogYGRlZXAgJHt0b2tlbn1gIH07XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShDbG91ZEZvcm1hdGlvbkpTT04uc3RyaW5naWZ5KGZpZG8pKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAne1wibmFtZVwiOlwiRmlkb1wiLFwic3BlYWtzXCI6XCJkZWVwIHdvb2Ygd29vZlwifScpO1xuICAgIH1cblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbnRlZ2VyIFRva2VucyBiZWhhdmUgY29ycmVjdGx5IGluIHN0cmluZ2lmaWNhdGlvbiBhbmQgSlNPTmlmaWNhdGlvbicodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgbnVtID0gbmV3IFRva2VuKCgpID0+IDEpO1xuICAgIGNvbnN0IGVtYmVkZGVkID0gYHRoZSBudW1iZXIgaXMgJHtudW19YDtcblxuICAgIC8vIFdIRU5cbiAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmUoZW1iZWRkZWQpKSwgXCJ0aGUgbnVtYmVyIGlzIDFcIik7XG4gICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlKENsb3VkRm9ybWF0aW9uSlNPTi5zdHJpbmdpZnkoeyBlbWJlZGRlZCB9KSkpLCBcIntcXFwiZW1iZWRkZWRcXFwiOlxcXCJ0aGUgbnVtYmVyIGlzIDFcXFwifVwiKTtcbiAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7IG51bSB9KSkpLCBcIntcXFwibnVtXFxcIjoxfVwiKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd0b2tlbnMgaW4gc3RyaW5ncyBzdXJ2aXZlIGFkZGl0aW9uYWwgVG9rZW5KU09OLnN0cmluZ2lmaWNhdGlvbigpJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ3BvbmchJykpIHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeShgcGluZz8gJHt0b2tlbn1gKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlKHN0cmluZ2lmaWVkKSksICdcInBpbmc/IHBvbmchXCInKTtcbiAgICB9XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaW50cmluc2ljIFRva2VucyBlbWJlZCBjb3JyZWN0bHkgaW4gSlNPTmlmaWNhdGlvbicodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgYnVja2V0TmFtZSA9IG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHsgUmVmOiAnTXlCdWNrZXQnIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShDbG91ZEZvcm1hdGlvbkpTT04uc3RyaW5naWZ5KHsgdGhlQnVja2V0OiBidWNrZXROYW1lIH0pKTtcblxuICAgIC8vIFRIRU5cbiAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAne1widGhlQnVja2V0XCI6XCJUaGVOYW1lXCJ9Jyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZW1iZWRkZWQgc3RyaW5nIGxpdGVyYWxzIGluIGludHJpbnNpY3MgYXJlIGVzY2FwZWQgd2hlbiBjYWxsaW5nIFRva2VuSlNPTi5zdHJpbmdpZnkoKScodGVzdDogVGVzdCkge1xuICAgIC8vIFdIRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBGbkNvbmNhdCgnSGVsbG8nLCAnVGhpc1xcbklzJywgJ1ZlcnkgXCJjb29sXCInKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7XG4gICAgICBsaXRlcmFsOiAnSSBjYW4gYWxzbyBcImNvbnRhaW5cIiBxdW90ZXMnLFxuICAgICAgdG9rZW5cbiAgICB9KSk7XG5cbiAgICAvLyBUSEVOXG4gICAgY29uc3QgZXhwZWN0ZWQgPSAne1wibGl0ZXJhbFwiOlwiSSBjYW4gYWxzbyBcXFxcXCJjb250YWluXFxcXFwiIHF1b3Rlc1wiLFwidG9rZW5cIjpcIkhlbGxvVGhpc1xcXFxuSXNWZXJ5IFxcXFxcImNvb2xcXFxcXCJcIn0nO1xuICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCBleHBlY3RlZCk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnVG9rZW5zIGluIFRva2VucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHknKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbih7IFJlZjogJ015QnVja2V0JyB9KTtcbiAgICBjb25zdCBjb21iaW5lZE5hbWUgPSBuZXcgRm5Db25jYXQoJ1RoZSBidWNrZXQgbmFtZSBpcyAnLCBidWNrZXROYW1lKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7IHRoZUJ1Y2tldDogY29tYmluZWROYW1lIH0pKTtcblxuICAgIC8vIFRIRU5cbiAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAne1widGhlQnVja2V0XCI6XCJUaGUgYnVja2V0IG5hbWUgaXMgVGhlTmFtZVwifScpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0RvdWJseSBuZXN0ZWQgc3RyaW5ncyBldmFsdWF0ZSBjb3JyZWN0bHkgaW4gSlNPTiBjb250ZXh0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGZpZG9TYXlzID0gbmV3IFRva2VuKCgpID0+ICd3b29mJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKENsb3VkRm9ybWF0aW9uSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaW5mb3JtYXRpb246IGBEaWQgeW91IGtub3cgdGhhdCBGaWRvIHNheXM6ICR7Zmlkb1NheXN9YFxuICAgIH0pKTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICd7XCJpbmZvcm1hdGlvblwiOlwiRGlkIHlvdSBrbm93IHRoYXQgRmlkbyBzYXlzOiB3b29mXCJ9Jyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnRG91Ymx5IG5lc3RlZCBpbnRyaW5zaWNzIGV2YWx1YXRlIGNvcnJlY3RseSBpbiBKU09OIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZmlkb1NheXMgPSBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbigoKSA9PiAoeyBSZWY6ICdTb21ldGhpbmcnIH0pKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoQ2xvdWRGb3JtYXRpb25KU09OLnN0cmluZ2lmeSh7XG4gICAgICBpbmZvcm1hdGlvbjogYERpZCB5b3Uga25vdyB0aGF0IEZpZG8gc2F5czogJHtmaWRvU2F5c31gXG4gICAgfSkpO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGNvbnRleHQgPSB7U29tZXRoaW5nOiAnd29vZiB3b29mJ307XG4gICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAne1wiaW5mb3JtYXRpb25cIjpcIkRpZCB5b3Uga25vdyB0aGF0IEZpZG8gc2F5czogd29vZiB3b29mXCJ9Jyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnUXVvdGVkIHN0cmluZ3MgaW4gZW1iZWRkZWQgSlNPTiBjb250ZXh0IGFyZSBlc2NhcGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGZpZG9TYXlzID0gbmV3IFRva2VuKCgpID0+ICdcIndvb2ZcIicpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShDbG91ZEZvcm1hdGlvbkpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGluZm9ybWF0aW9uOiBgRGlkIHlvdSBrbm93IHRoYXQgRmlkbyBzYXlzOiAke2ZpZG9TYXlzfWBcbiAgICB9KSk7XG5cbiAgICAvLyBUSEVOXG4gICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAne1wiaW5mb3JtYXRpb25cIjpcIkRpZCB5b3Uga25vdyB0aGF0IEZpZG8gc2F5czogXFxcXFwid29vZlxcXFxcIlwifScpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59O1xuXG4vKipcbiAqIFJldHVybiB0d28gVG9rZW5zLCBvbmUgb2Ygd2hpY2ggZXZhbHVhdGVzIHRvIGEgVG9rZW4gZGlyZWN0bHksIG9uZSB3aGljaCBldmFsdWF0ZXMgdG8gaXQgbGF6aWx5XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IGFueSk6IFRva2VuW10ge1xuICByZXR1cm4gW1xuICAgIG5ldyBUb2tlbih2YWx1ZSksXG4gICAgbmV3IFRva2VuKCgpID0+IHZhbHVlKVxuICBdO1xufVxuIl19

@@ -12,2 +12,2 @@ "use strict";

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFzQztBQUN0QyxrREFBbUQ7QUFFbkQsaUJBQVMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUN2QixVQUFVLEVBQUU7UUFDUix5Q0FBeUMsQ0FBQyxJQUFtQjtZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztLQUNKO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vZGV1bml0ID0gcmVxdWlyZSgnbm9kZXVuaXQnKTtcbmltcG9ydCBmbiA9IHJlcXVpcmUoJy4uLy4uL2xpYi9jbG91ZGZvcm1hdGlvbi9mbicpO1xuXG5leHBvcnQgPSBub2RldW5pdC50ZXN0Q2FzZSh7XG4gICAgJ0ZuOjpKb2luJzoge1xuICAgICAgICAncmVqZWN0cyBlbXB0eSBsaXN0IG9mIGFyZ3VtZW50cyB0byBqb2luJyh0ZXN0OiBub2RldW5pdC5UZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgZm4uRm5Kb2luKCcuJywgW10pKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFzQztBQUN0QyxrREFBbUQ7QUFFbkQsaUJBQVMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUN6QixVQUFVLEVBQUU7UUFDVix5Q0FBeUMsQ0FBQyxJQUFtQjtZQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQ0Y7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9kZXVuaXQgPSByZXF1aXJlKCdub2RldW5pdCcpO1xuaW1wb3J0IGZuID0gcmVxdWlyZSgnLi4vLi4vbGliL2Nsb3VkZm9ybWF0aW9uL2ZuJyk7XG5cbmV4cG9ydCA9IG5vZGV1bml0LnRlc3RDYXNlKHtcbiAgJ0ZuOjpKb2luJzoge1xuICAgICdyZWplY3RzIGVtcHR5IGxpc3Qgb2YgYXJndW1lbnRzIHRvIGpvaW4nKHRlc3Q6IG5vZGV1bml0LlRlc3QpIHtcbiAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBmbi5GbkpvaW4oJy4nLCBbXSkpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuICB9XG59KTtcbiJdfQ==

@@ -89,2 +89,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5pbmNsdWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5pbmNsdWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBd0U7QUFvRHhFLE1BQU0sUUFBUSxHQUFHO0lBQ2IsVUFBVSxFQUFFO1FBQ1IsT0FBTyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUUsT0FBTztTQUNuQjtLQUNKO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsV0FBVyxFQUFFO1lBQ1QsSUFBSSxFQUFFLGVBQWU7WUFDckIsVUFBVSxFQUFFO2dCQUNSLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxDQUFDO2FBQ1I7U0FDSjtRQUNELFdBQVcsRUFBRTtZQUNULElBQUksRUFBRSxlQUFlO1NBQ3hCO0tBQ0o7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyxLQUFLLENBQUMsR0FBUTtJQUNuQixRQUFRLE9BQU8sR0FBRyxFQUFFO1FBQ3BCLEtBQUssUUFBUTtZQUNULElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDcEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0gsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO2dCQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ2pDO2dCQUNELE9BQU8sTUFBTSxDQUFDO2FBQ2pCO1FBQ0w7WUFDSSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBQ0wsQ0FBQztBQTFGRCxpQkFBUztJQUNMLG9GQUFvRixDQUFDLElBQVU7UUFDM0YsTUFBTSxL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LEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFFbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBJbmNsdWRlLCBPdXRwdXQsIFBhcmFtZXRlciwgUmVzb3VyY2UsIFN0YWNrIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAgICd0aGUgSW5jbHVkZSBjb25zdHJ1Y3QgY2FuIGJlIHVzZWQgdG8gZW1iZWQgYW4gZXhpc3RpbmcgdGVtcGxhdGUgYXMtaXMgaW50byBhIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgbmV3IEluY2x1ZGUoc3RhY2ssICdUMScsIHsgdGVtcGxhdGU6IGNsb25lKHRlbXBsYXRlKSB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IHsgTXlQYXJhbTogeyBUeXBlOiAnU3RyaW5nJywgRGVmYXVsdDogJ0hlbGxvJyB9IH0sXG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBNeVJlc291cmNlMTogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMScsIFByb3BlcnRpZXM6IHsgUDE6IDEsIFAyOiAyIH0gfSxcbiAgICAgICAgICAgICAgICBNeVJlc291cmNlMjogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMicgfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaW5jbHVkZWQgdGVtcGxhdGVzIGNhbiBjby1leGlzdCB3aXRoIGVsZW1lbnRzIGNyZWF0ZWQgcHJvZ3JhbW1hdGljYWxseScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIG5ldyBJbmNsdWRlKHN0YWNrLCAnVDEnLCB7IHRlbXBsYXRlOiBjbG9uZSh0ZW1wbGF0ZSkgfSk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UzJywgeyB0eXBlOiAnUmVzb3VyY2VUeXBlMycsIHByb3BlcnRpZXM6IHsgUDM6ICdIZWxsbycgfSB9KTtcbiAgICAgICAgbmV3IE91dHB1dChzdGFjaywgJ015T3V0cHV0JywgeyBkZXNjcmlwdGlvbjogJ091dCEnLCBkaXNhYmxlRXhwb3J0OiB0cnVlIH0pO1xuICAgICAgICBuZXcgUGFyYW1ldGVyKHN0YWNrLCAnTXlQYXJhbTInLCB7IHR5cGU6ICdJbnRlZ2VyJyB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICBNeVBhcmFtOiB7IFR5cGU6ICdTdHJpbmcnLCBEZWZhdWx0OiAnSGVsbG8nIH0sXG4gICAgICAgICAgICAgICAgTXlQYXJhbTI6IHsgVHlwZTogJ0ludGVnZXInIH0gfSxcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIE15UmVzb3VyY2UxOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUxJywgUHJvcGVydGllczogeyBQMTogMSwgUDI6IDIgfSB9LFxuICAgICAgICAgICAgICAgIE15UmVzb3VyY2UyOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUyJyB9LFxuICAgICAgICAgICAgICAgIE15UmVzb3VyY2UzOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUzJywgUHJvcGVydGllczogeyBQMzogJ0hlbGxvJyB9IH0gfSxcbiAgICAgICAgICAgT3V0cHV0czoge1xuICAgICAgICAgICAgICAgTXlPdXRwdXQ6IHsgRGVzY3JpcHRpb246ICdPdXQhJyB9IH0gfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdleGNlcHRpb24gaXMgdGhyb3duIGluIGNvbnN0cnVjdGlvbiBpZiBhbiBlbnRpdHkgZnJvbSBhbiBpbmNsdWRlZCB0ZW1wbGF0ZSBoYXMgdGhlIHNhbWUgaWQgYXMgYSBwcm9ncmFtbWF0aWMgZW50aXR5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgbmV3IEluY2x1ZGUoc3RhY2ssICdUMScsIHsgdGVtcGxhdGUgfSk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UzJywgeyB0eXBlOiAnUmVzb3VyY2VUeXBlMycsIHByb3BlcnRpZXM6IHsgUDM6ICdIZWxsbycgfSB9KTtcbiAgICAgICAgbmV3IE91dHB1dChzdGFjaywgJ015T3V0cHV0JywgeyBkZXNjcmlwdGlvbjogJ091dCEnIH0pO1xuICAgICAgICBuZXcgUGFyYW1ldGVyKHN0YWNrLCAnTXlQYXJhbScsIHsgdHlwZTogJ0ludGVnZXInIH0pOyAvLyBkdXBsaWNhdGUhXG5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcbn07XG5cbmNvbnN0IHRlbXBsYXRlID0ge1xuICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgTXlQYXJhbToge1xuICAgICAgICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBEZWZhdWx0OiAnSGVsbG8nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFJlc291cmNlczoge1xuICAgICAgICBNeVJlc291cmNlMToge1xuICAgICAgICAgICAgVHlwZTogJ1Jlc291cmNlVHlwZTEnLFxuICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFAxOiAxLFxuICAgICAgICAgICAgICAgIFAyOiAyLFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBNeVJlc291cmNlMjoge1xuICAgICAgICAgICAgVHlwZTogJ1Jlc291cmNlVHlwZTInXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSBvYmogYW4gb2JqZWN0IHRvIGNsb25lXG4gKiBAcmV0dXJucyBhIGRlZXAgY2xvbmUgb2YgYGBvYmpgLlxuICovXG5mdW5jdGlvbiBjbG9uZShvYmo6IGFueSk6IGFueSB7XG4gICAgc3dpdGNoICh0eXBlb2Ygb2JqKSB7XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5tYXAoZWx0ID0+IGNsb25lKGVsdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5pbmNsdWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5pbmNsdWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBd0U7QUFvRHhFLE1BQU0sUUFBUSxHQUFHO0lBQ2YsVUFBVSxFQUFFO1FBQ1YsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUUsT0FBTztTQUNqQjtLQUNGO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLGVBQWU7WUFDckIsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxDQUFDO2FBQ047U0FDRjtRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxlQUFlO1NBQ3RCO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyxLQUFLLENBQUMsR0FBUTtJQUNyQixRQUFRLE9BQU8sR0FBRyxFQUFFO1FBQ3BCLEtBQUssUUFBUTtZQUNYLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO2dCQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE9BQU8sTUFBTSxDQUFDO2FBQ2Y7UUFDSDtZQUNFLE9BQU8sR0FBRyxDQUFDO0tBQ1o7QUFDSCxDQUFDO0FBMUZELGlCQUFTO0lBQ1Asb0ZBQW9GLENBQUMsSUFBVTtRQUM3RixNQUFNLEtB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QUssRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFFbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEluY2x1ZGUsIE91dHB1dCwgUGFyYW1ldGVyLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICd0aGUgSW5jbHVkZSBjb25zdHJ1Y3QgY2FuIGJlIHVzZWQgdG8gZW1iZWQgYW4gZXhpc3RpbmcgdGVtcGxhdGUgYXMtaXMgaW50byBhIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIG5ldyBJbmNsdWRlKHN0YWNrLCAnVDEnLCB7IHRlbXBsYXRlOiBjbG9uZSh0ZW1wbGF0ZSkgfSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgIFBhcmFtZXRlcnM6IHsgTXlQYXJhbTogeyBUeXBlOiAnU3RyaW5nJywgRGVmYXVsdDogJ0hlbGxvJyB9IH0sXG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgTXlSZXNvdXJjZTE6IHsgVHlwZTogJ1Jlc291cmNlVHlwZTEnLCBQcm9wZXJ0aWVzOiB7IFAxOiAxLCBQMjogMiB9IH0sXG4gICAgICAgIE15UmVzb3VyY2UyOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUyJyB9IH0gfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaW5jbHVkZWQgdGVtcGxhdGVzIGNhbiBjby1leGlzdCB3aXRoIGVsZW1lbnRzIGNyZWF0ZWQgcHJvZ3JhbW1hdGljYWxseScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICBuZXcgSW5jbHVkZShzdGFjaywgJ1QxJywgeyB0ZW1wbGF0ZTogY2xvbmUodGVtcGxhdGUpIH0pO1xuICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UzJywgeyB0eXBlOiAnUmVzb3VyY2VUeXBlMycsIHByb3BlcnRpZXM6IHsgUDM6ICdIZWxsbycgfSB9KTtcbiAgICBuZXcgT3V0cHV0KHN0YWNrLCAnTXlPdXRwdXQnLCB7IGRlc2NyaXB0aW9uOiAnT3V0IScsIGRpc2FibGVFeHBvcnQ6IHRydWUgfSk7XG4gICAgbmV3IFBhcmFtZXRlcihzdGFjaywgJ015UGFyYW0yJywgeyB0eXBlOiAnSW50ZWdlcicgfSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgTXlQYXJhbTogeyBUeXBlOiAnU3RyaW5nJywgRGVmYXVsdDogJ0hlbGxvJyB9LFxuICAgICAgICBNeVBhcmFtMjogeyBUeXBlOiAnSW50ZWdlcicgfSB9LFxuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE15UmVzb3VyY2UxOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUxJywgUHJvcGVydGllczogeyBQMTogMSwgUDI6IDIgfSB9LFxuICAgICAgICBNeVJlc291cmNlMjogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMicgfSxcbiAgICAgICAgTXlSZXNvdXJjZTM6IHsgVHlwZTogJ1Jlc291cmNlVHlwZTMnLCBQcm9wZXJ0aWVzOiB7IFAzOiAnSGVsbG8nIH0gfSB9LFxuICAgICAgIE91dHB1dHM6IHtcbiAgICAgICAgIE15T3V0cHV0OiB7IERlc2NyaXB0aW9uOiAnT3V0IScgfSB9IH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2V4Y2VwdGlvbiBpcyB0aHJvd24gaW4gY29uc3RydWN0aW9uIGlmIGFuIGVudGl0eSBmcm9tIGFuIGluY2x1ZGVkIHRlbXBsYXRlIGhhcyB0aGUgc2FtZSBpZCBhcyBhIHByb2dyYW1tYXRpYyBlbnRpdHknKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgbmV3IEluY2x1ZGUoc3RhY2ssICdUMScsIHsgdGVtcGxhdGUgfSk7XG4gICAgbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZTMnLCB7IHR5cGU6ICdSZXNvdXJjZVR5cGUzJywgcHJvcGVydGllczogeyBQMzogJ0hlbGxvJyB9IH0pO1xuICAgIG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcsIHsgZGVzY3JpcHRpb246ICdPdXQhJyB9KTtcbiAgICBuZXcgUGFyYW1ldGVyKHN0YWNrLCAnTXlQYXJhbScsIHsgdHlwZTogJ0ludGVnZXInIH0pOyAvLyBkdXBsaWNhdGUhXG5cbiAgICB0ZXN0LnRocm93cygoKSA9PiBzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCkpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxufTtcblxuY29uc3QgdGVtcGxhdGUgPSB7XG4gIFBhcmFtZXRlcnM6IHtcbiAgICBNeVBhcmFtOiB7XG4gICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgIERlZmF1bHQ6ICdIZWxsbydcbiAgICB9XG4gIH0sXG4gIFJlc291cmNlczoge1xuICAgIE15UmVzb3VyY2UxOiB7XG4gICAgICBUeXBlOiAnUmVzb3VyY2VUeXBlMScsXG4gICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgIFAxOiAxLFxuICAgICAgICBQMjogMixcbiAgICAgIH1cbiAgICB9LFxuICAgIE15UmVzb3VyY2UyOiB7XG4gICAgICBUeXBlOiAnUmVzb3VyY2VUeXBlMidcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIG9iaiBhbiBvYmplY3QgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgZGVlcCBjbG9uZSBvZiBgYG9iamAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lKG9iajogYW55KTogYW55IHtcbiAgc3dpdGNoICh0eXBlb2Ygb2JqKSB7XG4gIGNhc2UgJ29iamVjdCc6XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoZWx0ID0+IGNsb25lKGVsdCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbG9uZWQ6IGFueSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICBjbG9uZWRba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuICBkZWZhdWx0OlxuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiJdfQ==

@@ -196,2 +196,2 @@ "use strict";

module.exports = exp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5sb2dpY2FsLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5sb2dpY2FsLWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBdUc7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNoQiwwRkFBMEYsQ0FBQyxJQUFVO1FBQ2pHLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksNEJBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEcsTUFBTSxDQUFDLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksY0FBUSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksY0FBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU1QyxxQkFBcUI7UUFFckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpRUFBaUUsQ0FBQyxJQUFVO1FBQ3hFLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksNEJBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEcsT0FBTztRQUNQLE1BQU0sQ0FBQyxHQUFHLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVyRSxPQUFPO1FBQ1AsSUFBSSxDQUFDLEtBQUss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dCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJQWRkcmVzc2luZ1NjaGVtZSwgUmVmLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG4vKipcbiAqIFRoZXNlIHRlc3RzIGFyZSBleGVjdXRlZCBvbmNlIChmb3Igc3BlY2lmaWMgSUQgc2NoZW1lcylcbiAqL1xuY29uc3QgdW5pcXVlVGVzdHMgPSB7XG4gICAgJ2lmIHRoZSBuYW1pbmcgc2NoZW1lIHVuaXF1aWZpZXMgd2l0aCBhIGhhc2ggd2UgY2FuIGhhdmUgdGhlIHNhbWUgY29uY2F0ZW5hdGVkIGlkZW50aWZpZXInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBuYW1pbmdTY2hlbWU6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCkgfSk7XG5cbiAgICAgICAgY29uc3QgQSA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdBJyk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShBLCAnQkMnLCB7IHR5cGU6ICdSZXNvdXJjZScgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBBQiA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdBQicpO1xuICAgICAgICBuZXcgUmVzb3VyY2UoQUIsICdDJywgeyB0eXBlOiAnUmVzb3VyY2UnIH0pO1xuXG4gICAgICAgIC8vIFRIRU46IG5vIGV4Y2VwdGlvblxuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnc3BlY2lhbCBjYXNlOiBpZiB0aGUgcmVzb3VyY2UgaXMgdG9wLWxldmVsLCBhIGhhc2ggaXMgbm90IGFkZGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgbmFtaW5nU2NoZW1lOiBuZXcgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgciA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ015QXdlc29tZW5lc3MnLCB7IHR5cGU6ICdSZXNvdXJjZScgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmVxdWFsKHIubG9naWNhbElkLCAnTXlBd2Vzb21lbmVzcycpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnTG9naWNhbCBJRHMgY2FuIGJlIHJlbmFtZWQgYXQgdGhlIHN0YWNrIGxldmVsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIHN0YWNrLnJlbmFtZUxvZ2ljYWwoJ1BhcmVudFRoaW5nUmVzb3VyY2U3NUQxRDlDQicsICdSZW5hbWVkJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwYXJlbnQgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnUGFyZW50Jyk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShwYXJlbnQsICdUaGluZ1Jlc291cmNlJywgeyB0eXBlOiAnQVdTOjpUQUFTOjpUaGluZycgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKTtcbiAgICAgICAgdGVzdC5vaygnUmVuYW1lZCcgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1JlbmFtZXMgZm9yIG9iamVjdHMgdGhhdCBkb25cXCd0IGV4aXN0IGZhaWwnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgc3RhY2sucmVuYW1lTG9naWNhbCgnRE9FU05PVEVYSVNUJywgJ1JlbmFtZWQnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdQYXJlbnQnKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAgIHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdJRCBSZW5hbWVzIHRoYXQgY29sbGlkZSB3aXRoIGV4aXN0aW5nIElEcyBzaG91bGQgZmFpbCcodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBzdGFjay5yZW5hbWVMb2dpY2FsKCdQYXJlbnRUaGluZ1Jlc291cmNlMTkxNkU3ODA4JywgJ1BhcmVudFRoaW5nUmVzb3VyY2UyRjE5OTQ4Q0InKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdQYXJlbnQnKTtcbiAgICAgICAgbmV3IFJlc291cmNlKHBhcmVudCwgJ1RoaW5nUmVzb3VyY2UxJywgeyB0eXBlOiAnQVdTOjpUQUFTOjpUaGluZycgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICAgICAgICBuZXcgUmVzb3VyY2UocGFyZW50LCAnVGhpbmdSZXNvdXJjZTInLCB7IHR5cGU6ICdBV1M6OlRBQVM6OlRoaW5nJyB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdoYXNoZWQgbmFtaW5nIHNjaGVtZSBmaWx0ZXJzIGNvbnN0cnVjdHMgbmFtZWQgXCJSZXNvdXJjZVwiIGZyb20gdGhlIGh1bWFuIHBvcnRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdQYXJlbnQnKTtcbiAgICAgICAgY29uc3QgY2hpbGQxID0gbmV3IENvbnN0cnVjdChwYXJlbnQsICdDaGlsZCcpO1xuICAgICAgICBjb25zdCBjaGlsZDIgPSBuZXcgQ29uc3RydWN0KGNoaWxkMSwgJ1Jlc291cmNlJyk7XG5cbiAgICAgICAgbmV3IFJlc291cmNlKGNoaWxkMiwgJ0hleVRoZXJlJywgeyB0eXBlOiAnQVdTOjpUQUFTOjpUaGluZycgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwodGVtcGxhdGUsIHtcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIFBhcmVudENoaWxkSGV5VGhlcmUzNTIyMDM0Nzoge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiAnQVdTOjpUQUFTOjpUaGluZydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY2FuIHRyYW5zcGFyZW50bHkgd3JhcCBjb25zdHJ1Y3RzIHVzaW5nIFwiRGVmYXVsdFwiIGlkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHN0YWNrMSA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCBwYXJlbnQxID0gbmV3IENvbnN0cnVjdChzdGFjazEsICdQYXJlbnQnKTtcbiAgICAgICAgbmV3IFJlc291cmNlKHBhcmVudDEsICdIZXlUaGVyZScsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZTEgPSBzdGFjazEudG9DbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgICAgIC8vIEFORFxuICAgICAgICBjb25zdCB0aGVJZDEgPSBPYmplY3Qua2V5cyh0ZW1wbGF0ZTEuUmVzb3VyY2VzKVswXTtcbiAgICAgICAgdGVzdC5lcXVhbCgnQVdTOjpUQUFTOjpUaGluZycsIHRlbXBsYXRlMS5SZXNvdXJjZXNbdGhlSWQxXS5UeXBlKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHN0YWNrMiA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCBwYXJlbnQyID0gbmV3IENvbnN0cnVjdChzdGFjazIsICdQYXJlbnQnKTtcbiAgICAgICAgY29uc3QgaW52aXNpYmxlV3JhcHBlciA9IG5ldyBDb25zdHJ1Y3QocGFyZW50MiwgJ0RlZmF1bHQnKTtcbiAgICAgICAgbmV3IFJlc291cmNlKGludmlzaWJsZVdyYXBwZXIsICdIZXlUaGVyZScsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZTIgPSBzdGFjazEudG9DbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IHRoZUlkMiA9IE9iamVjdC5rZXlzKHRlbXBsYXRlMi5SZXNvdXJjZXMpWzBdO1xuICAgICAgICB0ZXN0LmVxdWFsKCdBV1M6OlRBQVM6OlRoaW5nJywgdGVtcGxhdGUyLlJlc291cmNlc1t0aGVJZDJdLlR5cGUpO1xuXG4gICAgICAgIC8vIFRIRU46IHNhbWUgSUQsIHNhbWUgb2JqZWN0XG4gICAgICAgIHRlc3QuZXF1YWwodGhlSWQxLCB0aGVJZDIpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSByZW1vdmVkIGZyb20gdGhlIGh1bWFuIHBhcnQgb2YgdGhlIGxvZ2ljYWwgSUQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1lID0gbmV3IEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUoKTtcbiAgICAgICAgY29uc3QgdmFsMSA9IHNjaGVtZS5hbGxvY2F0ZUFkZHJlc3MoWyAnRm9vLWJhcicsICdCMDBtJywgJ0hlbGxvX1dvcmxkJywgJyYmSG9ycmF5IEhvcnJheS4nIF0pO1xuICAgICAgICBjb25zdCB2YWwyID0gc2NoZW1lLmFsbG9jYXRlQWRkcmVzcyhbICdGb29iYXInLCAnQjAwbScsICdIZWxsb1dvcmxkJywgJ0hvcnJheUhvcnJheScgXSk7XG5cbiAgICAgICAgLy8gc2FtZSBodW1hbiBwYXJ0LCBkaWZmZXJlbnQgaGFzaFxuICAgICAgICB0ZXN0LmRlZXBFcXVhbCh2YWwxLCAnRm9vYmFyQjAwbUhlbGxvV29ybGRIb3JyYXlIb3JyYXk2NDBFOTlGQicpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbCh2YWwyLCAnRm9vYmFyQjAwbUhlbGxvV29ybGRIb3JyYXlIb3JyYXk3NDQzMzRGRCcpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuXG5jb25zdCBzY2hlbWVzOiB7W25hbWU6IHN0cmluZ106IElBZGRyZXNzaW5nU2NoZW1lfSA9IHtcbiAgICBcImhhc2hpbmcgc2NoZW1lXCI6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCksXG59O1xuXG4vKipcbiAqIFRoZXNlIHRlc3RzIGFyZSBleGVjdXRlZCBmb3IgYWxsIGdlbmVyYXRvcnNcbiAqL1xuY29uc3QgYWxsU2NoZW1lc1Rlc3RzOiB7W25hbWU6IHN0cmluZ106IChzY2hlbWU6IElBZGRyZXNzaW5nU2NoZW1lLCB0ZXN0OiBUZXN0KSA9PiB2b2lkIH0gPSB7XG4gICAgJ2VtcHR5IGlkZW50aWZpZXJzIGFyZSBub3QgYWxsb3dlZCcoc2NoZW1lOiBJQWRkcmVzc2luZ1NjaGVtZSwgdGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogc2NoZW1lIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJy4nLCB7IHR5cGU6ICdSJyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9vIGxhcmdlIGlkZW50aWZpZXJzIGFyZSB0cnVuY2F0ZWQgeWV0IHN0aWxsIHJlbWFpbiB1bmlxdWUnKHNjaGVtZTogSUFkZHJlc3NpbmdTY2hlbWUsIHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBuYW1pbmdTY2hlbWU6IHNjaGVtZSB9KTtcblxuICAgICAgICBjb25zdCBBID0gbmV3IENvbnN0cnVjdChzdGFjaywgZ2VuZXJhdGVTdHJpbmcoMTAwKSk7XG4gICAgICAgIGNvbnN0IEIgPSBuZXcgQ29uc3RydWN0KEEsIGdlbmVyYXRlU3RyaW5nKDEwMCkpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gZ2VuZXJhdGVTdHJpbmcoNjApO1xuICAgICAgICAvLyBUaGUgc2hhcmVkIHBhcnQgaGFzIG5vdyBleGNlZWRlZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgQ2xvdWRGb3JtYXRpb24gaWRlbnRpZmllcnNcbiAgICAgICAgLy8gc28gdGhlIGlkZW50aXR5IGdlbmVyYXRvciB3aWxsIGhhdmUgdG8gc29tZXRoaW5nIHNtYXJ0XG5cbiAgICAgICAgY29uc3QgQzEgPSBuZXcgUmVzb3VyY2UoQiwgZmlyc3RQYXJ0ICsgZ2VuZXJhdGVTdHJpbmcoNDApLCB7IHR5cGU6ICdSZXNvdXJjZScgfSk7XG4gICAgICAgIGNvbnN0IEMyID0gbmV3IFJlc291cmNlKEIsIGZpcnN0UGFydCArIGdlbmVyYXRlU3RyaW5nKDQwKSwgeyB0eXBlOiAnUmVzb3VyY2UnIH0pO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5vayhDMS5sb2dpY2FsSWQubGVuZ3RoIDw9IDI1NSk7XG4gICAgICAgIHRlc3Qub2soQzIubG9naWNhbElkLmxlbmd0aCA8PSAyNTUpO1xuICAgICAgICB0ZXN0Lm5vdEVxdWFsKEMxLCBDMik7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdSZWZzIGFuZCBkZXBlbmRlbmNpZXMgd2lsbCBjb3JyZWN0bHkgcmVmbGVjdCByZW5hbWVzIGRvbmUgYXQgdGhlIHN0YWNrIGxldmVsJyhzY2hlbWU6IElBZGRyZXNzaW5nU2NoZW1lLCB0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgbmFtaW5nU2NoZW1lOiBzY2hlbWUgfSk7XG4gICAgICAgIHN0YWNrLnJlbmFtZUxvZ2ljYWwoJ09yaWdpbmFsTmFtZScsICdOZXdOYW1lJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBjMSA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ09yaWdpbmFsTmFtZScsIHsgdHlwZTogJ1IxJyB9KTtcbiAgICAgICAgY29uc3QgcmVmID0gbmV3IFJlZihjMSk7XG5cbiAgICAgICAgY29uc3QgYzIgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdDb25zdHJ1Y3QyJywgeyB0eXBlOiAnUjInLCBwcm9wZXJ0aWVzOiB7IFJlZmVyZW5jZVRvUjE6IHJlZiB9IH0pO1xuICAgICAgICBjMi5hZGREZXBlbmRlbmN5KGMxKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgW2MxLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogJ1IxJyB9LFxuICAgICAgICAgICAgICAgIFtjMi5sb2dpY2FsSWRdOiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdSMicsXG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZVRvUjE6IHsgUmVmOiBjMS5sb2dpY2FsSWQgfSB9LFxuICAgICAgICAgICAgICAgICAgICBEZXBlbmRzT246IFsgYzEubG9naWNhbElkIF0gfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG59O1xuXG4vLyBDb21iaW5lIHRoZSBvbmUtb2ZmIHRlc3RzIGFuZCBnZW5lcmF0ZSB0ZXN0cyBmb3IgZWFjaCBzY2hlbWVcbmNvbnN0IGV4cDogYW55ID0gdW5pcXVlVGVzdHM7XG5PYmplY3Qua2V5cyhzY2hlbWVzKS5mb3JFYWNoKHNjaGVtZU5hbWUgPT4ge1xuICAgIGNvbnN0IHNjaGVtZSA9IHNjaGVtZXNbc2NoZW1lTmFtZV07XG4gICAgT2JqZWN0LmtleXMoYWxsU2NoZW1lc1Rlc3RzKS5mb3JFYWNoKHRlc3ROYW1lID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEZ1bmN0aW9uID0gYWxsU2NoZW1lc1Rlc3RzW3Rlc3ROYW1lXTtcbiAgICAgICAgZXhwW2Ake3NjaGVtZU5hbWV9OiAke3Rlc3ROYW1lfWBdID0gKHRlc3Q6IFRlc3QpID0+IHtcbiAgICAgICAgICAgIHRlc3RGdW5jdGlvbihzY2hlbWUsIHRlc3QpO1xuICAgICAgICB9O1xuICAgIH0pO1xufSk7XG5cbmV4cG9ydCA9IGV4cDtcblxuZnVuY3Rpb24gZ2VuZXJhdGVTdHJpbmcoY2hhcnM6IG51bWJlcikge1xuICAgIGxldCBzID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyczsgKytpKSB7XG4gICAgICAgIHMgKz0gcmFuZG9tQWxwaGEoKTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG5cbiAgICBmdW5jdGlvbiByYW5kb21BbHBoYSgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNikpO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5sb2dpY2FsLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5sb2dpY2FsLWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBdUc7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQiwwRkFBMEYsQ0FBQyxJQUFVO1FBQ25HLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksNEJBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEcsTUFBTSxDQUFDLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksY0FBUSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksY0FBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU1QyxxQkFBcUI7UUFFckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlFQUFpRSxDQUFDLElBQVU7UUFDMUUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSw0QkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVoRyxPQUFPO1FBQ1AsTUFBTSxDQUFDLEdBQUcsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLE9BQU87UUFDUCxJQUFJLENBQUMsS0FBSyxD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eyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJQWRkcmVzc2luZ1NjaGVtZSwgUmVmLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG4vKipcbiAqIFRoZXNlIHRlc3RzIGFyZSBleGVjdXRlZCBvbmNlIChmb3Igc3BlY2lmaWMgSUQgc2NoZW1lcylcbiAqL1xuY29uc3QgdW5pcXVlVGVzdHMgPSB7XG4gICdpZiB0aGUgbmFtaW5nIHNjaGVtZSB1bmlxdWlmaWVzIHdpdGggYSBoYXNoIHdlIGNhbiBoYXZlIHRoZSBzYW1lIGNvbmNhdGVuYXRlZCBpZGVudGlmaWVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogbmV3IEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUoKSB9KTtcblxuICAgIGNvbnN0IEEgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQScpO1xuICAgIG5ldyBSZXNvdXJjZShBLCAnQkMnLCB7IHR5cGU6ICdSZXNvdXJjZScgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgQUIgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQUInKTtcbiAgICBuZXcgUmVzb3VyY2UoQUIsICdDJywgeyB0eXBlOiAnUmVzb3VyY2UnIH0pO1xuXG4gICAgLy8gVEhFTjogbm8gZXhjZXB0aW9uXG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc3BlY2lhbCBjYXNlOiBpZiB0aGUgcmVzb3VyY2UgaXMgdG9wLWxldmVsLCBhIGhhc2ggaXMgbm90IGFkZGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogbmV3IEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUoKSB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCByID0gbmV3IFJlc291cmNlKHN0YWNrLCAnTXlBd2Vzb21lbmVzcycsIHsgdHlwZTogJ1Jlc291cmNlJyB9KTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LmVxdWFsKHIubG9naWNhbElkLCAnTXlBd2Vzb21lbmVzcycpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0xvZ2ljYWwgSURzIGNhbiBiZSByZW5hbWVkIGF0IHRoZSBzdGFjayBsZXZlbCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBzdGFjay5yZW5hbWVMb2dpY2FsKCdQYXJlbnRUaGluZ1Jlc291cmNlNzVEMUQ5Q0InLCAnUmVuYW1lZCcpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHBhcmVudCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdQYXJlbnQnKTtcbiAgICBuZXcgUmVzb3VyY2UocGFyZW50LCAnVGhpbmdSZXNvdXJjZScsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IHRlbXBsYXRlID0gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpO1xuICAgIHRlc3Qub2soJ1JlbmFtZWQnIGluIHRlbXBsYXRlLlJlc291cmNlcyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnUmVuYW1lcyBmb3Igb2JqZWN0cyB0aGF0IGRvblxcJ3QgZXhpc3QgZmFpbCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBzdGFjay5yZW5hbWVMb2dpY2FsKCdET0VTTk9URVhJU1QnLCAnUmVuYW1lZCcpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdQYXJlbnQnKTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICBzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnSUQgUmVuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBleGlzdGluZyBJRHMgc2hvdWxkIGZhaWwnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgc3RhY2sucmVuYW1lTG9naWNhbCgnUGFyZW50VGhpbmdSZXNvdXJjZTE5MTZFNzgwOCcsICdQYXJlbnRUaGluZ1Jlc291cmNlMkYxOTk0OENCJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcGFyZW50ID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ1BhcmVudCcpO1xuICAgIG5ldyBSZXNvdXJjZShwYXJlbnQsICdUaGluZ1Jlc291cmNlMScsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgIG5ldyBSZXNvdXJjZShwYXJlbnQsICdUaGluZ1Jlc291cmNlMicsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2hhc2hlZCBuYW1pbmcgc2NoZW1lIGZpbHRlcnMgY29uc3RydWN0cyBuYW1lZCBcIlJlc291cmNlXCIgZnJvbSB0aGUgaHVtYW4gcG9ydGlvbicodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwYXJlbnQgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnUGFyZW50Jyk7XG4gICAgY29uc3QgY2hpbGQxID0gbmV3IENvbnN0cnVjdChwYXJlbnQsICdDaGlsZCcpO1xuICAgIGNvbnN0IGNoaWxkMiA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxLCAnUmVzb3VyY2UnKTtcblxuICAgIG5ldyBSZXNvdXJjZShjaGlsZDIsICdIZXlUaGVyZScsIHsgdHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IHRlbXBsYXRlID0gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHRlbXBsYXRlLCB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgUGFyZW50Q2hpbGRIZXlUaGVyZTM1MjIwMzQ3OiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6VEFBUzo6VGhpbmcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjYW4gdHJhbnNwYXJlbnRseSB3cmFwIGNvbnN0cnVjdHMgdXNpbmcgXCJEZWZhdWx0XCIgaWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrMSA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IHBhcmVudDEgPSBuZXcgQ29uc3RydWN0KHN0YWNrMSwgJ1BhcmVudCcpO1xuICAgIG5ldyBSZXNvdXJjZShwYXJlbnQxLCAnSGV5VGhlcmUnLCB7IHR5cGU6ICdBV1M6OlRBQVM6OlRoaW5nJyB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZTEgPSBzdGFjazEudG9DbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgLy8gQU5EXG4gICAgY29uc3QgdGhlSWQxID0gT2JqZWN0LmtleXModGVtcGxhdGUxLlJlc291cmNlcylbMF07XG4gICAgdGVzdC5lcXVhbCgnQVdTOjpUQUFTOjpUaGluZycsIHRlbXBsYXRlMS5SZXNvdXJjZXNbdGhlSWQxXS5UeXBlKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzdGFjazIgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBwYXJlbnQyID0gbmV3IENvbnN0cnVjdChzdGFjazIsICdQYXJlbnQnKTtcbiAgICBjb25zdCBpbnZpc2libGVXcmFwcGVyID0gbmV3IENvbnN0cnVjdChwYXJlbnQyLCAnRGVmYXVsdCcpO1xuICAgIG5ldyBSZXNvdXJjZShpbnZpc2libGVXcmFwcGVyLCAnSGV5VGhlcmUnLCB7IHR5cGU6ICdBV1M6OlRBQVM6OlRoaW5nJyB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZTIgPSBzdGFjazEudG9DbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgY29uc3QgdGhlSWQyID0gT2JqZWN0LmtleXModGVtcGxhdGUyLlJlc291cmNlcylbMF07XG4gICAgdGVzdC5lcXVhbCgnQVdTOjpUQUFTOjpUaGluZycsIHRlbXBsYXRlMi5SZXNvdXJjZXNbdGhlSWQyXS5UeXBlKTtcblxuICAgIC8vIFRIRU46IHNhbWUgSUQsIHNhbWUgb2JqZWN0XG4gICAgdGVzdC5lcXVhbCh0aGVJZDEsIHRoZUlkMik7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSByZW1vdmVkIGZyb20gdGhlIGh1bWFuIHBhcnQgb2YgdGhlIGxvZ2ljYWwgSUQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzY2hlbWUgPSBuZXcgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpO1xuICAgIGNvbnN0IHZhbDEgPSBzY2hlbWUuYWxsb2NhdGVBZGRyZXNzKFsgJ0Zvby1iYXInLCAnQjAwbScsICdIZWxsb19Xb3JsZCcsICcmJkhvcnJheSBIb3JyYXkuJyBdKTtcbiAgICBjb25zdCB2YWwyID0gc2NoZW1lLmFsbG9jYXRlQWRkcmVzcyhbICdGb29iYXInLCAnQjAwbScsICdIZWxsb1dvcmxkJywgJ0hvcnJheUhvcnJheScgXSk7XG5cbiAgICAvLyBzYW1lIGh1bWFuIHBhcnQsIGRpZmZlcmVudCBoYXNoXG4gICAgdGVzdC5kZWVwRXF1YWwodmFsMSwgJ0Zvb2JhckIwMG1IZWxsb1dvcmxkSG9ycmF5SG9ycmF5NjQwRTk5RkInKTtcbiAgICB0ZXN0LmRlZXBFcXVhbCh2YWwyLCAnRm9vYmFyQjAwbUhlbGxvV29ybGRIb3JyYXlIb3JyYXk3NDQzMzRGRCcpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuXG5jb25zdCBzY2hlbWVzOiB7W25hbWU6IHN0cmluZ106IElBZGRyZXNzaW5nU2NoZW1lfSA9IHtcbiAgXCJoYXNoaW5nIHNjaGVtZVwiOiBuZXcgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpLFxufTtcblxuLyoqXG4gKiBUaGVzZSB0ZXN0cyBhcmUgZXhlY3V0ZWQgZm9yIGFsbCBnZW5lcmF0b3JzXG4gKi9cbmNvbnN0IGFsbFNjaGVtZXNUZXN0czoge1tuYW1lOiBzdHJpbmddOiAoc2NoZW1lOiBJQWRkcmVzc2luZ1NjaGVtZSwgdGVzdDogVGVzdCkgPT4gdm9pZCB9ID0ge1xuICAnZW1wdHkgaWRlbnRpZmllcnMgYXJlIG5vdCBhbGxvd2VkJyhzY2hlbWU6IElBZGRyZXNzaW5nU2NoZW1lLCB0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogc2NoZW1lIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICcuJywgeyB0eXBlOiAnUicgfSk7XG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3RvbyBsYXJnZSBpZGVudGlmaWVycyBhcmUgdHJ1bmNhdGVkIHlldCBzdGlsbCByZW1haW4gdW5pcXVlJyhzY2hlbWU6IElBZGRyZXNzaW5nU2NoZW1lLCB0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogc2NoZW1lIH0pO1xuXG4gICAgY29uc3QgQSA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssIGdlbmVyYXRlU3RyaW5nKDEwMCkpO1xuICAgIGNvbnN0IEIgPSBuZXcgQ29uc3RydWN0KEEsIGdlbmVyYXRlU3RyaW5nKDEwMCkpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGZpcnN0UGFydCA9IGdlbmVyYXRlU3RyaW5nKDYwKTtcbiAgICAvLyBUaGUgc2hhcmVkIHBhcnQgaGFzIG5vdyBleGNlZWRlZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgQ2xvdWRGb3JtYXRpb24gaWRlbnRpZmllcnNcbiAgICAvLyBzbyB0aGUgaWRlbnRpdHkgZ2VuZXJhdG9yIHdpbGwgaGF2ZSB0byBzb21ldGhpbmcgc21hcnRcblxuICAgIGNvbnN0IEMxID0gbmV3IFJlc291cmNlKEIsIGZpcnN0UGFydCArIGdlbmVyYXRlU3RyaW5nKDQwKSwgeyB0eXBlOiAnUmVzb3VyY2UnIH0pO1xuICAgIGNvbnN0IEMyID0gbmV3IFJlc291cmNlKEIsIGZpcnN0UGFydCArIGdlbmVyYXRlU3RyaW5nKDQwKSwgeyB0eXBlOiAnUmVzb3VyY2UnIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3Qub2soQzEubG9naWNhbElkLmxlbmd0aCA8PSAyNTUpO1xuICAgIHRlc3Qub2soQzIubG9naWNhbElkLmxlbmd0aCA8PSAyNTUpO1xuICAgIHRlc3Qubm90RXF1YWwoQzEsIEMyKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdSZWZzIGFuZCBkZXBlbmRlbmNpZXMgd2lsbCBjb3JyZWN0bHkgcmVmbGVjdCByZW5hbWVzIGRvbmUgYXQgdGhlIHN0YWNrIGxldmVsJyhzY2hlbWU6IElBZGRyZXNzaW5nU2NoZW1lLCB0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IG5hbWluZ1NjaGVtZTogc2NoZW1lIH0pO1xuICAgIHN0YWNrLnJlbmFtZUxvZ2ljYWwoJ09yaWdpbmFsTmFtZScsICdOZXdOYW1lJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgYzEgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdPcmlnaW5hbE5hbWUnLCB7IHR5cGU6ICdSMScgfSk7XG4gICAgY29uc3QgcmVmID0gbmV3IFJlZihjMSk7XG5cbiAgICBjb25zdCBjMiA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ0NvbnN0cnVjdDInLCB7IHR5cGU6ICdSMicsIHByb3BlcnRpZXM6IHsgUmVmZXJlbmNlVG9SMTogcmVmIH0gfSk7XG4gICAgYzIuYWRkRGVwZW5kZW5jeShjMSk7XG5cbiAgICAvLyBUSEVOXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgW2MxLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICBUeXBlOiAnUjEnIH0sXG4gICAgICAgIFtjMi5sb2dpY2FsSWRdOiB7XG4gICAgICAgICAgVHlwZTogJ1IyJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBSZWZlcmVuY2VUb1IxOiB7IFJlZjogYzEubG9naWNhbElkIH0gfSxcbiAgICAgICAgICBEZXBlbmRzT246IFsgYzEubG9naWNhbElkIF0gfSB9IH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59O1xuXG4vLyBDb21iaW5lIHRoZSBvbmUtb2ZmIHRlc3RzIGFuZCBnZW5lcmF0ZSB0ZXN0cyBmb3IgZWFjaCBzY2hlbWVcbmNvbnN0IGV4cDogYW55ID0gdW5pcXVlVGVzdHM7XG5PYmplY3Qua2V5cyhzY2hlbWVzKS5mb3JFYWNoKHNjaGVtZU5hbWUgPT4ge1xuICBjb25zdCBzY2hlbWUgPSBzY2hlbWVzW3NjaGVtZU5hbWVdO1xuICBPYmplY3Qua2V5cyhhbGxTY2hlbWVzVGVzdHMpLmZvckVhY2godGVzdE5hbWUgPT4ge1xuICAgIGNvbnN0IHRlc3RGdW5jdGlvbiA9IGFsbFNjaGVtZXNUZXN0c1t0ZXN0TmFtZV07XG4gICAgZXhwW2Ake3NjaGVtZU5hbWV9OiAke3Rlc3ROYW1lfWBdID0gKHRlc3Q6IFRlc3QpID0+IHtcbiAgICAgIHRlc3RGdW5jdGlvbihzY2hlbWUsIHRlc3QpO1xuICAgIH07XG4gIH0pO1xufSk7XG5cbmV4cG9ydCA9IGV4cDtcblxuZnVuY3Rpb24gZ2VuZXJhdGVTdHJpbmcoY2hhcnM6IG51bWJlcikge1xuICBsZXQgcyA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzOyArK2kpIHtcbiAgICBzICs9IHJhbmRvbUFscGhhKCk7XG4gIH1cbiAgcmV0dXJuIHM7XG5cbiAgZnVuY3Rpb24gcmFuZG9tQWxwaGEoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNikpO1xuICB9XG59XG4iXX0=

@@ -35,2 +35,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5tYXBwaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QubWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUFxRDtBQUVyRCxpQkFBUztJQUNMLG1HQUFtRyxDQUFDLElBQVU7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFO2dCQUN2RCxZQUFZLEVBQUU7b0JBQ1YsZUFBZSxFQUFFLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7b0JBQzVCLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7aUJBQ3RDO2dCQUNELFlBQVksRUFBRTtvQkFDVixlQUFlLEVBQUUsQ0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRTtpQkFDbEM7YUFDSixFQUFFLENBQUMsQ0FBQztRQUVMLDRDQUE0QztRQUM1QyxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQzlCLElBQUksRUFBRSxHQUFHO1lBQ1QsVUFBVSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQzthQUN4RTtTQUNKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztRQUVoSCx1REFBdUQ7UUFDdkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQy9DLEVBQUUsU0FBUyxFQUNSLEVBQUUsWUFBWSxFQUNYLEVBQUUsZUFBZSxFQUFFLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFO3dCQUMvQixlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3hDLFlBQVksRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDbEYsU0FBUyxFQUNSLEVBQUUsVUFBVSxFQUNULEVBQUUsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsVUFBVSxFQUNULEVBQUUsZUFBZSxFQUNkLEVBQUUsZUFBZSxFQUFFLENBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBNYXBwaW5nLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ21hcHBpbmdzIGNhbiBiZSBhZGRlZCBhcyBhbm90aGVyIHR5cGUgb2YgZW50aXR5LCBhbmQgbWFwcGluZy5maW5kSW5NYXAgY2FuIGJlIHVzZWQgdG8gZ2V0IGEgdG9rZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXBwaW5nKHN0YWNrLCAnTXlNYXBwaW5nJywgeyBtYXBwaW5nOiB7XG4gICAgICAgICAgICBUb3BMZXZlbEtleTE6IHtcbiAgICAgICAgICAgICAgICBTZWNvbmRMZXZlbEtleTE6IFsgMSwgMiwgMyBdLFxuICAgICAgICAgICAgICAgIFNlY29uZExldmVsS2V5MjogeyBIZWxsbzogJ1dvcmxkJyB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVG9wTGV2ZWxLZXkyOiB7XG4gICAgICAgICAgICAgICAgU2Vjb25kTGV2ZWxLZXkxOiBbIDk5LCA5OSwgOTkgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9IH0pO1xuXG4gICAgICAgIC8vIGZpbmRJbk1hcCBjYW4gYmUgdXNlZCB0byB0YWtlIGEgcmVmZXJlbmNlXG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UnLCB7XG4gICAgICAgICAgICB0eXBlOiAnUicsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgUmVmVG9WYWx1ZUluTWFwOiBtYXBwaW5nLmZpbmRJbk1hcCgnVG9wTGV2ZWxLZXkxJywgJ1NlY29uZExldmVsS2V5MScpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBtYXBwaW5nLmZpbmRJbk1hcCgnTm90Rm91bmRUb3BMZXZlbCcsICdOb3RGb3VuZCcpLCAnY2FudCB0YWtlIGEgcmVmZXJlbmNlIG9uIGEgbm9uIGV4aXN0aW5nIGtleScpO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBtYXBwaW5nLmZpbmRJbk1hcCgnVG9wTGV2ZWxLZXkxJywgJ05vdEZvdW5kJyksICdjYW50IHRha2UgYSByZWZlcmVuY2Ugb24gYSBub24gZXhpc3Rpbmcga2V5Jyk7XG5cbiAgICAgICAgLy8gc2V0IHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldC9tb2RpZnkgYSBzcGVjaWZpYyB2YWx1ZVxuICAgICAgICBtYXBwaW5nLnNldFZhbHVlKCdUb3BMZXZlbEtleTInLCAnU2Vjb25kTGV2ZWxLZXkyJywgJ0hpJyk7XG4gICAgICAgIG1hcHBpbmcuc2V0VmFsdWUoJ1RvcExldmVsS2V5MScsICdTZWNvbmRMZXZlbEtleTEnLCBbIDEsIDIsIDMsIDQgXSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IE1hcHBpbmdzOlxuICAgICAgICAgICAgeyBNeU1hcHBpbmc6XG4gICAgICAgICAgICAgICB7IFRvcExldmVsS2V5MTpcbiAgICAgICAgICAgICAgICAgIHsgU2Vjb25kTGV2ZWxLZXkxOiBbIDEsIDIsIDMsIDQgXSxcbiAgICAgICAgICAgICAgICAgICAgU2Vjb25kTGV2ZWxLZXkyOiB7IEhlbGxvOiAnV29ybGQnIH0gfSxcbiAgICAgICAgICAgICAgICAgVG9wTGV2ZWxLZXkyOiB7IFNlY29uZExldmVsS2V5MTogWyA5OSwgOTksIDk5IF0sIFNlY29uZExldmVsS2V5MjogJ0hpJyB9IH0gfSxcbiAgICAgICAgICAgUmVzb3VyY2VzOlxuICAgICAgICAgICAgeyBNeVJlc291cmNlOlxuICAgICAgICAgICAgICAgeyBUeXBlOiAnUicsXG4gICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAgICB7IFJlZlRvVmFsdWVJbk1hcDpcbiAgICAgICAgICAgICAgICAgICAgIHsgJ0ZuOjpGaW5kSW5NYXAnOiBbICdNeU1hcHBpbmcnLCAnVG9wTGV2ZWxLZXkxJywgJ1NlY29uZExldmVsS2V5MScgXSB9IH0gfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5tYXBwaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QubWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUFxRDtBQUVyRCxpQkFBUztJQUNQLG1HQUFtRyxDQUFDLElBQVU7UUFDNUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFO2dCQUN6RCxZQUFZLEVBQUU7b0JBQ1osZUFBZSxFQUFFLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7b0JBQzVCLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7aUJBQ3BDO2dCQUNELFlBQVksRUFBRTtvQkFDWixlQUFlLEVBQUUsQ0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRTtpQkFDaEM7YUFDRixFQUFFLENBQUMsQ0FBQztRQUVMLDRDQUE0QztRQUM1QyxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ2hDLElBQUksRUFBRSxHQUFHO1lBQ1QsVUFBVSxFQUFFO2dCQUNWLGVBQWUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQzthQUN0RTtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztRQUVoSCx1REFBdUQ7UUFDdkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQ2pELEVBQUUsU0FBUyxFQUNSLEVBQUUsWUFBWSxFQUNiLEVBQUUsZUFBZSxFQUFFLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFO3dCQUNqQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3RDLFlBQVksRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDOUUsU0FBUyxFQUNWLEVBQUUsVUFBVSxFQUNULEVBQUUsSUFBSSxFQUFFLEdBQUc7b0JBQ1gsVUFBVSxFQUNULEVBQUUsZUFBZSxFQUNoQixFQUFFLGVBQWUsRUFBRSxDQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBNYXBwaW5nLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICdtYXBwaW5ncyBjYW4gYmUgYWRkZWQgYXMgYW5vdGhlciB0eXBlIG9mIGVudGl0eSwgYW5kIG1hcHBpbmcuZmluZEluTWFwIGNhbiBiZSB1c2VkIHRvIGdldCBhIHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBtYXBwaW5nID0gbmV3IE1hcHBpbmcoc3RhY2ssICdNeU1hcHBpbmcnLCB7IG1hcHBpbmc6IHtcbiAgICAgIFRvcExldmVsS2V5MToge1xuICAgICAgICBTZWNvbmRMZXZlbEtleTE6IFsgMSwgMiwgMyBdLFxuICAgICAgICBTZWNvbmRMZXZlbEtleTI6IHsgSGVsbG86ICdXb3JsZCcgfVxuICAgICAgfSxcbiAgICAgIFRvcExldmVsS2V5Mjoge1xuICAgICAgICBTZWNvbmRMZXZlbEtleTE6IFsgOTksIDk5LCA5OSBdXG4gICAgICB9XG4gICAgfSB9KTtcblxuICAgIC8vIGZpbmRJbk1hcCBjYW4gYmUgdXNlZCB0byB0YWtlIGEgcmVmZXJlbmNlXG4gICAgbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHtcbiAgICAgIHR5cGU6ICdSJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVmVG9WYWx1ZUluTWFwOiBtYXBwaW5nLmZpbmRJbk1hcCgnVG9wTGV2ZWxLZXkxJywgJ1NlY29uZExldmVsS2V5MScpXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gbWFwcGluZy5maW5kSW5NYXAoJ05vdEZvdW5kVG9wTGV2ZWwnLCAnTm90Rm91bmQnKSwgJ2NhbnQgdGFrZSBhIHJlZmVyZW5jZSBvbiBhIG5vbiBleGlzdGluZyBrZXknKTtcbiAgICB0ZXN0LnRocm93cygoKSA9PiBtYXBwaW5nLmZpbmRJbk1hcCgnVG9wTGV2ZWxLZXkxJywgJ05vdEZvdW5kJyksICdjYW50IHRha2UgYSByZWZlcmVuY2Ugb24gYSBub24gZXhpc3Rpbmcga2V5Jyk7XG5cbiAgICAvLyBzZXQgdmFsdWUgY2FuIGJlIHVzZWQgdG8gc2V0L21vZGlmeSBhIHNwZWNpZmljIHZhbHVlXG4gICAgbWFwcGluZy5zZXRWYWx1ZSgnVG9wTGV2ZWxLZXkyJywgJ1NlY29uZExldmVsS2V5MicsICdIaScpO1xuICAgIG1hcHBpbmcuc2V0VmFsdWUoJ1RvcExldmVsS2V5MScsICdTZWNvbmRMZXZlbEtleTEnLCBbIDEsIDIsIDMsIDQgXSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHsgTWFwcGluZ3M6XG4gICAgICB7IE15TWFwcGluZzpcbiAgICAgICAgIHsgVG9wTGV2ZWxLZXkxOlxuICAgICAgICAgIHsgU2Vjb25kTGV2ZWxLZXkxOiBbIDEsIDIsIDMsIDQgXSxcbiAgICAgICAgICBTZWNvbmRMZXZlbEtleTI6IHsgSGVsbG86ICdXb3JsZCcgfSB9LFxuICAgICAgICAgVG9wTGV2ZWxLZXkyOiB7IFNlY29uZExldmVsS2V5MTogWyA5OSwgOTksIDk5IF0sIFNlY29uZExldmVsS2V5MjogJ0hpJyB9IH0gfSxcbiAgICAgICBSZXNvdXJjZXM6XG4gICAgICB7IE15UmVzb3VyY2U6XG4gICAgICAgICB7IFR5cGU6ICdSJyxcbiAgICAgICAgIFByb3BlcnRpZXM6XG4gICAgICAgICAgeyBSZWZUb1ZhbHVlSW5NYXA6XG4gICAgICAgICAgIHsgJ0ZuOjpGaW5kSW5NYXAnOiBbICdNeU1hcHBpbmcnLCAnVG9wTGV2ZWxLZXkxJywgJ1NlY29uZExldmVsS2V5MScgXSB9IH0gfSB9IH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59O1xuIl19

@@ -58,2 +58,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5vdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0Lm91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTZFO0FBRTdFLGlCQUFTO0lBQ0wsbUNBQW1DLENBQUMsSUFBVTtRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixJQUFJLFlBQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEtBQUssRUFBRSxHQUFHO1lBQ1YsV0FBVyxFQUFFLG1CQUFtQjtTQUNuQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25GLE9BQU8sRUFDTixFQUFFLFFBQVEsRUFDUCxFQUFFLFdBQVcsRUFBRSxtQkFBbUI7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7b0JBQzlCLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsOEJBQThCLENBQUMsSUFBVTtRQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELDJDQUEyQyxDQUFDLElBQVU7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsK0RBQStELENBQUMsSUFBVTtRQUN0RSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEMsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUM5QyxhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLEVBQUUsdURBQXVELENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGlGQUFpRixDQUFDLElBQVU7UUFDeEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQseUVBQXlFLENBQUMsSUFBVTtRQUNoRixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE91dHB1dCwgUmVmLCByZXNvbHZlLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ291dHB1dHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnUicgfSk7XG4gICAgICAgIGNvbnN0IHJlZiA9IG5ldyBSZWYocmVzKTtcblxuICAgICAgICBuZXcgT3V0cHV0KHN0YWNrLCAnTXlPdXRwdXQnLCB7XG4gICAgICAgICAgICBleHBvcnQ6ICdFeHBvcnROYW1lJyxcbiAgICAgICAgICAgIHZhbHVlOiByZWYsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ091dHB1dCBwcm9wZXJ0aWVzJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdSJyB9IH0sXG4gICAgICAgIE91dHB1dHM6XG4gICAgICAgICB7IE15T3V0cHV0OlxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogJ091dHB1dCBwcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAgRXhwb3J0OiB7IE5hbWU6ICdFeHBvcnROYW1lJyB9LFxuICAgICAgICAgICAgICBWYWx1ZTogeyBSZWY6ICdNeVJlc291cmNlJyB9IH0gfSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdvdXRwdXRzIGNhbm5vdCBiZSByZWZlcmVuY2VkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcsIHsgZGVzY3JpcHRpb246ICdNeSBPdXRwdXQnIH0pO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBvdXRwdXQucmVmKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdvdXRwdXRzIGhhdmUgYSBkZWZhdWx0IHVuaXF1ZSBleHBvcnQgbmFtZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdNeVN0YWNrJyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcpO1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdNeUNvbnN0cnVjdCcpO1xuICAgICAgICBjb25zdCBvdXRwdXQyID0gbmV3IE91dHB1dChjaGlsZCwgJ015T3V0cHV0MicpO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dC5leHBvcnQsICdNeVN0YWNrOk15T3V0cHV0Jyk7XG4gICAgICAgIHRlc3QuZXF1YWwob3V0cHV0Mi5leHBvcnQsICdNeVN0YWNrOk15Q29uc3RydWN0TXlPdXRwdXQyNTUzMjJEMTUnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdkaXNhYmxlRXhwb3J0IGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlIGF1dG8tZXhwb3J0IGJlaGF2aW9yJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcsIHsgZGlzYWJsZUV4cG9ydDogdHJ1ZSB9KTtcblxuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dC5leHBvcnQsIG51bGwpO1xuXG4gICAgICAgIC8vIGNhbm5vdCBzcGVjaWZ5IGBleHBvcnRgIGFuZCBgZGlzYWJsZUV4cG9ydGAgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IE91dHB1dChzdGFjaywgJ1lvdXJPdXRwdXQnLCB7XG4gICAgICAgICAgICBkaXNhYmxlRXhwb3J0OiB0cnVlLFxuICAgICAgICAgICAgZXhwb3J0OiAnYmxhJ1xuICAgICAgICB9KSwgL0Nhbm5vdCBzZXQgYGRpc2FibGVFeHBvcnRgIGFuZCBzcGVjaWZ5IGFuIGV4cG9ydCBuYW1lLyk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdpcyBzdGFjayBuYW1lIGlzIHVuZGVmaW5lZCwgd2Ugd2lsbCBvbmx5IHVzZSB0aGUgbG9naWNhbCBJRCBmb3IgdGhlIGV4cG9ydCBuYW1lJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dC5leHBvcnQsICdNeU91dHB1dCcpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ21ha2VJbXBvcnRWYWx1ZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW4gRm46OkltcG9ydFZhbHVlIGZyb20gYW4gb3V0cHV0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ015U3RhY2snKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IE91dHB1dChzdGFjaywgJ015T3V0cHV0Jyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpKSwgeyAnRm46OkltcG9ydFZhbHVlJzogJ015U3RhY2s6TXlPdXRwdXQnIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5vdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0Lm91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTZFO0FBRTdFLGlCQUFTO0lBQ1AsbUNBQW1DLENBQUMsSUFBVTtRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixJQUFJLFlBQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQzVCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEtBQUssRUFBRSxHQUFHO1lBQ1YsV0FBVyxFQUFFLG1CQUFtQjtTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25GLE9BQU8sRUFDTixFQUFFLFFBQVEsRUFDVCxFQUFFLFdBQVcsRUFBRSxtQkFBbUI7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7b0JBQzlCLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxJQUFVO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCwyQ0FBMkMsQ0FBQyxJQUFVO1FBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsK0RBQStELENBQUMsSUFBVTtRQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEMsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNoRCxhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsRUFBRSx1REFBdUQsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxpRkFBaUYsQ0FBQyxJQUFVO1FBQzFGLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQseUVBQXlFLENBQUMsSUFBVTtRQUNsRixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENvbnN0cnVjdCwgT3V0cHV0LCBSZWYsIHJlc29sdmUsIFJlc291cmNlLCBTdGFjayB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ291dHB1dHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgcmVzID0gbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ1InIH0pO1xuICAgIGNvbnN0IHJlZiA9IG5ldyBSZWYocmVzKTtcblxuICAgIG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcsIHtcbiAgICAgIGV4cG9ydDogJ0V4cG9ydE5hbWUnLFxuICAgICAgdmFsdWU6IHJlZixcbiAgICAgIGRlc2NyaXB0aW9uOiAnT3V0cHV0IHByb3BlcnRpZXMnXG4gICAgfSk7XG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdSJyB9IH0sXG4gICAgT3V0cHV0czpcbiAgICAgeyBNeU91dHB1dDpcbiAgICAgIHsgRGVzY3JpcHRpb246ICdPdXRwdXQgcHJvcGVydGllcycsXG4gICAgICAgIEV4cG9ydDogeyBOYW1lOiAnRXhwb3J0TmFtZScgfSxcbiAgICAgICAgVmFsdWU6IHsgUmVmOiAnTXlSZXNvdXJjZScgfSB9IH0gfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ291dHB1dHMgY2Fubm90IGJlIHJlZmVyZW5jZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcsIHsgZGVzY3JpcHRpb246ICdNeSBPdXRwdXQnIH0pO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IG91dHB1dC5yZWYpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdvdXRwdXRzIGhhdmUgYSBkZWZhdWx0IHVuaXF1ZSBleHBvcnQgbmFtZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ015U3RhY2snKTtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgT3V0cHV0KHN0YWNrLCAnTXlPdXRwdXQnKTtcbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdNeUNvbnN0cnVjdCcpO1xuICAgIGNvbnN0IG91dHB1dDIgPSBuZXcgT3V0cHV0KGNoaWxkLCAnTXlPdXRwdXQyJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXQuZXhwb3J0LCAnTXlTdGFjazpNeU91dHB1dCcpO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0Mi5leHBvcnQsICdNeVN0YWNrOk15Q29uc3RydWN0TXlPdXRwdXQyNTUzMjJEMTUnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZGlzYWJsZUV4cG9ydCBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZSBhdXRvLWV4cG9ydCBiZWhhdmlvcicodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IE91dHB1dChzdGFjaywgJ015T3V0cHV0JywgeyBkaXNhYmxlRXhwb3J0OiB0cnVlIH0pO1xuXG4gICAgdGVzdC5lcXVhbChvdXRwdXQuZXhwb3J0LCBudWxsKTtcblxuICAgIC8vIGNhbm5vdCBzcGVjaWZ5IGBleHBvcnRgIGFuZCBgZGlzYWJsZUV4cG9ydGAgYXQgdGhlIHNhbWUgdGltZS5cbiAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgT3V0cHV0KHN0YWNrLCAnWW91ck91dHB1dCcsIHtcbiAgICAgIGRpc2FibGVFeHBvcnQ6IHRydWUsXG4gICAgICBleHBvcnQ6ICdibGEnXG4gICAgfSksIC9DYW5ub3Qgc2V0IGBkaXNhYmxlRXhwb3J0YCBhbmQgc3BlY2lmeSBhbiBleHBvcnQgbmFtZS8pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lzIHN0YWNrIG5hbWUgaXMgdW5kZWZpbmVkLCB3ZSB3aWxsIG9ubHkgdXNlIHRoZSBsb2dpY2FsIElEIGZvciB0aGUgZXhwb3J0IG5hbWUnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcpO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0LmV4cG9ydCwgJ015T3V0cHV0Jyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ21ha2VJbXBvcnRWYWx1ZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW4gRm46OkltcG9ydFZhbHVlIGZyb20gYW4gb3V0cHV0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnTXlTdGFjaycpO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpKSwgeyAnRm46OkltcG9ydFZhbHVlJzogJ015U3RhY2s6TXlPdXRwdXQnIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuIl19

@@ -37,2 +37,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTJFO0FBRTNFLGlCQUFTO0lBQ0wsdURBQXVELENBQUMsSUFBVTtRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBRTFCLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQzFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsb0JBQW9CO1NBQ3BDLENBQUMsQ0FBQztRQUVILElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUNyQyxVQUFVLEVBQUU7Z0JBQ1IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsV0FBVyxFQUFFLG9CQUFvQjtpQkFBRTthQUFFO1lBQzdDLFNBQVMsRUFBRTtnQkFDUCxRQUFRLEVBQUU7b0JBQ04sSUFBSSxFQUFFLE1BQU07b0JBQ1osVUFBVSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO2lCQUFFO2FBQUU7U0FBRSxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RkFBeUYsQ0FBQyxJQUFVO1FBQ2hHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENvbnN0cnVjdCwgUGFyYW1ldGVyLCByZXNvbHZlLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ3BhcmFtZXRlcnMgY2FuIGJlIHVzZWQgYW5kIHJlZmVyZW5jZWQgdXNpbmcgcGFyYW0ucmVmJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQ2hpbGQnKTtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKGNoaWxkLCAnTXlQYXJhbScsIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICAgICAgdHlwZTogJ0ludGVnZXInLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNeSBmaXJzdCBwYXJhbWV0ZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ1Jlc291cmNlJywgeyB0eXBlOiAnVHlwZScsIHByb3BlcnRpZXM6IHsgUmVmZXJlbmNlVG9QYXJhbTogcGFyYW0ucmVmIH0gfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgW3BhcmFtLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAsXG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdJbnRlZ2VyJyxcbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNeSBmaXJzdCBwYXJhbWV0ZXInIH0gfSxcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIFJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczogeyBSZWZlcmVuY2VUb1BhcmFtOiB7IFJlZjogcGFyYW0ubG9naWNhbElkIH0gfSB9IH0gfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdwYXJhbWV0ZXJzIGFyZSB0b2tlbnMsIHNvIHRoZXkgY2FuIGJlIGFzc2lnbmVkIHdpdGhvdXQgLnJlZiBhbmQgdGhlaXIgUmVmIHdpbGwgYmUgdGFrZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKHN0YWNrLCAnTXlQYXJhbScsIHsgdHlwZTogJ1N0cmluZycgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJhbSksIHsgUmVmOiAnTXlQYXJhbScgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTJFO0FBRTNFLGlCQUFTO0lBQ1AsdURBQXVELENBQUMsSUFBVTtRQUNoRSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBRTFCLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQzVDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUMsQ0FBQztRQUVILElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN2QyxVQUFVLEVBQUU7Z0JBQ1YsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxFQUFFO29CQUNYLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFBRSxvQkFBb0I7aUJBQUU7YUFBRTtZQUN6QyxTQUFTLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLFVBQVUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtpQkFBRTthQUFFO1NBQUUsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx5RkFBeUYsQ0FBQyxJQUFVO1FBQ2xHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBQYXJhbWV0ZXIsIHJlc29sdmUsIFJlc291cmNlLCBTdGFjayB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ3BhcmFtZXRlcnMgY2FuIGJlIHVzZWQgYW5kIHJlZmVyZW5jZWQgdXNpbmcgcGFyYW0ucmVmJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIGNvbnN0IGNoaWxkID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ0NoaWxkJyk7XG4gICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKGNoaWxkLCAnTXlQYXJhbScsIHtcbiAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgdHlwZTogJ0ludGVnZXInLFxuICAgICAgZGVzY3JpcHRpb246ICdNeSBmaXJzdCBwYXJhbWV0ZXInXG4gICAgfSk7XG5cbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZScsIHsgdHlwZTogJ1R5cGUnLCBwcm9wZXJ0aWVzOiB7IFJlZmVyZW5jZVRvUGFyYW06IHBhcmFtLnJlZiB9IH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIFtwYXJhbS5sb2dpY2FsSWRdOiB7XG4gICAgICAgICAgRGVmYXVsdDogMTAsXG4gICAgICAgICAgVHlwZTogJ0ludGVnZXInLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiAnTXkgZmlyc3QgcGFyYW1ldGVyJyB9IH0sXG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICBUeXBlOiAnVHlwZScsXG4gICAgICAgICAgUHJvcGVydGllczogeyBSZWZlcmVuY2VUb1BhcmFtOiB7IFJlZjogcGFyYW0ubG9naWNhbElkIH0gfSB9IH0gfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncGFyYW1ldGVycyBhcmUgdG9rZW5zLCBzbyB0aGV5IGNhbiBiZSBhc3NpZ25lZCB3aXRob3V0IC5yZWYgYW5kIHRoZWlyIFJlZiB3aWxsIGJlIHRha2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBQYXJhbWV0ZXIoc3RhY2ssICdNeVBhcmFtJywgeyB0eXBlOiAnU3RyaW5nJyB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyYW0pLCB7IFJlZjogJ015UGFyYW0nIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuIl19

@@ -163,2 +163,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wZXJtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucGVybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUF1RztBQUV2RyxpQkFBUztJQUNMLHFEQUFxRCxDQUFDLElBQVU7UUFDNUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLGNBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFDL0IsQ0FBRSxpQkFBaUI7Z0JBQ2pCLHNCQUFzQjtnQkFDdEIsc0JBQXNCLENBQUU7WUFDM0IsUUFBUSxFQUFFLENBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUU7WUFDekMsTUFBTSxFQUFFLE9BQU87WUFDZixTQUFTLEVBQ1IsRUFBRSxHQUFHLEVBQ0YsRUFBRSxVQUFVLEVBQ1QsQ0FBRSxFQUFFO3dCQUNGLENBQUUsTUFBTTs0QkFDTixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTs0QkFDekIsUUFBUTs0QkFDUixFQUFFLFVBQVUsRUFBRSxDQUFFLEVBQUUsRUFBRSxDQUFFLElBQUksRUFBRSxTQUFTLEVB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OlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENhbm9uaWNhbFVzZXJQcmluY2lwYWwsIEZuQ29uY2F0LCBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCByZXNvbHZlIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAgICd0aGUgUGVybWlzc2lvbiBjbGFzcyBpcyBhIHByb2dyYW1taW5nIG1vZGVsIGZvciBpYW0nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRBY3Rpb24oJ3NxczpTZW5kTWVzc2FnZScpO1xuICAgICAgICBwLmFkZEFjdGlvbnMoJ2R5bmFtb2RiOkNyZWF0ZVRhYmxlJywgJ2R5bmFtb2RiOkRlbGV0ZVRhYmxlJyk7XG4gICAgICAgIHAuYWRkUmVzb3VyY2UoJ215UXVldWUnKTtcbiAgICAgICAgcC5hZGRSZXNvdXJjZSgneW91clF1ZXVlJyk7XG5cbiAgICAgICAgcC5hZGRBbGxSZXNvdXJjZXMoKTtcbiAgICAgICAgcC5hZGRBd3NBY2NvdW50UHJpbmNpcGFsKG5ldyBGbkNvbmNhdCgnbXknLCAnYWNjb3VudCcsICduYW1lJykudG9TdHJpbmcoKSk7XG4gICAgICAgIHAubGltaXRUb0FjY291bnQoJzEyMjIxMTIxMjIxJyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwgeyBBY3Rpb246XG4gICAgICAgICAgICBbICdzcXM6U2VuZE1lc3NhZ2UnLFxuICAgICAgICAgICAgICAnZHluYW1vZGI6Q3JlYXRlVGFibGUnLFxuICAgICAgICAgICAgICAnZHluYW1vZGI6RGVsZXRlVGFibGUnIF0sXG4gICAgICAgICAgIFJlc291cmNlOiBbICdteVF1ZXVlJywgJ3lvdXJRdWV1ZScsICcqJyBdLFxuICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgIFByaW5jaXBhbDpcbiAgICAgICAgICAgIHsgQVdTOlxuICAgICAgICAgICAgICAgeyAnRm46OkpvaW4nOlxuICAgICAgICAgICAgICAgICAgWyAnJyxcbiAgICAgICAgICAgICAgICAgICAgWyAnYXJuOicsXG4gICAgICAgICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAnOmlhbTo6JyxcbiAgICAgICAgICAgICAgICAgICAgICB7ICdGbjo6Sm9pbic6IFsgJycsIFsgJ215JywgJ2FjY291bnQnLCAnbmFtZScgXSBdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgJzpyb290JyBdIF0gfSB9LFxuICAgICAgICAgICBDb25kaXRpb246IHsgU3RyaW5nRXF1YWxzOiB7ICdzdHM6RXh0ZXJuYWxJZCc6ICcxMjIyMTEyMTIyMScgfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndGhlIFBvbGljeURvY3VtZW50IGNsYXNzIGlzIGEgZG9tIGZvciBpYW0gcG9saWN5IGRvY3VtZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgY29uc3QgcDEgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIHAxLmFkZEFjdGlvbignc3FzOlNlbmRNZXNzYWdlJyk7XG4gICAgICAgIHAxLmFkZFJlc291cmNlKCcqJyk7XG5cbiAgICAgICAgY29uc3QgcDIgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIHAyLmRlbnkoKTtcbiAgICAgICAgcDIuYWRkQWN0aW9ucygnY2xvdWRmb3JtYXRpb246Q3JlYXRlU3RhY2snKTtcblxuICAgICAgICBkb2MuYWRkU3RhdGVtZW50KHAxKTtcbiAgICAgICAgZG9jLmFkZFN0YXRlbWVudChwMik7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShkb2MpLCB7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6XG4gICAgICAgICAgICAgICAgWyB7IEVmZmVjdDogJ0FsbG93JywgQWN0aW9uOiAnc3FzOlNlbmRNZXNzYWdlJywgUmVzb3VyY2U6ICcqJyB9LFxuICAgICAgICAgICAgICAgICAgeyBFZmZlY3Q6ICdEZW55JywgQWN0aW9uOiAnY2xvdWRmb3JtYXRpb246Q3JlYXRlU3RhY2snIH0gXSB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0EgUG9saWN5RG9jdW1lbnQgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZXhpc3RpbmcgcG9saWN5LCB3aGljaCBpcyBtZXJnZWQgdXBvbiBzZXJpYWxpemF0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgICAgICBWZXJzaW9uOiAnRm9vJyxcbiAgICAgICAgICAgIFNvbWV0aGluZzogMTIzLFxuICAgICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICAgICAgeyBTdGF0ZW1lbnQxOiAxIH0sXG4gICAgICAgICAgICAgICAgeyBTdGF0ZW1lbnQyOiAyIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IFBvbGljeURvY3VtZW50KGJhc2UpO1xuICAgICAgICBkb2MuYWRkU3RhdGVtZW50KG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZSgncmVzb3VyY2UnKS5hZGRBY3Rpb24oJ2FjdGlvbicpKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGRvYyksIHsgVmVyc2lvbjogJ0ZvbycsXG4gICAgICAgIFNvbWV0aGluZzogMTIzLFxuICAgICAgICBTdGF0ZW1lbnQ6XG4gICAgICAgICBbIHsgU3RhdGVtZW50MTogMSB9LFxuICAgICAgICAgICB7IFN0YXRlbWVudDI6IDIgfSxcbiAgICAgICAgICAgeyBFZmZlY3Q6ICdBbGxvdycsIEFjdGlvbjogJ2FjdGlvbicsIFJlc291cmNlOiAncmVzb3VyY2UnIH0gXSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdQZXJtaXNzaW9uIGFsbG93cyBzcGVjaWZ5aW5nIG11bHRpcGxlIGFjdGlvbnMgdXBvbiBjb25zdHJ1Y3Rpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcGVybSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZSgnTXlSZXNvdXJjZScpLmFkZEFjdGlvbnMoJ0FjdGlvbjEnLCAnQWN0aW9uMicsICdBY3Rpb24zJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGVybSksIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWyAnQWN0aW9uMScsICdBY3Rpb24yJywgJ0FjdGlvbjMnIF0sXG4gICAgICAgICAgICBSZXNvdXJjZTogJ015UmVzb3VyY2UnIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1BvbGljeURvYyByZXNvbHZlcyB0byB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHBlcm1pc3Npb25zJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjYW5vbmljYWxVc2VyUHJpbmNpcGFsIGFkZHMgYSBwcmluY2lwYWwgdG8gYSBwb2xpY3kgd2l0aCB0aGUgcGFzc2VkIGNhbm9uaWNhbCB1c2VyIGlkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNhbm9uY2lhbFVzZXIgPSBcImF2ZXJ5c3VwZXJkdXBlcmxvbmdzdHJpbmdmb3JcIjtcbiAgICAgICAgcC5hZGRQcmluY2lwYWwobmV3IENhbm9uaWNhbFVzZXJQcmluY2lwYWwoY2Fub25jaWFsVXNlcikpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBDYW5vbmljYWxVc2VyOiBjYW5vbmNpYWxVc2VyXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZEFjY291bnRSb290UHJpbmNpcGFsIGFkZHMgYSBwcmluY2lwYWwgd2l0aCB0aGUgY3VycmVudCBhY2NvdW50IHJvb3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRBY2NvdW50Um9vdFByaW5jaXBhbCgpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBBV1M6IHtcbiAgICAgICAgICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiYXJuOlwiLFxuICAgICAgICAgICAgICAgICAgICB7IFJlZjogXCJBV1M6OlBhcnRpdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiOmlhbTo6XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgUmVmOiBcIkFXUzo6QWNjb3VudElkXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI6cm9vdFwiXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZEZlZGVyYXRlZFByaW5jaXBhbCBhZGRzIGEgRmVkZXJhdGVkIHByaW5jaXBhbCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRGZWRlcmF0ZWRQcmluY2lwYWwoXCJjb20uYW1hem9uLmNvZ25pdG9cIiwgeyBTdHJpbmdFcXVhbHM6IHsga2V5OiAndmFsdWUnIH19KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwge1xuICAgICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgICBGZWRlcmF0ZWQ6IFwiY29tLmFtYXpvbi5jb2duaXRvXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBDb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHsga2V5OiAndmFsdWUnIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaGFzUmVzb3VyY2UnOiB7XG4gICAgICAgICdmYWxzZSBpZiB0aGVyZSBhcmUgbm8gcmVzb3VyY2VzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5oYXNSZXNvdXJjZSwgZmFsc2UsICdoYXNSZXNvdXJjZSBzaG91bGQgYmUgZmFsc2UgZm9yIGFuIGVtcHR5IHBlcm1pc3Npb24nKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGlmIHRoZXJlIGlzIG9uZSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgdGVzdC5lcXVhbChcbiAgICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KCkuYWRkUmVzb3VyY2UoJ29uZS1yZXNvdXJjZScpLmhhc1Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgJ2hhc1Jlc291cmNlIGlzIHRydWUgd2hlbiB0aGVyZSBpcyBvbmUgcmVzb3VyY2UnKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGZvciBtdWx0aXBsZSByZXNvdXJjZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgICAgICBwLmFkZFJlc291cmNlKCdyMScpO1xuICAgICAgICAgICAgcC5hZGRSZXNvdXJjZSgncjInKTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwocC5oYXNSZXNvdXJjZSwgdHJ1ZSwgJ2hhc1Jlc291cmNlIGlzIHRydWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcmVzb3VyY2UnKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICAnaGFzUHJpbmNpcGFsJzoge1xuICAgICAgICAnZmFsc2UgaWYgdGhlcmUgaXMgbm8gcHJpbmNpcGFsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5oYXNQcmluY2lwYWwsIGZhbHNlKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGlmIHRoZXJlIGlzIGEgcHJpbmNpcGFsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgICAgICAgcC5hZGRBd3NQcmluY2lwYWwoJ2JsYScpO1xuICAgICAgICAgICAgdGVzdC5lcXVhbChwLmhhc1ByaW5jaXBhbCwgdHJ1ZSk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAnc3RhdGVtZW50Q291bnQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0YXRlbWVudCBpbiB0aGUgcG9saWN5IGRvY3VtZW50Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAwKTtcbiAgICAgICAgcC5hZGRTdGF0ZW1lbnQobmV3IFBvbGljeVN0YXRlbWVudCgpKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAxKTtcbiAgICAgICAgcC5hZGRTdGF0ZW1lbnQobmV3IFBvbGljeVN0YXRlbWVudCgpKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAyKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wZXJtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucGVybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUF1RztBQUV2RyxpQkFBUztJQUNQLHFEQUFxRCxDQUFDLElBQVU7UUFDOUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLGNBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFDakMsQ0FBRSxpQkFBaUI7Z0JBQ2pCLHNCQUFzQjtnQkFDdEIsc0JBQXNCLENBQUU7WUFDekIsUUFBUSxFQUFFLENBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUU7WUFDekMsTUFBTSxFQUFFLE9BQU87WUFDZixTQUFTLEVBQ1YsRUFBRSxHQUFHLEVBQ0YsRUFBRSxVQUFVLEVBQ1gsQ0FBRSxFQUFFO3dCQUNKLENBQUUsTUFBTTs0QkFDTixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTs0QkFDekIsUUFBUTs0QkFDUixFQUFFLFVBQVUsRUFBRSxDQUFFLEVBQUUsRUFBRSxDQUFFLElBQUksRUFBRSxTQUFTLEVB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c3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDYW5vbmljYWxVc2VyUHJpbmNpcGFsLCBGbkNvbmNhdCwgUG9saWN5RG9jdW1lbnQsIFBvbGljeVN0YXRlbWVudCwgcmVzb2x2ZSB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ3RoZSBQZXJtaXNzaW9uIGNsYXNzIGlzIGEgcHJvZ3JhbW1pbmcgbW9kZWwgZm9yIGlhbScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgcC5hZGRBY3Rpb24oJ3NxczpTZW5kTWVzc2FnZScpO1xuICAgIHAuYWRkQWN0aW9ucygnZHluYW1vZGI6Q3JlYXRlVGFibGUnLCAnZHluYW1vZGI6RGVsZXRlVGFibGUnKTtcbiAgICBwLmFkZFJlc291cmNlKCdteVF1ZXVlJyk7XG4gICAgcC5hZGRSZXNvdXJjZSgneW91clF1ZXVlJyk7XG5cbiAgICBwLmFkZEFsbFJlc291cmNlcygpO1xuICAgIHAuYWRkQXdzQWNjb3VudFByaW5jaXBhbChuZXcgRm5Db25jYXQoJ215JywgJ2FjY291bnQnLCAnbmFtZScpLnRvU3RyaW5nKCkpO1xuICAgIHAubGltaXRUb0FjY291bnQoJzEyMjIxMTIxMjIxJyk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7IEFjdGlvbjpcbiAgICAgIFsgJ3NxczpTZW5kTWVzc2FnZScsXG4gICAgICAgICdkeW5hbW9kYjpDcmVhdGVUYWJsZScsXG4gICAgICAgICdkeW5hbW9kYjpEZWxldGVUYWJsZScgXSxcbiAgICAgICBSZXNvdXJjZTogWyAnbXlRdWV1ZScsICd5b3VyUXVldWUnLCAnKicgXSxcbiAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgUHJpbmNpcGFsOlxuICAgICAgeyBBV1M6XG4gICAgICAgICB7ICdGbjo6Sm9pbic6XG4gICAgICAgICAgWyAnJyxcbiAgICAgICAgICBbICdhcm46JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAnOmlhbTo6JyxcbiAgICAgICAgICAgIHsgJ0ZuOjpKb2luJzogWyAnJywgWyAnbXknLCAnYWNjb3VudCcsICduYW1lJyBdIF0gfSxcbiAgICAgICAgICAgICc6cm9vdCcgXSBdIH0gfSxcbiAgICAgICBDb25kaXRpb246IHsgU3RyaW5nRXF1YWxzOiB7ICdzdHM6RXh0ZXJuYWxJZCc6ICcxMjIyMTEyMTIyMScgfSB9IH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3RoZSBQb2xpY3lEb2N1bWVudCBjbGFzcyBpcyBhIGRvbSBmb3IgaWFtIHBvbGljeSBkb2N1bWVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBkb2MgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICBjb25zdCBwMSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICBwMS5hZGRBY3Rpb24oJ3NxczpTZW5kTWVzc2FnZScpO1xuICAgIHAxLmFkZFJlc291cmNlKCcqJyk7XG5cbiAgICBjb25zdCBwMiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICBwMi5kZW55KCk7XG4gICAgcDIuYWRkQWN0aW9ucygnY2xvdWRmb3JtYXRpb246Q3JlYXRlU3RhY2snKTtcblxuICAgIGRvYy5hZGRTdGF0ZW1lbnQocDEpO1xuICAgIGRvYy5hZGRTdGF0ZW1lbnQocDIpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShkb2MpLCB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6XG4gICAgICAgIFsgeyBFZmZlY3Q6ICdBbGxvdycsIEFjdGlvbjogJ3NxczpTZW5kTWVzc2FnZScsIFJlc291cmNlOiAnKicgfSxcbiAgICAgICAgICB7IEVmZmVjdDogJ0RlbnknLCBBY3Rpb246ICdjbG91ZGZvcm1hdGlvbjpDcmVhdGVTdGFjaycgfSBdIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0EgUG9saWN5RG9jdW1lbnQgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZXhpc3RpbmcgcG9saWN5LCB3aGljaCBpcyBtZXJnZWQgdXBvbiBzZXJpYWxpemF0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYmFzZSA9IHtcbiAgICAgIFZlcnNpb246ICdGb28nLFxuICAgICAgU29tZXRoaW5nOiAxMjMsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgeyBTdGF0ZW1lbnQxOiAxIH0sXG4gICAgICAgIHsgU3RhdGVtZW50MjogMiB9XG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBkb2MgPSBuZXcgUG9saWN5RG9jdW1lbnQoYmFzZSk7XG4gICAgZG9jLmFkZFN0YXRlbWVudChuZXcgUG9saWN5U3RhdGVtZW50KCkuYWRkUmVzb3VyY2UoJ3Jlc291cmNlJykuYWRkQWN0aW9uKCdhY3Rpb24nKSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGRvYyksIHsgVmVyc2lvbjogJ0ZvbycsXG4gICAgU29tZXRoaW5nOiAxMjMsXG4gICAgU3RhdGVtZW50OlxuICAgICBbIHsgU3RhdGVtZW50MTogMSB9LFxuICAgICAgIHsgU3RhdGVtZW50MjogMiB9LFxuICAgICAgIHsgRWZmZWN0OiAnQWxsb3cnLCBBY3Rpb246ICdhY3Rpb24nLCBSZXNvdXJjZTogJ3Jlc291cmNlJyB9IF0gfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1Blcm1pc3Npb24gYWxsb3dzIHNwZWNpZnlpbmcgbXVsdGlwbGUgYWN0aW9ucyB1cG9uIGNvbnN0cnVjdGlvbicodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHBlcm0gPSBuZXcgUG9saWN5U3RhdGVtZW50KCkuYWRkUmVzb3VyY2UoJ015UmVzb3VyY2UnKS5hZGRBY3Rpb25zKCdBY3Rpb24xJywgJ0FjdGlvbjInLCAnQWN0aW9uMycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGVybSksIHtcbiAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgIEFjdGlvbjogWyAnQWN0aW9uMScsICdBY3Rpb24yJywgJ0FjdGlvbjMnIF0sXG4gICAgICBSZXNvdXJjZTogJ015UmVzb3VyY2UnIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdQb2xpY3lEb2MgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBwZXJtaXNzaW9ucycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB1bmRlZmluZWQpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjYW5vbmljYWxVc2VyUHJpbmNpcGFsIGFkZHMgYSBwcmluY2lwYWwgdG8gYSBwb2xpY3kgd2l0aCB0aGUgcGFzc2VkIGNhbm9uaWNhbCB1c2VyIGlkJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICBjb25zdCBjYW5vbmNpYWxVc2VyID0gXCJhdmVyeXN1cGVyZHVwZXJsb25nc3RyaW5nZm9yXCI7XG4gICAgcC5hZGRQcmluY2lwYWwobmV3IENhbm9uaWNhbFVzZXJQcmluY2lwYWwoY2Fub25jaWFsVXNlcikpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocCksIHtcbiAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgIENhbm9uaWNhbFVzZXI6IGNhbm9uY2lhbFVzZXJcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYWRkQWNjb3VudFJvb3RQcmluY2lwYWwgYWRkcyBhIHByaW5jaXBhbCB3aXRoIHRoZSBjdXJyZW50IGFjY291bnQgcm9vdCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgcC5hZGRBY2NvdW50Um9vdFByaW5jaXBhbCgpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocCksIHtcbiAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgIEFXUzoge1xuICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIFtcbiAgICAgICAgICBcImFybjpcIixcbiAgICAgICAgICB7IFJlZjogXCJBV1M6OlBhcnRpdGlvblwiIH0sXG4gICAgICAgICAgXCI6aWFtOjpcIixcbiAgICAgICAgICB7IFJlZjogXCJBV1M6OkFjY291bnRJZFwiIH0sXG4gICAgICAgICAgXCI6cm9vdFwiXG4gICAgICAgICAgXVxuICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYWRkRmVkZXJhdGVkUHJpbmNpcGFsIGFkZHMgYSBGZWRlcmF0ZWQgcHJpbmNpcGFsIHdpdGggdGhlIHBhc3NlZCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgcC5hZGRGZWRlcmF0ZWRQcmluY2lwYWwoXCJjb20uYW1hem9uLmNvZ25pdG9cIiwgeyBTdHJpbmdFcXVhbHM6IHsga2V5OiAndmFsdWUnIH19KTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICBGZWRlcmF0ZWQ6IFwiY29tLmFtYXpvbi5jb2duaXRvXCJcbiAgICAgIH0sXG4gICAgICBDb25kaXRpb246IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7IGtleTogJ3ZhbHVlJyB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2hhc1Jlc291cmNlJzoge1xuICAgICdmYWxzZSBpZiB0aGVyZSBhcmUgbm8gcmVzb3VyY2VzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICB0ZXN0LmVxdWFsKG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5oYXNSZXNvdXJjZSwgZmFsc2UsICdoYXNSZXNvdXJjZSBzaG91bGQgYmUgZmFsc2UgZm9yIGFuIGVtcHR5IHBlcm1pc3Npb24nKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndHJ1ZSBpZiB0aGVyZSBpcyBvbmUgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIHRlc3QuZXF1YWwoXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZSgnb25lLXJlc291cmNlJykuaGFzUmVzb3VyY2UsXG4gICAgICAgIHRydWUsXG4gICAgICAgICdoYXNSZXNvdXJjZSBpcyB0cnVlIHdoZW4gdGhlcmUgaXMgb25lIHJlc291cmNlJyk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3RydWUgZm9yIG11bHRpcGxlIHJlc291cmNlcycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgIHAuYWRkUmVzb3VyY2UoJ3IxJyk7XG4gICAgICBwLmFkZFJlc291cmNlKCdyMicpO1xuICAgICAgdGVzdC5lcXVhbChwLmhhc1Jlc291cmNlLCB0cnVlLCAnaGFzUmVzb3VyY2UgaXMgdHJ1ZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSByZXNvdXJjZScpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcbiAgfSxcblxuICAnaGFzUHJpbmNpcGFsJzoge1xuICAgICdmYWxzZSBpZiB0aGVyZSBpcyBubyBwcmluY2lwYWwnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIHRlc3QuZXF1YWwobmV3IFBvbGljeVN0YXRlbWVudCgpLmhhc1ByaW5jaXBhbCwgZmFsc2UpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0cnVlIGlmIHRoZXJlIGlzIGEgcHJpbmNpcGFsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgcC5hZGRBd3NQcmluY2lwYWwoJ2JsYScpO1xuICAgICAgdGVzdC5lcXVhbChwLmhhc1ByaW5jaXBhbCwgdHJ1ZSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG4gIH0sXG5cbiAgJ3N0YXRlbWVudENvdW50IHJldHVybnMgdGhlIG51bWJlciBvZiBzdGF0ZW1lbnQgaW4gdGhlIHBvbGljeSBkb2N1bWVudCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICB0ZXN0LmVxdWFsKHAuc3RhdGVtZW50Q291bnQsIDApO1xuICAgIHAuYWRkU3RhdGVtZW50KG5ldyBQb2xpY3lTdGF0ZW1lbnQoKSk7XG4gICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAxKTtcbiAgICBwLmFkZFN0YXRlbWVudChuZXcgUG9saWN5U3RhdGVtZW50KCkpO1xuICAgIHRlc3QuZXF1YWwocC5zdGF0ZW1lbnRDb3VudCwgMik7XG4gICAgdGVzdC5kb25lKCk7XG4gIH1cbn07XG4iXX0=

@@ -18,3 +18,17 @@ import { Test } from 'nodeunit';

'resource.ref returns the {Ref} token'(test: Test): void;
'overrides': {
'addOverride(p, v) allows assigning arbitrary values to synthesized resource definitions'(test: Test): void;
'addOverride(p, null) will assign an "null" value'(test: Test): void;
'addOverride(p, undefined) can be used to delete a value'(test: Test): void;
'addOverride(p, undefined) will not create empty trees'(test: Test): void;
'addDeletionOverride(p) and addPropertyDeletionOverride(pp) are sugar `undefined`'(test: Test): void;
'addOverride(p, v) will overwrite any non-objects along the path'(test: Test): void;
'addPropertyOverride(pp, v) is a sugar for overriding properties'(test: Test): void;
'untypedPropertyOverrides': {
'can be used by derived classes to specify overrides before render()'(test: Test): void;
'"properties" is undefined'(test: Test): void;
'"properties" is empty'(test: Test): void;
};
};
};
export = _default;

@@ -28,2 +28,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBNEU7QUFFNUUsaUJBQVM7SUFDTCxrQ0FBa0MsQ0FBQyxJQUFVO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLFdBQUssQ0FBQyxJQUFJLFdBQUssQ0FBQyxJQUFJLGdCQUFVLENBQUMsQ0FBRSxPQUFPLEVBQUUsT0FBTyxDQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFekcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUNyQyxLQUFLLEVBQUU7Z0JBQ0gsTUFBTSxFQUFFO29CQUNKLFVBQVUsRUFBRTt3QkFDUjs0QkFDSSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxLQUFLLEVBQUUsS0FBSyxDQUFFLEVBQUU7NEJBQzFDLGlCQUFpQixFQUFFLGdCQUFnQjt5QkFDdEM7d0JBQ0Q7NEJBQ0ksTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBRSxFQUFFLGNBQWMsRUFBRSxDQUFFLENBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBRSxFQUFFLE9BQU8sQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUU7NEJBQ25HLGlCQUFpQixFQUFFLGdCQUFnQjt5QkFDdEM7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBGbkFuZCwgRm5Db250YWlucywgRm5FcXVhbHMsIEZuTm90LCBSdWxlLCBTdGFjayB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgICAnUnVsZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgcnVsZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgICAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdNeVJ1bGUnKTtcbiAgICAgICAgcnVsZS5hZGRBc3NlcnRpb24obmV3IEZuRXF1YWxzKCdsaHMnLCAncmhzJyksICdsaHMgZXF1YWxzIHJocycpO1xuICAgICAgICBydWxlLmFkZEFzc2VydGlvbihuZXcgRm5Ob3QobmV3IEZuQW5kKG5ldyBGbkNvbnRhaW5zKFsgJ2hlbGxvJywgJ3dvcmxkJyBdLCBcIndvcmxkXCIpKSksICdzb21lIGFzc2VydGlvbicpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUnVsZXM6IHtcbiAgICAgICAgICAgICAgICBNeVJ1bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydDogeyAnRm46OkVxdWFscyc6IFsgJ2xocycsICdyaHMnIF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnREZXNjcmlwdGlvbjogJ2xocyBlcXVhbHMgcmhzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQ6IHsgJ0ZuOjpOb3QnOiBbIHsgJ0ZuOjpBbmQnOiBbIHsgJ0ZuOjpDb250YWlucyc6IFsgWyAnaGVsbG8nLCAnd29ybGQnIF0sICd3b3JsZCcgXSB9IF0gfSBdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0RGVzY3JpcHRpb246ICdzb21lIGFzc2VydGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxtQ0FBNEU7QUFFNUUsaUJBQVM7SUFDUCxrQ0FBa0MsQ0FBQyxJQUFVO1FBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLFdBQUssQ0FBQyxJQUFJLFdBQUssQ0FBQyxJQUFJLGdCQUFVLENBQUMsQ0FBRSxPQUFPLEVBQUUsT0FBTyxDQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFekcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN2QyxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxLQUFLLEVBQUUsS0FBSyxDQUFFLEVBQUU7NEJBQzFDLGlCQUFpQixFQUFFLGdCQUFnQjt5QkFDcEM7d0JBQ0Q7NEJBQ0UsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBRSxFQUFFLGNBQWMsRUFBRSxDQUFFLENBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBRSxFQUFFLE9BQU8sQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUU7NEJBQ25HLGlCQUFpQixFQUFFLGdCQUFnQjt5QkFDcEM7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEZuQW5kLCBGbkNvbnRhaW5zLCBGbkVxdWFscywgRm5Ob3QsIFJ1bGUsIFN0YWNrIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAnUnVsZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgcnVsZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHN0YWNrLCAnTXlSdWxlJyk7XG4gICAgcnVsZS5hZGRBc3NlcnRpb24obmV3IEZuRXF1YWxzKCdsaHMnLCAncmhzJyksICdsaHMgZXF1YWxzIHJocycpO1xuICAgIHJ1bGUuYWRkQXNzZXJ0aW9uKG5ldyBGbk5vdChuZXcgRm5BbmQobmV3IEZuQ29udGFpbnMoWyAnaGVsbG8nLCAnd29ybGQnIF0sIFwid29ybGRcIikpKSwgJ3NvbWUgYXNzZXJ0aW9uJyk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgIFJ1bGVzOiB7XG4gICAgICAgIE15UnVsZToge1xuICAgICAgICAgIEFzc2VydGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXNzZXJ0OiB7ICdGbjo6RXF1YWxzJzogWyAnbGhzJywgJ3JocycgXSB9LFxuICAgICAgICAgICAgICBBc3NlcnREZXNjcmlwdGlvbjogJ2xocyBlcXVhbHMgcmhzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXNzZXJ0OiB7ICdGbjo6Tm90JzogWyB7ICdGbjo6QW5kJzogWyB7ICdGbjo6Q29udGFpbnMnOiBbIFsgJ2hlbGxvJywgJ3dvcmxkJyBdLCAnd29ybGQnIF0gfSBdIH0gXSB9LFxuICAgICAgICAgICAgICBBc3NlcnREZXNjcmlwdGlvbjogJ3NvbWUgYXNzZXJ0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH1cbn07XG4iXX0=

@@ -40,2 +40,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5zZWNyZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnNlY3JldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ0wsMEJBQTBCLENBQUMsSUFBVTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGtHQUFrRyxDQUFDLElBQVU7UUFDekcsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUUxQixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFlLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFFOUYsSUFBSSxxQkFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDL0IsWUFBWSxFQUFFLE1BQU07WUFDcEIsV0FBVyxFQUFFLGFBQWE7WUFDMUIscUJBQXFCLEVBQUUsdUJBQXVCO1lBQzlDLFNBQVMsRUFBRSxDQUFDLEdBQUc7WUFDZixTQUFTLEVBQUUsSUFBSTtZQUNmLGNBQWMsRUFBRSxpQkFBaUI7WUFDakMsYUFBYSxFQUFFLENBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUNqRCxFQUFFLHlCQUF5QixFQUN4QixFQUFFLElBQUksRUFBRSxvQ0FBb0M7b0JBQzFDLE9BQU8sRUFBRSxrQkFBa0I7b0JBQzNCLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2pCLHFCQUFxQixFQUNwQixFQUFFLElBQUksRUFBRSxvQ0FBb0M7b0JBQzFDLE9BQU8sRUFBRSxNQUFNO29CQUNmLGNBQWMsRUFBRSxpQkFBaUI7b0JBQ2pDLGFBQWEsRUFBRSxDQUFFLFNBQVMsRUFBRSxRQUFRLENBQUU7b0JBQ3RDLHFCQUFxQixFQUFFLHVCQUF1QjtvQkFDOUMsV0FBVyxFQUFFLGFBQWE7b0JBQzFCLFNBQVMsRUFBRSxJQUFJO29CQUNmLFNBQVMsRUFBRSxDQUFDLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyByZXNvbHZlLCBTZWNyZXQsIFNlY3JldFBhcmFtZXRlciwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ1NlY3JldCBpcyBtZXJlbHkgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBmb28gPSBuZXcgU2VjcmV0KCdGb28nKTtcbiAgICAgICAgY29uc3QgYmFyID0gbmV3IFNlY3JldCgoKSA9PiAnQmFyJyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShmb28pLCAnRm9vJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYmFyKSwgJ0JhcicpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1NlY3JldFBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdmFsdWVzIHJlc29sdmVkIGZyb20gU1NNIHBhcmFtZXRlciBzdG9yZSBkdXJpbmcgZGVwbG95bWVudCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIGNvbnN0IG15U2VjcmV0ID0gbmV3IFNlY3JldFBhcmFtZXRlcihzdGFjaywgJ015U2VjcmV0JywgeyBzc21QYXJhbWV0ZXI6ICcvbXkvc2VjcmV0L3BhcmFtJyB9KTtcblxuICAgICAgICBuZXcgU2VjcmV0UGFyYW1ldGVyKHN0YWNrLCAnQm9vbScsIHtcbiAgICAgICAgICAgIHNzbVBhcmFtZXRlcjogJ0Jvb20nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICBjb25zdHJhaW50RGVzY3JpcHRpb246ICdjb25zdHJhaW50RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAtMTAwLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiAyMDAwLFxuICAgICAgICAgICAgYWxsb3dlZFBhdHRlcm46ICdhbGxvd2VkLXBhdHRlcm4nLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogWyAnYWxsb3dlZCcsICd2YWx1ZXMnIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyBQYXJhbWV0ZXJzOlxuICAgICAgICAgICAgeyBNeVNlY3JldFBhcmFtZXRlckJCODFERTU4OlxuICAgICAgICAgICAgICAgeyBUeXBlOiAnQVdTOjpTU006OlBhcmFtZXRlcjo6VmFsdWU8U3RyaW5nPicsXG4gICAgICAgICAgICAgICAgIERlZmF1bHQ6ICcvbXkvc2VjcmV0L3BhcmFtJyxcbiAgICAgICAgICAgICAgICAgTm9FY2hvOiB0cnVlIH0sXG4gICAgICAgICAgICAgIEJvb21QYXJhbWV0ZXJCM0VCMzk0MjpcbiAgICAgICAgICAgICAgIHsgVHlwZTogJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6OlZhbHVlPFN0cmluZz4nLFxuICAgICAgICAgICAgICAgICBEZWZhdWx0OiAnQm9vbScsXG4gICAgICAgICAgICAgICAgIEFsbG93ZWRQYXR0ZXJuOiAnYWxsb3dlZC1wYXR0ZXJuJyxcbiAgICAgICAgICAgICAgICAgQWxsb3dlZFZhbHVlczogWyAnYWxsb3dlZCcsICd2YWx1ZXMnIF0sXG4gICAgICAgICAgICAgICAgIENvbnN0cmFpbnREZXNjcmlwdGlvbjogJ2NvbnN0cmFpbnREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgICBNYXhMZW5ndGg6IDIwMDAsXG4gICAgICAgICAgICAgICAgIE1pbkxlbmd0aDogLTEwMCxcbiAgICAgICAgICAgICAgICAgTm9FY2hvOiB0cnVlIH0gfSB9KTtcblxuICAgICAgICAvLyB2YWx1ZSByZXNvbHZlcyB0byBhIFwiUmVmXCJcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShteVNlY3JldC52YWx1ZSksIHsgUmVmOiAnTXlTZWNyZXRQYXJhbWV0ZXJCQjgxREU1OCcgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5zZWNyZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnNlY3JldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ1AsMEJBQTBCLENBQUMsSUFBVTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsa0dBQWtHLENBQUMsSUFBVTtRQUMzRyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBRTFCLE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUU5RixJQUFJLHFCQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNqQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixXQUFXLEVBQUUsYUFBYTtZQUMxQixxQkFBcUIsRUFBRSx1QkFBdUI7WUFDOUMsU0FBUyxFQUFFLENBQUMsR0FBRztZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsY0FBYyxFQUFFLGlCQUFpQjtZQUNqQyxhQUFhLEVBQUUsQ0FBRSxTQUFTLEVBQUUsUUFBUSxDQUFFO1NBQ3ZDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQ25ELEVBQUUseUJBQXlCLEVBQ3hCLEVBQUUsSUFBSSxFQUFFLG9DQUFvQztvQkFDNUMsT0FBTyxFQUFFLGtCQUFrQjtvQkFDM0IsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDZixxQkFBcUIsRUFDcEIsRUFBRSxJQUFJLEVBQUUsb0NBQW9DO29CQUM1QyxPQUFPLEVBQUUsTUFBTTtvQkFDZixjQUFjLEVBQUUsaUJBQWlCO29CQUNqQyxhQUFhLEVBQUUsQ0FBRSxTQUFTLEVBQUUsUUFBUSxDQUFFO29CQUN0QyxxQkFBcUIsRUFBRSx1QkFBdUI7b0JBQzlDLFdBQVcsRUFBRSxhQUFhO29CQUMxQixTQUFTLEVBQUUsSUFBSTtvQkFDZixTQUFTLEVBQUUsQ0FBQyxHQUFHO29CQUNmLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV6Qiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyByZXNvbHZlLCBTZWNyZXQsIFNlY3JldFBhcmFtZXRlciwgU3RhY2sgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICdTZWNyZXQgaXMgbWVyZWx5IGEgdG9rZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBmb28gPSBuZXcgU2VjcmV0KCdGb28nKTtcbiAgICBjb25zdCBiYXIgPSBuZXcgU2VjcmV0KCgpID0+ICdCYXInKTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoZm9vKSwgJ0ZvbycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYmFyKSwgJ0JhcicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdTZWNyZXRQYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHZhbHVlcyByZXNvbHZlZCBmcm9tIFNTTSBwYXJhbWV0ZXIgc3RvcmUgZHVyaW5nIGRlcGxveW1lbnQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgbXlTZWNyZXQgPSBuZXcgU2VjcmV0UGFyYW1ldGVyKHN0YWNrLCAnTXlTZWNyZXQnLCB7IHNzbVBhcmFtZXRlcjogJy9teS9zZWNyZXQvcGFyYW0nIH0pO1xuXG4gICAgbmV3IFNlY3JldFBhcmFtZXRlcihzdGFjaywgJ0Jvb20nLCB7XG4gICAgICBzc21QYXJhbWV0ZXI6ICdCb29tJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZGVzY3JpcHRpb24nLFxuICAgICAgY29uc3RyYWludERlc2NyaXB0aW9uOiAnY29uc3RyYWludERlc2NyaXB0aW9uJyxcbiAgICAgIG1pbkxlbmd0aDogLTEwMCxcbiAgICAgIG1heExlbmd0aDogMjAwMCxcbiAgICAgIGFsbG93ZWRQYXR0ZXJuOiAnYWxsb3dlZC1wYXR0ZXJuJyxcbiAgICAgIGFsbG93ZWRWYWx1ZXM6IFsgJ2FsbG93ZWQnLCAndmFsdWVzJyBdLFxuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFBhcmFtZXRlcnM6XG4gICAgICB7IE15U2VjcmV0UGFyYW1ldGVyQkI4MURFNTg6XG4gICAgICAgICB7IFR5cGU6ICdBV1M6OlNTTTo6UGFyYW1ldGVyOjpWYWx1ZTxTdHJpbmc+JyxcbiAgICAgICAgIERlZmF1bHQ6ICcvbXkvc2VjcmV0L3BhcmFtJyxcbiAgICAgICAgIE5vRWNobzogdHJ1ZSB9LFxuICAgICAgICBCb29tUGFyYW1ldGVyQjNFQjM5NDI6XG4gICAgICAgICB7IFR5cGU6ICdBV1M6OlNTTTo6UGFyYW1ldGVyOjpWYWx1ZTxTdHJpbmc+JyxcbiAgICAgICAgIERlZmF1bHQ6ICdCb29tJyxcbiAgICAgICAgIEFsbG93ZWRQYXR0ZXJuOiAnYWxsb3dlZC1wYXR0ZXJuJyxcbiAgICAgICAgIEFsbG93ZWRWYWx1ZXM6IFsgJ2FsbG93ZWQnLCAndmFsdWVzJyBdLFxuICAgICAgICAgQ29uc3RyYWludERlc2NyaXB0aW9uOiAnY29uc3RyYWludERlc2NyaXB0aW9uJyxcbiAgICAgICAgIERlc2NyaXB0aW9uOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgTWF4TGVuZ3RoOiAyMDAwLFxuICAgICAgICAgTWluTGVuZ3RoOiAtMTAwLFxuICAgICAgICAgTm9FY2hvOiB0cnVlIH0gfSB9KTtcblxuICAgIC8vIHZhbHVlIHJlc29sdmVzIHRvIGEgXCJSZWZcIlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUobXlTZWNyZXQudmFsdWUpLCB7IFJlZjogJ015U2VjcmV0UGFyYW1ldGVyQkI4MURFNTgnIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH1cbn07XG4iXX0=

@@ -155,2 +155,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3Quc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUFnSDtBQWdNaEgsTUFBTSxzQkFBdUIsU0FBUSxXQUFLO0lBRXRDLE1BQU07SUFFQyxnQkFBZ0I7UUFDbkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUMsbURBQW1EO1FBQ25ELFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRztZQUNwRCxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUM3RCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBRWhFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQTVNRCxpQkFBUztJQUNMLGlGQUFpRixDQUFDLElBQVU7UUFDeEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsMkZBQTJGLENBQUMsSUFBVTtRQUNsRyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxlQUFlLENBQUMscUJBQXFCLEdBQUcsbUJBQW1CLENBQUM7UUFDbEUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsd0JBQXdCLENBQUM7UUFDN0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixF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QixNQUFNLFFBQVEsR0FBRztZQUNiLFdBQVcsRUFBRSxjQUFjO1NBQzlCLENBQUM7UUFFRixJQUFJLGFBQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUU1QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELHNDQUFzQyxDQUFDLElBQVU7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUUxQixxRUFBcUU7UUFDckUsdUVBQXVFO1FBQ3ZFLGNBQWM7UUFDZCxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ3JELEdBQUcsRUFBRSxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDcEQsRUFBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFFcEYsOEJBQThCO1FBQzlCLElBQUksZUFBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQXBwLCBDb25kaXRpb24sIENvbnN0cnVjdCwgSW5jbHVkZSwgT3V0cHV0LCBQYXJhbWV0ZXIsIFJlc291cmNlLCBSb290LCBTdGFjaywgVG9rZW4gfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ2Egc3RhY2sgY2FuIGJlIHNlcmlhbGl6ZWQgaW50byBhIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLCBpbml0aWFsbHkgaXRcXCdzIGVtcHR5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdzdGFjayBvYmplY3RzIGhhdmUgc29tZSB0ZW1wbGF0ZS1sZXZlbCBwcm9wZXRpZXMsIHN1Y2ggYXMgRGVzY3JpcHRpb24sIFZlcnNpb24sIFRyYW5zZm9ybScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVGb3JtYXRWZXJzaW9uID0gJ015VGVtcGxhdGVWZXJzaW9uJztcbiAgICAgICAgc3RhY2sudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uID0gJ1RoaXMgaXMgbXkgZGVzY3JpcHRpb24nO1xuICAgICAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtID0gJ1NBTXknO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnVGhpcyBpcyBteSBkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICdNeVRlbXBsYXRlVmVyc2lvbicsXG4gICAgICAgICAgICBUcmFuc2Zvcm06ICdTQU15J1xuICAgICAgICB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdTdGFjay5maW5kKGMpIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIHN0YWNrIGZyb20gYW55IHBvaW50IGluIHRoZSB0cmVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IGxldmVsMSA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdsZXZlbDEnKTtcbiAgICAgICAgY29uc3QgbGV2ZWwyID0gbmV3IENvbnN0cnVjdChsZXZlbDEsICdsZXZlbDInKTtcbiAgICAgICAgY29uc3QgbGV2ZWwzID0gbmV3IENvbnN0cnVjdChsZXZlbDIsICdsZXZlbDMnKTtcbiAgICAgICAgY29uc3QgcmVzMSA9IG5ldyBSZXNvdXJjZShsZXZlbDEsICdjaGlsZG9mbGV2ZWwxJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUxJyB9KTtcbiAgICAgICAgY29uc3QgcmVzMiA9IG5ldyBSZXNvdXJjZShsZXZlbDMsICdjaGlsZG9mbGV2ZWwzJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUyJyB9KTtcblxuICAgICAgICB0ZXN0LmVxdWFsKFN0YWNrLmZpbmQocmVzMSksIHN0YWNrKTtcbiAgICAgICAgdGVzdC5lcXVhbChTdGFjay5maW5kKHJlczIpLCBzdGFjayk7XG4gICAgICAgIHRlc3QuZXF1YWwoU3RhY2suZmluZChsZXZlbDIpLCBzdGFjayk7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbmV3IENvbnN0cnVjdChyb290LCAnY2hpbGQnKTtcblxuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBTdGFjay5maW5kKGNoaWxkKSk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IFN0YWNrLmZpbmQocm9vdCkpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnU3RhY2suaXNTdGFjayBpbmRpY2F0ZXMgdGhhdCBhIGNvbnN0cnVjdCBpcyBhIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IGMgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQ29uc3RydWN0Jyk7XG4gICAgICAgIHRlc3Qub2soc3RhY2suaXNTdGFjayk7XG4gICAgICAgIHRlc3Qub2soIShjIGFzIGFueSkuaXNTdGFjayk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnc3RhY2suaWQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsb2dpY2FsIGlkZW50aXRpZXMgb2YgcmVzb3VyY2VzIHdpdGhpbiBpdCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdNeVN0YWNrJyk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UnLCB7IHR5cGU6ICdNeVJlc291cmNlVHlwZScgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdNeVJlc291cmNlVHlwZScgfSB9IH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3N0YWNrLnRlbXBsYXRlT3B0aW9ucyBjYW4gYmUgdXNlZCB0byBzZXQgdGVtcGxhdGUtbGV2ZWwgb3B0aW9ucycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIHN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdTdGFja0Rlc2NyaXB0aW9uJztcbiAgICAgICAgc3RhY2sudGVtcGxhdGVPcHRpb25zLnRlbXBsYXRlRm9ybWF0VmVyc2lvbiA9ICdUZW1wbGF0ZVZlcnNpb24nO1xuICAgICAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtID0gJ1RyYW5zZm9ybSc7XG4gICAgICAgIHN0YWNrLnRlbXBsYXRlT3B0aW9ucy5tZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIE1ldGFkYXRhS2V5OiAnTWV0YWRhdGFWYWx1ZSdcbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnU3RhY2tEZXNjcmlwdGlvbicsXG4gICAgICAgICAgICBUcmFuc2Zvcm06ICdUcmFuc2Zvcm0nLFxuICAgICAgICAgICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnVGVtcGxhdGVWZXJzaW9uJyxcbiAgICAgICAgICAgIE1ldGFkYXRhOiB7IE1ldGFkYXRhS2V5OiAnTWV0YWRhdGFWYWx1ZScgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgLy8gVGhpcyBhcHByb2FjaCB3aWxsIG9ubHkgYXBwbHkgdG8gVHlwZVNjcmlwdCBjb2RlLCBidXQgYXQgbGVhc3QgaXQncyBhIHRlbXBvcmFyeVxuICAgIC8vIHdvcmthcm91bmQgZm9yIHBlb3BsZSBydW5uaW5nIGludG8gaXNzdWVzIGNhdXNlZCBieSBTREstMzAwMy5cbiAgICAvLyBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgcHJvcGVyIHNvbHV0aW9uIHRoYXQgaW52b2x2ZWQganNpaSBjYWxsYmFja3MgKHdoZW4gdGhleSBleGlzdClcbiAgICAvLyBzbyB0aGlzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBqc2lpIGxhbmd1YWdlcyBhcyB3ZWxsLlxuICAgICdPdmVycmlkaW5nIGBTdGFjay50b0Nsb3VkRm9ybWF0aW9uYCBhbGxvd3MgYXJiaXRyYXJ5IHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGR1cmluZyBzeW50aGVzaXMnKHRlc3Q6IFRlc3QpIHtcblxuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFja1dpdGhQb3N0UHJvY2Vzc29yKCk7XG5cbiAgICAgICAgbmV3IFJlc291cmNlKHN0YWNrLCAnbXlSZXNvdXJjZScsIHtcbiAgICAgICAgICAgIHR5cGU6ICdBV1M6Ok15UmVzb3VyY2UnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIE15UHJvcDE6ICdoZWxsbycsXG4gICAgICAgICAgICAgICAgTXlQcm9wMjogJ2hvd2R5JyxcbiAgICAgICAgICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgICAgICBLZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICB7IG15UmVzb3VyY2U6XG4gICAgICAgICAgICAgICB7IFR5cGU6ICdBV1M6Ok15UmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgeyBNeVByb3AxOiAnaGVsbG8nLFxuICAgICAgICAgICAgICAgICAgICBNeVByb3AyOiAnaG93ZHknLFxuICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudDogeyBrZXk6ICd2YWx1ZScgfSB9IH0gfSB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0NvbnN0cnVjdC5maW5kUmVzb3VyY2UobG9naWNhbElkKSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBhIHJlc291cmNlIGJ5IGl0cyBwYXRoJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgdGVzdC5vayghc3RhY2sudHJ5RmluZENoaWxkKCdmb28nKSwgJ2VtcHR5IHN0YWNrJyk7XG5cbiAgICAgICAgY29uc3QgcjEgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdIZWxsbycsIHsgdHlwZTogJ015UmVzb3VyY2UnIH0pO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrLmZpbmRSZXNvdXJjZShyMS5zdGFja1BhdGgpLCByMSwgJ2xvb2sgdXAgdG9wLWxldmVsJyk7XG5cbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQ2hpbGQnKTtcbiAgICAgICAgY29uc3QgcjIgPSBuZXcgUmVzb3VyY2UoY2hpbGQsICdIZWxsbycsIHsgdHlwZTogJ015UmVzb3VyY2UnIH0pO1xuXG4gICAgICAgIHRlc3QuZXF1YWwoc3RhY2suZmluZFJlc291cmNlKHIyLnN0YWNrUGF0aCksIHIyLCAnbG9vayB1cCBjaGlsZCcpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnU3RhY2suZmluZFJlc291cmNlIHdpbGwgZmFpbCBpZiB0aGUgZWxlbWVudCBpcyBub3QgYSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUGFyYW1ldGVyKHN0YWNrLCAnTXlQYXJhbScsIHsgdHlwZTogJ1N0cmluZycgfSk7XG5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gc3RhY2suZmluZFJlc291cmNlKHAucGF0aCkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1N0YWNrLmdldEJ5UGF0aCBjYW4gYmUgdXNlZCB0byBmaW5kIGFueSBDbG91ZEZvcm1hdGlvbiBlbGVtZW50IChQYXJhbWV0ZXIsIE91dHB1dCwgZXRjKScodGVzdDogVGVzdCkge1xuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQYXJhbWV0ZXIoc3RhY2ssICdNeVBhcmFtJywgeyB0eXBlOiAnU3RyaW5nJyB9KTtcbiAgICAgICAgY29uc3QgbyA9IG5ldyBPdXRwdXQoc3RhY2ssICdNeU91dHB1dCcpO1xuICAgICAgICBjb25zdCBjID0gbmV3IENvbmRpdGlvbihzdGFjaywgJ015Q29uZGl0aW9uJyk7XG5cbiAgICAgICAgdGVzdC5lcXVhbChzdGFjay5maW5kQ2hpbGQocC5wYXRoKSwgcCk7XG4gICAgICAgIHRlc3QuZXF1YWwoc3RhY2suZmluZENoaWxkKG8ucGF0aCksIG8pO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrLmZpbmRDaGlsZChjLnBhdGgpLCBjKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1N0YWNrIG5hbWVzIGNhbiBoYXZlIGh5cGhlbnMgaW4gdGhlbScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IEFwcCgpO1xuXG4gICAgICAgIG5ldyBTdGFjayhyb290LCAnSGVsbG8tV29ybGQnKTtcbiAgICAgICAgLy8gRGlkIG5vdCB0aHJvd1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnSW5jbHVkZSBzaG91bGQgc3VwcG9ydCBub24taGFzaCB0b3AtbGV2ZWwgdGVtcGxhdGUgZWxlbWVudHMgbGlrZSBcIkRlc2NyaXB0aW9uXCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHtcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnaGVsbG8sIHdvcmxkJ1xuICAgICAgICB9O1xuXG4gICAgICAgIG5ldyBJbmNsdWRlKHN0YWNrLCAnSW5jbHVkZScsIHsgdGVtcGxhdGUgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgICAgIHRlc3QuZXF1YWwodHlwZW9mIG91dHB1dC5EZXNjcmlwdGlvbiwgJ3N0cmluZycpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0NhblxcJ3QgYWRkIGNoaWxkcmVuIGR1cmluZyBzeW50aGVzaXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgICAgICAvLyBhZGQgYSBjb25zdHJ1Y3Qgd2l0aCBhIHRva2VuIHRoYXQgd2hlbiByZXNvbHZlZCBhZGRzIGEgY2hpbGQuIHRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhhdCB0aGlzIGNoaWxkIGlzIGdvaW5nIHRvIGJlIGFkZGVkIGR1cmluZyBzeW50aGVzaXMgYW5kIHRoaXNcbiAgICAgICAgLy8gaXMgYSBuby1uby5cbiAgICAgICAgbmV3IFJlc291cmNlKHN0YWNrLCAnUmVzb3VyY2UnLCB7IHR5cGU6ICdUJywgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZm9vOiBuZXcgVG9rZW4oKCkgPT4gbmV3IENvbnN0cnVjdChzdGFjaywgJ0ZvbycpKVxuICAgICAgICB9fSk7XG5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCAvQ2Fubm90IGFkZCBjaGlsZHJlbiBkdXJpbmcgc3ludGhlc2lzLyk7XG5cbiAgICAgICAgLy8gb2theSB0byBhZGQgYWZ0ZXIgc3ludGhlc2lzXG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdDMScpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG59O1xuXG5jbGFzcyBTdGFja1dpdGhQb3N0UHJvY2Vzc29yIGV4dGVuZHMgU3RhY2sge1xuXG4gICAgLy8gLi4uXG5cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBzdXBlci50b0Nsb3VkRm9ybWF0aW9uKCk7XG5cbiAgICAgICAgLy8gbWFuaXB1bGF0ZSB0ZW1wbGF0ZSAoZS5nLiByZW5hbWUgXCJLZXlcIiB0byBcImtleVwiKVxuICAgICAgICB0ZW1wbGF0ZS5SZXNvdXJjZXMubXlSZXNvdXJjZS5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LmtleSA9XG4gICAgICAgICAgICB0ZW1wbGF0ZS5SZXNvdXJjZXMubXlSZXNvdXJjZS5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LktleTtcbiAgICAgICAgZGVsZXRlIHRlbXBsYXRlLlJlc291cmNlcy5teVJlc291cmNlLlByb3BlcnRpZXMuRW52aXJvbm1lbnQuS2V5O1xuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3Quc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUFnSDtBQWdNaEgsTUFBTSxzQkFBdUIsU0FBUSxXQUFLO0lBRXhDLE1BQU07SUFFQyxnQkFBZ0I7UUFDckIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUMsbURBQW1EO1FBQ25ELFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRztZQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUMzRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBRWhFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQTVNRCxpQkFBUztJQUNQLGlGQUFpRixDQUFDLElBQVU7UUFDMUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCwyRkFBMkYsQ0FBQyxJQUFVO1FBQ3BHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztRQUNsRSxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyx3QkFBd0IsQ0FBQztRQUM3RCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVB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LEdBQUc7WUFDZixXQUFXLEVBQUUsY0FBYztTQUM1QixDQUFDO1FBRUYsSUFBSSxhQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFNUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNDQUFzQyxDQUFDLElBQVU7UUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUUxQixxRUFBcUU7UUFDckUsdUVBQXVFO1FBQ3ZFLGNBQWM7UUFDZCxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ3ZELEdBQUcsRUFBRSxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbEQsRUFBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFFcEYsOEJBQThCO1FBQzlCLElBQUksZUFBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBBcHAsIENvbmRpdGlvbiwgQ29uc3RydWN0LCBJbmNsdWRlLCBPdXRwdXQsIFBhcmFtZXRlciwgUmVzb3VyY2UsIFJvb3QsIFN0YWNrLCBUb2tlbiB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ2Egc3RhY2sgY2FuIGJlIHNlcmlhbGl6ZWQgaW50byBhIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLCBpbml0aWFsbHkgaXRcXCdzIGVtcHR5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHsgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3N0YWNrIG9iamVjdHMgaGF2ZSBzb21lIHRlbXBsYXRlLWxldmVsIHByb3BldGllcywgc3VjaCBhcyBEZXNjcmlwdGlvbiwgVmVyc2lvbiwgVHJhbnNmb3JtJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVGb3JtYXRWZXJzaW9uID0gJ015VGVtcGxhdGVWZXJzaW9uJztcbiAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24gPSAnVGhpcyBpcyBteSBkZXNjcmlwdGlvbic7XG4gICAgc3RhY2sudGVtcGxhdGVPcHRpb25zLnRyYW5zZm9ybSA9ICdTQU15JztcbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgIERlc2NyaXB0aW9uOiAnVGhpcyBpcyBteSBkZXNjcmlwdGlvbicsXG4gICAgICBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICdNeVRlbXBsYXRlVmVyc2lvbicsXG4gICAgICBUcmFuc2Zvcm06ICdTQU15J1xuICAgIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdTdGFjay5maW5kKGMpIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIHN0YWNrIGZyb20gYW55IHBvaW50IGluIHRoZSB0cmVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBsZXZlbDEgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnbGV2ZWwxJyk7XG4gICAgY29uc3QgbGV2ZWwyID0gbmV3IENvbnN0cnVjdChsZXZlbDEsICdsZXZlbDInKTtcbiAgICBjb25zdCBsZXZlbDMgPSBuZXcgQ29uc3RydWN0KGxldmVsMiwgJ2xldmVsMycpO1xuICAgIGNvbnN0IHJlczEgPSBuZXcgUmVzb3VyY2UobGV2ZWwxLCAnY2hpbGRvZmxldmVsMScsIHsgdHlwZTogJ015UmVzb3VyY2VUeXBlMScgfSk7XG4gICAgY29uc3QgcmVzMiA9IG5ldyBSZXNvdXJjZShsZXZlbDMsICdjaGlsZG9mbGV2ZWwzJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUyJyB9KTtcblxuICAgIHRlc3QuZXF1YWwoU3RhY2suZmluZChyZXMxKSwgc3RhY2spO1xuICAgIHRlc3QuZXF1YWwoU3RhY2suZmluZChyZXMyKSwgc3RhY2spO1xuICAgIHRlc3QuZXF1YWwoU3RhY2suZmluZChsZXZlbDIpLCBzdGFjayk7XG5cbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2NoaWxkJyk7XG5cbiAgICB0ZXN0LnRocm93cygoKSA9PiBTdGFjay5maW5kKGNoaWxkKSk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gU3RhY2suZmluZChyb290KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnU3RhY2suaXNTdGFjayBpbmRpY2F0ZXMgdGhhdCBhIGNvbnN0cnVjdCBpcyBhIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBjID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ0NvbnN0cnVjdCcpO1xuICAgIHRlc3Qub2soc3RhY2suaXNTdGFjayk7XG4gICAgdGVzdC5vayghKGMgYXMgYW55KS5pc1N0YWNrKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc3RhY2suaWQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsb2dpY2FsIGlkZW50aXRpZXMgb2YgcmVzb3VyY2VzIHdpdGhpbiBpdCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ015U3RhY2snKTtcbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUnIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdNeVJlc291cmNlVHlwZScgfSB9IH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzdGFjay50ZW1wbGF0ZU9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gc2V0IHRlbXBsYXRlLWxldmVsIG9wdGlvbnMnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgc3RhY2sudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uID0gJ1N0YWNrRGVzY3JpcHRpb24nO1xuICAgIHN0YWNrLnRlbXBsYXRlT3B0aW9ucy50ZW1wbGF0ZUZvcm1hdFZlcnNpb24gPSAnVGVtcGxhdGVWZXJzaW9uJztcbiAgICBzdGFjay50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtID0gJ1RyYW5zZm9ybSc7XG4gICAgc3RhY2sudGVtcGxhdGVPcHRpb25zLm1ldGFkYXRhID0ge1xuICAgICAgTWV0YWRhdGFLZXk6ICdNZXRhZGF0YVZhbHVlJ1xuICAgIH07XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgIERlc2NyaXB0aW9uOiAnU3RhY2tEZXNjcmlwdGlvbicsXG4gICAgICBUcmFuc2Zvcm06ICdUcmFuc2Zvcm0nLFxuICAgICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnVGVtcGxhdGVWZXJzaW9uJyxcbiAgICAgIE1ldGFkYXRhOiB7IE1ldGFkYXRhS2V5OiAnTWV0YWRhdGFWYWx1ZScgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgLy8gVGhpcyBhcHByb2FjaCB3aWxsIG9ubHkgYXBwbHkgdG8gVHlwZVNjcmlwdCBjb2RlLCBidXQgYXQgbGVhc3QgaXQncyBhIHRlbXBvcmFyeVxuICAvLyB3b3JrYXJvdW5kIGZvciBwZW9wbGUgcnVubmluZyBpbnRvIGlzc3VlcyBjYXVzZWQgYnkgU0RLLTMwMDMuXG4gIC8vIFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSBwcm9wZXIgc29sdXRpb24gdGhhdCBpbnZvbHZlZCBqc2lpIGNhbGxiYWNrcyAod2hlbiB0aGV5IGV4aXN0KVxuICAvLyBzbyB0aGlzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBqc2lpIGxhbmd1YWdlcyBhcyB3ZWxsLlxuICAnT3ZlcnJpZGluZyBgU3RhY2sudG9DbG91ZEZvcm1hdGlvbmAgYWxsb3dzIGFyYml0cmFyeSBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBkdXJpbmcgc3ludGhlc2lzJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFja1dpdGhQb3N0UHJvY2Vzc29yKCk7XG5cbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdteVJlc291cmNlJywge1xuICAgICAgdHlwZTogJ0FXUzo6TXlSZXNvdXJjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIE15UHJvcDE6ICdoZWxsbycsXG4gICAgICAgIE15UHJvcDI6ICdob3dkeScsXG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgS2V5OiAndmFsdWUnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyBSZXNvdXJjZXM6XG4gICAgICB7IG15UmVzb3VyY2U6XG4gICAgICAgICB7IFR5cGU6ICdBV1M6Ok15UmVzb3VyY2UnLFxuICAgICAgICAgUHJvcGVydGllczpcbiAgICAgICAgICB7IE15UHJvcDE6ICdoZWxsbycsXG4gICAgICAgICAgTXlQcm9wMjogJ2hvd2R5JyxcbiAgICAgICAgICBFbnZpcm9ubWVudDogeyBrZXk6ICd2YWx1ZScgfSB9IH0gfSB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdDb25zdHJ1Y3QuZmluZFJlc291cmNlKGxvZ2ljYWxJZCkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgYSByZXNvdXJjZSBieSBpdHMgcGF0aCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICB0ZXN0Lm9rKCFzdGFjay50cnlGaW5kQ2hpbGQoJ2ZvbycpLCAnZW1wdHkgc3RhY2snKTtcblxuICAgIGNvbnN0IHIxID0gbmV3IFJlc291cmNlKHN0YWNrLCAnSGVsbG8nLCB7IHR5cGU6ICdNeVJlc291cmNlJyB9KTtcbiAgICB0ZXN0LmVxdWFsKHN0YWNrLmZpbmRSZXNvdXJjZShyMS5zdGFja1BhdGgpLCByMSwgJ2xvb2sgdXAgdG9wLWxldmVsJyk7XG5cbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdDaGlsZCcpO1xuICAgIGNvbnN0IHIyID0gbmV3IFJlc291cmNlKGNoaWxkLCAnSGVsbG8nLCB7IHR5cGU6ICdNeVJlc291cmNlJyB9KTtcblxuICAgIHRlc3QuZXF1YWwoc3RhY2suZmluZFJlc291cmNlKHIyLnN0YWNrUGF0aCksIHIyLCAnbG9vayB1cCBjaGlsZCcpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1N0YWNrLmZpbmRSZXNvdXJjZSB3aWxsIGZhaWwgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgcCA9IG5ldyBQYXJhbWV0ZXIoc3RhY2ssICdNeVBhcmFtJywgeyB0eXBlOiAnU3RyaW5nJyB9KTtcblxuICAgIHRlc3QudGhyb3dzKCgpID0+IHN0YWNrLmZpbmRSZXNvdXJjZShwLnBhdGgpKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnU3RhY2suZ2V0QnlQYXRoIGNhbiBiZSB1c2VkIHRvIGZpbmQgYW55IENsb3VkRm9ybWF0aW9uIGVsZW1lbnQgKFBhcmFtZXRlciwgT3V0cHV0LCBldGMpJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgcCA9IG5ldyBQYXJhbWV0ZXIoc3RhY2ssICdNeVBhcmFtJywgeyB0eXBlOiAnU3RyaW5nJyB9KTtcbiAgICBjb25zdCBvID0gbmV3IE91dHB1dChzdGFjaywgJ015T3V0cHV0Jyk7XG4gICAgY29uc3QgYyA9IG5ldyBDb25kaXRpb24oc3RhY2ssICdNeUNvbmRpdGlvbicpO1xuXG4gICAgdGVzdC5lcXVhbChzdGFjay5maW5kQ2hpbGQocC5wYXRoKSwgcCk7XG4gICAgdGVzdC5lcXVhbChzdGFjay5maW5kQ2hpbGQoby5wYXRoKSwgbyk7XG4gICAgdGVzdC5lcXVhbChzdGFjay5maW5kQ2hpbGQoYy5wYXRoKSwgYyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnU3RhY2sgbmFtZXMgY2FuIGhhdmUgaHlwaGVucyBpbiB0aGVtJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBBcHAoKTtcblxuICAgIG5ldyBTdGFjayhyb290LCAnSGVsbG8tV29ybGQnKTtcbiAgICAvLyBEaWQgbm90IHRocm93XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnSW5jbHVkZSBzaG91bGQgc3VwcG9ydCBub24taGFzaCB0b3AtbGV2ZWwgdGVtcGxhdGUgZWxlbWVudHMgbGlrZSBcIkRlc2NyaXB0aW9uXCInKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSB7XG4gICAgICBEZXNjcmlwdGlvbjogJ2hlbGxvLCB3b3JsZCdcbiAgICB9O1xuXG4gICAgbmV3IEluY2x1ZGUoc3RhY2ssICdJbmNsdWRlJywgeyB0ZW1wbGF0ZSB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKTtcblxuICAgIHRlc3QuZXF1YWwodHlwZW9mIG91dHB1dC5EZXNjcmlwdGlvbiwgJ3N0cmluZycpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdDYW5cXCd0IGFkZCBjaGlsZHJlbiBkdXJpbmcgc3ludGhlc2lzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIC8vIGFkZCBhIGNvbnN0cnVjdCB3aXRoIGEgdG9rZW4gdGhhdCB3aGVuIHJlc29sdmVkIGFkZHMgYSBjaGlsZC4gdGhpc1xuICAgIC8vIG1lYW5zIHRoYXQgdGhpcyBjaGlsZCBpcyBnb2luZyB0byBiZSBhZGRlZCBkdXJpbmcgc3ludGhlc2lzIGFuZCB0aGlzXG4gICAgLy8gaXMgYSBuby1uby5cbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZScsIHsgdHlwZTogJ1QnLCBwcm9wZXJ0aWVzOiB7XG4gICAgICBmb286IG5ldyBUb2tlbigoKSA9PiBuZXcgQ29uc3RydWN0KHN0YWNrLCAnRm9vJykpXG4gICAgfX0pO1xuXG4gICAgdGVzdC50aHJvd3MoKCkgPT4gc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCAvQ2Fubm90IGFkZCBjaGlsZHJlbiBkdXJpbmcgc3ludGhlc2lzLyk7XG5cbiAgICAvLyBva2F5IHRvIGFkZCBhZnRlciBzeW50aGVzaXNcbiAgICBuZXcgQ29uc3RydWN0KHN0YWNrLCAnQzEnKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxufTtcblxuY2xhc3MgU3RhY2tXaXRoUG9zdFByb2Nlc3NvciBleHRlbmRzIFN0YWNrIHtcblxuICAvLyAuLi5cblxuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHN1cGVyLnRvQ2xvdWRGb3JtYXRpb24oKTtcblxuICAgIC8vIG1hbmlwdWxhdGUgdGVtcGxhdGUgKGUuZy4gcmVuYW1lIFwiS2V5XCIgdG8gXCJrZXlcIilcbiAgICB0ZW1wbGF0ZS5SZXNvdXJjZXMubXlSZXNvdXJjZS5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LmtleSA9XG4gICAgICB0ZW1wbGF0ZS5SZXNvdXJjZXMubXlSZXNvdXJjZS5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LktleTtcbiAgICBkZWxldGUgdGVtcGxhdGUuUmVzb3VyY2VzLm15UmVzb3VyY2UuUHJvcGVydGllcy5FbnZpcm9ubWVudC5LZXk7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cbn1cbiJdfQ==

@@ -347,2 +347,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUNBQTBDO0FBRTFDLG1DQUE0QztBQWdZNUMsU0FBUyxVQUFVLENBQUMsT0FBYTtJQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLFVBQUksRUFBRSxDQUFDO0lBQ3hCLElBQUksT0FBTyxFQUFFO1FBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNFO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksZUFBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbEQsT0FBTztRQUNILElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVE7S0FDakUsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLG9CQUFxQixTQUFRLGVBQVM7SUFDeEMsWUFBWSxNQUFpQixFQUFFLElBQVk7UUFDdkMsS0FBSyxD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QU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFD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LElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0RBQXNELENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELDhDQUE4QyxDQUFDLElBQVU7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFJLEVBQUUsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLGVBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENB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QUM7UUFFeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFYix5RkFBeUY7UUFDekYsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLCtDQUErQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxvREFBb0QsQ0FBQyxDQUFDO1FBRXJHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVmLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjeGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENvbnN0cnVjdCwgUm9vdCB9IGZyb20gJy4uLy4uL2xpYic7XG5cbi8vIHRzbGludDpkaXNhYmxlOnZhcmlhYmxlLW5hbWVcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuXG5leHBvcnQgPSB7XG4gICAgJ3RoZSBcIlJvb3RcIiBjb25zdHJ1Y3QgaXMgYSBzcGVjaWFsIGNvbnN0cnVjdCB3aGljaCBjYW4gYmUgdXNlZCBhcyB0aGUgcm9vdCBvZiB0aGUgdHJlZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgdGVzdC5lcXVhbChyb290LmlkLCAnJywgJ2lmIG5vdCBzcGVjaWZpZWQsIG5hbWUgb2YgYSByb290IGNvbnN0cnVjdCBpcyBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICAgICAgdGVzdC5vayghcm9vdC5wYXJlbnQsICdubyBwYXJlbnQnKTtcbiAgICAgICAgdGVzdC5lcXVhbChyb290LmNoaWxkcmVuLmxlbmd0aCwgMCwgJ2EgY29uc3RydWN0IGlzIGNyZWF0ZWQgd2l0aG91dCBjaGlsZHJlbicpOyAvLyBubyBjaGlsZHJlblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdHMgY2Fubm90IGJlIGNyZWF0ZWQgd2l0aCBhbiBlbXB0eSBuYW1lIHVubGVzcyB0aGV5IGFyZSByb290Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgQ29uc3RydWN0KHJvb3QsICcnKSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY29uc3RydWN0Lm5hbWUgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHQgPSBjcmVhdGVUcmVlKCk7XG5cbiAgICAgICAgdGVzdC5lcXVhbCh0LmNoaWxkMS5pZCwgJ0NoaWxkMScpO1xuICAgICAgICB0ZXN0LmVxdWFsKHQuY2hpbGQyLmlkLCAnQ2hpbGQyJyk7XG4gICAgICAgIHRlc3QuZXF1YWwodC5jaGlsZDFfMS5pZCwgJ0NoaWxkMTEnKTtcbiAgICAgICAgdGVzdC5lcXVhbCh0LmNoaWxkMV8yLmlkLCAnQ2hpbGQxMicpO1xuICAgICAgICB0ZXN0LmVxdWFsKHQuY2hpbGQxXzFfMS5pZCwgJ0NoaWxkMTExJyk7XG4gICAgICAgIHRlc3QuZXF1YWwodC5jaGlsZDJfMS5pZCwgJ0NoaWxkMjEnKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdCBpZCBjYW4gdXNlIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHRoZSBwYXRoIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAndmFsaWQnKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnVmFsaUQnKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnVmExMjNsaWQnKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAndicpO1xuICAgICAgICBuZXcgQ29uc3RydWN0KHJvb3QsICcgIGludmFsaWQnICk7XG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2ludmFsaWQgICAnICk7XG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJzEyM2ludmFsaWQnICk7XG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2luIHZhbGlkJyApO1xuICAgICAgICBuZXcgQ29uc3RydWN0KHJvb3QsICdpbl9WYWxpZCcgKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnaW4tVmFsaWQnICk7XG4gICAgICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2luXFxcXFZhbGlkJyApO1xuICAgICAgICBuZXcgQ29uc3RydWN0KHJvb3QsICdpbi5WYWxpZCcgKTtcblxuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgQ29uc3RydWN0KHJvb3QsICdpbi9WYWxpZCcgKSwgRXJyb3IsICdiYWNrc2xhc2hlcyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QudW5pcXVlSWQgcmV0dXJucyBhIHRyZWUtdW5pcXVlIGFscGhhbnVtZXJpYyBpZCBvZiB0aGlzIGNvbnN0cnVjdCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcblxuICAgICAgICBjb25zdCBjaGlsZDEgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdUaGlzIGlzIHRoZSBmaXJzdCBjaGlsZCcpO1xuICAgICAgICBjb25zdCBjaGlsZDIgPSBuZXcgQ29uc3RydWN0KGNoaWxkMSwgJ1NlY29uZCBsZXZlbCcpO1xuICAgICAgICBjb25zdCBjMSA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQyLCAnTXkgY29uc3RydWN0Jyk7XG4gICAgICAgIGNvbnN0IGMyID0gbmV3IENvbnN0cnVjdChjaGlsZDEsICdNeSBjb25zdHJ1Y3QnKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjMS5wYXRoLCAnVGhpcyBpcyB0aGUgZmlyc3QgY2hpbGQvU2Vjb25kIGxldmVsL015IGNvbnN0cnVjdCcpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjMi5wYXRoLCAnVGhpcyBpcyB0aGUgZmlyc3QgY2hpbGQvTXkgY29uc3RydWN0Jyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGMxLnVuaXF1ZUlkLCAnVGhpc2lzdGhlZmlyc3RjaGlsZFNlY29uZGxldmVsTXljb25zdHJ1Y3QyMDIxMzFFMCcpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjMi51bmlxdWVJZCwgJ1RoaXNpc3RoZWZpcnN0Y2hpbGRNeWNvbnN0cnVjdDhDMjg4REY5Jyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY2Fubm90IGNhbGN1bGF0ZSB1bmlxdWVJZCBpZiB0aGUgY29uc3RydWN0IHBhdGggaXMgW1wiRGVmYXVsdFwiXScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IENvbnN0cnVjdChyb290LCAnRGVmYXVsdCcpLCAvVW5hYmxlIHRvIGNhbGN1bGF0ZSBhIHVuaXF1ZSBpZCBmb3IgYW4gZW1wdHkgc2V0IG9mIGNvbXBvbmVudHMvKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QuZ2V0Q2hpbGRyZW4oKSByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjaGlsZHJlbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdDaGlsZDEnKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnQ2hpbGQyJyk7XG4gICAgICAgIHRlc3QuZXF1YWwoY2hpbGQuY2hpbGRyZW4ubGVuZ3RoLCAwLCAnbm8gY2hpbGRyZW4nKTtcbiAgICAgICAgdGVzdC5lcXVhbChyb290LmNoaWxkcmVuLmxlbmd0aCwgMiwgJ3R3byBjaGlsZHJlbiBhcmUgZXhwZWN0ZWQnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QuZmluZENoaWxkKG5hbWUpIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIGEgY2hpbGQgZnJvbSBhIHBhcmVudCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdDb250cnVjdCcpO1xuICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKHJvb3QudHJ5RmluZENoaWxkKGNoaWxkLmlkKSwgY2hpbGQsICdmaW5kQ2hpbGQobmFtZSkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNoaWxkIGZyb20gYSBwYXJlbnQnKTtcbiAgICAgICAgdGVzdC5vayghcm9vdC50cnlGaW5kQ2hpbGQoJ05vdEZvdW5kJyksICdmaW5kQ2hpbGQobmFtZSkgcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGNoaWxkIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC5nZXRDaGlsZChuYW1lKSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBhIGNoaWxkIGZyb20gYSBwYXJlbnQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbmV3IENvbnN0cnVjdChyb290LCAnQ29udHJ1Y3QnKTtcbiAgICAgICAgdGVzdC5zdHJpY3RFcXVhbChyb290LmZpbmRDaGlsZChjaGlsZC5pZCksIGNoaWxkLCAnZ2V0Q2hpbGQobmFtZSkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNoaWxkIGZyb20gYSBwYXJlbnQnKTtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgcm9vdC5maW5kQ2hpbGQoJ05vdEZvdW5kJyk7XG4gICAgICAgIH0sICcnLCAnZ2V0Q2hpbGQobmFtZSkgcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGNoaWxkIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC50b1N0cmluZygpIGFuZCBjb25zdHJ1Y3QudG9UcmVlU3RyaW5nKCkgY2FuIGJlIHVzZWQgZm9yIGRpYWdub3N0aWNzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHQgPSBjcmVhdGVUcmVlKCk7XG5cbiAgICAgICAgdGVzdC5lcXVhbCh0LnJvb3QudG9TdHJpbmcoKSwgJ1Jvb3QnKTtcbiAgICAgICAgdGVzdC5lcXVhbCh0LmNoaWxkMV8xXzEudG9TdHJpbmcoKSwgJ0NvbnN0cnVjdCBbQ2hpbGQxL0NoaWxkMTEvQ2hpbGQxMTFdJyk7XG4gICAgICAgIHRlc3QuZXF1YWwodC5jaGlsZDIudG9TdHJpbmcoKSwgJ0NvbnN0cnVjdCBbQ2hpbGQyXScpO1xuICAgICAgICB0ZXN0LmVxdWFsKHQucm9vdC50b1RyZWVTdHJpbmcoKSwgJ1Jvb3RcXG4gIENvbnN0cnVjdCBbQ2hpbGQxXVxcbiAgICBDb25zdHJ1Y3QgW0NoaWxkMTFdXFxuICAgICAgQ29uc3RydWN0IFtDaGlsZDExMV1cXG4gICAgQ29uc3RydWN0IFtDaGlsZDEyXVxcbiAgQ29uc3RydWN0IFtDaGlsZDJdXFxuICAgIENvbnN0cnVjdCBbQ2hpbGQyMV1cXG4nKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QuZ2V0Q29udGV4dChrZXkpIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSB2YWx1ZSBmcm9tIGNvbnRleHQgZGVmaW5lZCBhdCB0aGUgcm9vdCBsZXZlbCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgY3R4MTogMTIsXG4gICAgICAgICAgICBjdHgyOiAnaGVsbG8nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdCA9IGNyZWF0ZVRyZWUoY29udGV4dCk7XG4gICAgICAgIHRlc3QuZXF1YWwodC5yb290LmdldENvbnRleHQoJ2N0eDEnKSwgMTIpO1xuICAgICAgICB0ZXN0LmVxdWFsKHQuY2hpbGQxXzFfMS5nZXRDb250ZXh0KCdjdHgyJyksICdoZWxsbycpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC5zZXRDb250ZXh0KGssdikgc2V0cyBjb250ZXh0IGF0IHNvbWUgbGV2ZWwgYW5kIGNvbnN0cnVjdC5nZXRDb250ZXh0KGtleSkgd2lsbCByZXR1cm4gdGhlIGxvd2VybW9zdCB2YWx1ZSBkZWZpbmVkIGluIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgcm9vdC5zZXRDb250ZXh0KCdjMScsICdyb290Jyk7XG4gICAgICAgIHJvb3Quc2V0Q29udGV4dCgnYzInLCAncm9vdCcpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkMSA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2NoaWxkMScpO1xuICAgICAgICBjaGlsZDEuc2V0Q29udGV4dCgnYzInLCAnY2hpbGQxJyk7XG4gICAgICAgIGNoaWxkMS5zZXRDb250ZXh0KCdjMycsICdjaGlsZDEnKTtcblxuICAgICAgICBjb25zdCBjaGlsZDIgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdjaGlsZDInKTtcbiAgICAgICAgY29uc3QgY2hpbGQzID0gbmV3IENvbnN0cnVjdChjaGlsZDEsICdjaGlsZDFjaGlsZDEnKTtcbiAgICAgICAgY2hpbGQzLnNldENvbnRleHQoJ2MxJywgJ2NoaWxkMycpO1xuICAgICAgICBjaGlsZDMuc2V0Q29udGV4dCgnYzQnLCAnY2hpbGQzJyk7XG5cbiAgICAgICAgdGVzdC5lcXVhbChyb290LmdldENvbnRleHQoJ2MxJyksICdyb290Jyk7XG4gICAgICAgIHRlc3QuZXF1YWwocm9vdC5nZXRDb250ZXh0KCdjMicpLCAncm9vdCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKHJvb3QuZ2V0Q29udGV4dCgnYzMnKSwgdW5kZWZpbmVkKTtcblxuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMS5nZXRDb250ZXh0KCdjMScpLCAncm9vdCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMS5nZXRDb250ZXh0KCdjMicpLCAnY2hpbGQxJyk7XG4gICAgICAgIHRlc3QuZXF1YWwoY2hpbGQxLmdldENvbnRleHQoJ2MzJyksICdjaGlsZDEnKTtcblxuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMi5nZXRDb250ZXh0KCdjMScpLCAncm9vdCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMi5nZXRDb250ZXh0KCdjMicpLCAncm9vdCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMi5nZXRDb250ZXh0KCdjMycpLCB1bmRlZmluZWQpO1xuXG4gICAgICAgIHRlc3QuZXF1YWwoY2hpbGQzLmdldENvbnRleHQoJ2MxJyksICdjaGlsZDMnKTtcbiAgICAgICAgdGVzdC5lcXVhbChjaGlsZDMuZ2V0Q29udGV4dCgnYzInKSwgJ2NoaWxkMScpO1xuICAgICAgICB0ZXN0LmVxdWFsKGNoaWxkMy5nZXRDb250ZXh0KCdjMycpLCAnY2hpbGQxJyk7XG4gICAgICAgIHRlc3QuZXF1YWwoY2hpbGQzLmdldENvbnRleHQoJ2M0JyksICdjaGlsZDMnKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC5zZXRDb250ZXh0KGtleSwgdmFsdWUpIGNhbiBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgYWRkaW5nIGFueSBjaGlsZHJlbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnY2hpbGQxJyk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHJvb3Quc2V0Q29udGV4dCgnaycsICd2JykpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC5wYXRoUGFydHMgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIG9mIGFsbCBuYW1lcyBmcm9tIHJvb3QgdG8gbm9kZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCB0cmVlID0gY3JlYXRlVHJlZSgpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbCh0cmVlLnJvb3QucGF0aCwgJycpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbCh0cmVlLmNoaWxkMV8xXzEucGF0aCwgJ0NoaWxkMS9DaGlsZDExL0NoaWxkMTExJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHRyZWUuY2hpbGQyLnBhdGgsICdDaGlsZDInKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdpZiBhIHJvb3QgY29uc3RydWN0IGhhcyBhIG5hbWUsIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcGF0aCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCB0cmVlID0gY3JlYXRlVHJlZSh7fSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHRyZWUucm9vdC5wYXRoLCAnJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHRyZWUuY2hpbGQxXzFfMS5wYXRoLCAnQ2hpbGQxL0NoaWxkMTEvQ2hpbGQxMTEnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QgY2FuIG5vdCBiZSBjcmVhdGVkIHdpdGggdGhlIG5hbWUgb2YgYSBzaWJsaW5nJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnU2FtZU5hbWUnKTtcblxuICAgICAgICAvLyBUSEVOOiBUaGV5IGhhdmUgZGlmZmVyZW50IHBhdGhzXG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ1NhbWVOYW1lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWRkTWV0YWRhdGEodHlwZSwgZGF0YSkgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIG1ldGFkYXRhIHRvIGNvbnN0cnVjdHMgRklORF9NRScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgY29uc3QgY29uID0gbmV3IENvbnN0cnVjdChyb290LCAnTXlDb25zdHJ1Y3QnKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhLCBbXSwgJ3N0YXJ0cyBlbXB0eScpO1xuXG4gICAgICAgIGNvbi5hZGRNZXRhZGF0YSgna2V5JywgJ3ZhbHVlJyk7XG4gICAgICAgIGNvbi5hZGRNZXRhZGF0YSgnbnVtYmVyJywgMTAzKTtcbiAgICAgICAgY29uLmFkZE1ldGFkYXRhKCdhcnJheScsIFsgMTIzLCA0NTYgXSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLnR5cGUsICdrZXknKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLmRhdGEsICd2YWx1ZScpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGFbMV0uZGF0YSwgMTAzKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzJdLmRhdGEsIFsgMTIzLCA0NTYgXSk7XG4gICAgICAgIHRlc3Qub2soY29uLm1ldGFkYXRhWzBdLnRyYWNlWzBdLmluZGV4T2YoJ0ZJTkRfTUUnKSAhPT0gLTEsICdGaXJzdCBzdGFjayBsaW5lIHNob3VsZCBpbmNsdWRlIHRoaXMgZnVuY3Rpb25cXHMgbmFtZScpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZE1ldGFkYXRhKHR5cGUsIHVuZGVmaW5lZC9udWxsKSBpcyBpZ25vcmVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICBjb25zdCBjb24gPSBuZXcgQ29uc3RydWN0KHJvb3QsICdGb28nKTtcbiAgICAgICAgY29uLmFkZE1ldGFkYXRhKCdOdWxsJywgbnVsbCk7XG4gICAgICAgIGNvbi5hZGRNZXRhZGF0YSgnVW5kZWZpbmVkJywgdW5kZWZpbmVkKTtcbiAgICAgICAgY29uLmFkZE1ldGFkYXRhKCdUcnVlJywgdHJ1ZSk7XG4gICAgICAgIGNvbi5hZGRNZXRhZGF0YSgnRmFsc2UnLCBmYWxzZSk7XG4gICAgICAgIGNvbi5hZGRNZXRhZGF0YSgnRW1wdHknLCAnJyk7XG5cbiAgICAgICAgY29uc3QgZXhpc3RzID0gKGtleTogc3RyaW5nKSA9PiBjb24ubWV0YWRhdGEuZmluZCh4ID0+IHgudHlwZSA9PT0ga2V5KTtcblxuICAgICAgICB0ZXN0Lm9rKCFleGlzdHMoJ051bGwnKSk7XG4gICAgICAgIHRlc3Qub2soIWV4aXN0cygnVW5kZWZpbmVkJykpO1xuICAgICAgICB0ZXN0Lm9rKGV4aXN0cygnVHJ1ZScpKTtcbiAgICAgICAgdGVzdC5vayhleGlzdHMoJ0ZhbHNlJykpO1xuICAgICAgICB0ZXN0Lm9rKGV4aXN0cygnRW1wdHknKSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWRkV2FybmluZyhtZXNzYWdlKSBjYW4gYmUgdXNlZCB0byBhZGQgYSBcIldBUk5JTkdcIiBtZXNzYWdlIGVudHJ5IHRvIHRoZSBjb25zdHJ1Y3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgIGNvbnN0IGNvbiA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ015Q29uc3RydWN0Jyk7XG4gICAgICAgIGNvbi5hZGRXYXJuaW5nKCdUaGlzIGNvbnN0cnVjdCBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIG90aGVyIG9uZSBpbnN0ZWFkJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS50eXBlLCBjeGFwaS5XQVJOSU5HX01FVEFEQVRBX0tFWSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS5kYXRhLCAnVGhpcyBjb25zdHJ1Y3QgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSBvdGhlciBvbmUgaW5zdGVhZCcpO1xuICAgICAgICB0ZXN0Lm9rKGNvbi5tZXRhZGF0YVswXS50cmFjZS5sZW5ndGggPiAwKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhZGRFcnJvcihtZXNzYWdlKSBjYW4gYmUgdXNlZCB0byBhZGQgYSBcIkVSUk9SXCIgbWVzc2FnZSBlbnRyeSB0byB0aGUgY29uc3RydWN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICBjb25zdCBjb24gPSBuZXcgQ29uc3RydWN0KHJvb3QsICdNeUNvbnN0cnVjdCcpO1xuICAgICAgICBjb24uYWRkRXJyb3IoJ1N0b3AhJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS50eXBlLCBjeGFwaS5FUlJPUl9NRVRBREFUQV9LRVkpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGFbMF0uZGF0YSwgJ1N0b3AhJyk7XG4gICAgICAgIHRlc3Qub2soY29uLm1ldGFkYXRhWzBdLnRyYWNlLmxlbmd0aCA+IDApO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZEluZm8obWVzc2FnZSkgY2FuIGJlIHVzZWQgdG8gYWRkIGFuIFwiSU5GT1wiIG1lc3NhZ2UgZW50cnkgdG8gdGhlIGNvbnN0cnVjdCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgY29uc3QgY29uID0gbmV3IENvbnN0cnVjdChyb290LCAnTXlDb25zdHJ1Y3QnKTtcbiAgICAgICAgY29uLmFkZEluZm8oJ0hleSB0aGVyZSwgaG93IGRvIHlvdSBkbz8nKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLnR5cGUsIGN4YXBpLklORk9fTUVUQURBVEFfS0VZKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLmRhdGEsICdIZXkgdGhlcmUsIGhvdyBkbyB5b3UgZG8/Jyk7XG4gICAgICAgIHRlc3Qub2soY29uLm1ldGFkYXRhWzBdLnRyYWNlLmxlbmd0aCA+IDApO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ211bHRpcGxlIGNoaWxkcmVuIG9mIHRoZSBzYW1lIHR5cGUsIHdpdGggZXhwbGljaXQgbmFtZXMgYXJlIHdlbGNvbWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgIG5ldyBNeUJlYXV0aWZ1bENvbnN0cnVjdChyb290LCAnbWJjMScpO1xuICAgICAgICBuZXcgTXlCZWF1dGlmdWxDb25zdHJ1Y3Qocm9vdCwgJ21iYzInKTtcbiAgICAgICAgbmV3IE15QmVhdXRpZnVsQ29uc3RydWN0KHJvb3QsICdtYmMzJyk7XG4gICAgICAgIG5ldyBNeUJlYXV0aWZ1bENvbnN0cnVjdChyb290LCAnbWJjNCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKHJvb3QuY2hpbGRyZW4ubGVuZ3RoLCA0KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25zdHJ1Y3QucmVxdWlyZWQocHJvcHMsIG5hbWUpIGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoYXQgcmVxdWlyZWQgcHJvcGVydGllcyBhcmUgZGVmaW5lZCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcblxuICAgICAgICAvLyBzaG91bGQgYmUgb2tcbiAgICAgICAgY29uc3QgYyA9IG5ldyBDb25zdHJ1Y3RXaXRoUmVxdWlyZWQocm9vdCwgJ0NvbnN0cnVjdCcsIHsgcmVxdWlyZWRQcm9wOiAxMjMsIGFub3RoZXJSZXF1aXJlZFByb3A6IHRydWUgfSk7XG4gICAgICAgIHRlc3QuZXF1YWwoYy5yZXF1aXJlZFByb3AsIDEyMyk7XG4gICAgICAgIHRlc3QuZXF1YWwoYy5hbm90aGVyUmVxdWlyZWRQcm9wLCB0cnVlKTtcblxuICAgICAgICAvLyBzaG91bGQgdGhyb3dcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IENvbnN0cnVjdFdpdGhSZXF1aXJlZChyb290LCAnQycsIHsgb3B0aW9uYWxQcm9wOiAnaGVsbG8nIH0gYXMgYW55KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQ29uc3RydWN0IG5hbWUgdmFsaWRhdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcblxuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgSUFtU3BhcnRhY3VzQ29uc3RydWN0KHJvb3QsIFwiQ2Flc2FyXCIpKTtcbiAgICAgICAgbmV3IElBbVNwYXJ0YWN1c0NvbnN0cnVjdChyb290LCBcIlNwYXJ0YWN1c1wiKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICdjb25zdHJ1Y3QudmFsaWRhdGUoKSBjYW4gYmUgaW1wbGVtZW50ZWQgdG8gcGVyZm9ybSB2YWxpZGF0aW9uLCBjb25zdHJ1Y3QudmFsaWRhdGVUcmVlKCkgd2lsbCByZXR1cm4gYWxsIGVycm9ycyBmcm9tIHRoZSBzdWJ0cmVlIChERlMpJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICAgICAgY2xhc3MgTXlDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgICAgICAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbICdteS1lcnJvcjEnLCAnbXktZXJyb3IyJyBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3MgWW91ckNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgICAgICAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsgJ3lvdXItZXJyb3IxJyBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3MgVGhlaXJDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgICAgICAgICBuZXcgWW91ckNvbnN0cnVjdCh0aGlzLCAnWW91ckNvbnN0cnVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsgJ3RoZWlyLWVycm9yJyBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3MgU3RhY2sgZXh0ZW5kcyBSb290IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgICAgICAgICBuZXcgTXlDb25zdHJ1Y3QodGhpcywgJ015Q29uc3RydWN0Jyk7XG4gICAgICAgICAgICAgICAgbmV3IFRoZWlyQ29uc3RydWN0KHRoaXMsICdUaGVpckNvbnN0cnVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBbICdzdGFjay1lcnJvcicgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gKHN0YWNrLnZhbGlkYXRlVHJlZSgpKS5tYXAodiA9PiAoeyBwYXRoOiB2LnNvdXJjZS5wYXRoLCBtZXNzYWdlOiB2Lm1lc3NhZ2UgfSkpO1xuXG4gICAgICAgIC8vIHZhbGlkYXRlIERGU1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChlcnJvcnMsIFtcbiAgICAgICAgICAgIHsgcGF0aDogJ015Q29uc3RydWN0JywgbWVzc2FnZTogJ215LWVycm9yMScgfSxcbiAgICAgICAgICAgIHsgcGF0aDogJ015Q29uc3RydWN0JywgbWVzc2FnZTogJ215LWVycm9yMicgfSxcbiAgICAgICAgICAgIHsgcGF0aDogJ1RoZWlyQ29uc3RydWN0L1lvdXJDb25zdHJ1Y3QnLCBtZXNzYWdlOiAneW91ci1lcnJvcjEnIH0sXG4gICAgICAgICAgICB7IHBhdGg6ICdUaGVpckNvbnN0cnVjdCcsIG1lc3NhZ2U6ICd0aGVpci1lcnJvcicgfSxcbiAgICAgICAgICAgIHsgcGF0aDogJycsIG1lc3NhZ2U6ICdzdGFjay1lcnJvcicgfVxuICAgICAgICBdKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnN0cnVjdC5sb2NrKCkgcHJvdGVjdHMgYWdhaW5zdCBhZGRpbmcgY2hpbGRyZW4gYW55d2hlcmUgdW5kZXIgdGhpcyBjb25zdHJ1Y3QgKGRpcmVjdCBvciBpbmRpcmVjdCknKHRlc3Q6IFRlc3QpIHtcblxuICAgICAgICBjbGFzcyBMb2NrYWJsZUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgICAgICAgICBwdWJsaWMgbG9ja01lKCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdWJsaWMgdW5sb2NrTWUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmxvY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFJvb3QoKTtcblxuICAgICAgICBjb25zdCBjMGEgPSBuZXcgTG9ja2FibGVDb25zdHJ1Y3Qoc3RhY2ssICdjMGEnKTtcbiAgICAgICAgY29uc3QgYzBiID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ2MwYicpO1xuXG4gICAgICAgIGNvbnN0IGMxYSA9IG5ldyBDb25zdHJ1Y3QoYzBhLCAnYzFhJyk7XG4gICAgICAgIGNvbnN0IGMxYiA9IG5ldyBDb25zdHJ1Y3QoYzBhLCAnYzFiJyk7XG5cbiAgICAgICAgYzBhLmxvY2tNZSgpO1xuXG4gICAgICAgIC8vIG5vdyB3ZSBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBhZGQgY2hpbGRyZW4gdG8gYzBiLCBidXQgbm90IHRvIGMwYSBvciBhbnkgaXRzIGNoaWxkcmVuXG4gICAgICAgIG5ldyBDb25zdHJ1Y3QoYzBiLCAnYzFhJyk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBDb25zdHJ1Y3QoYzBhLCAnZmFpbDEnKSwgL0Nhbm5vdCBhZGQgY2hpbGRyZW4gdG8gXCJjMGFcIiBkdXJpbmcgc3ludGhlc2lzLyk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBDb25zdHJ1Y3QoYzFhLCAnZmFpbDInKSwgL0Nhbm5vdCBhZGQgY2hpbGRyZW4gdG8gXCJjMGFcXC9jMWFcIiBkdXJpbmcgc3ludGhlc2lzLyk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBDb25zdHJ1Y3QoYzFiLCAnZmFpbDMnKSwgL0Nhbm5vdCBhZGQgY2hpbGRyZW4gdG8gXCJjMGFcXC9jMWJcIiBkdXJpbmcgc3ludGhlc2lzLyk7XG5cbiAgICAgICAgYzBhLnVubG9ja01lKCk7XG5cbiAgICAgICAgbmV3IENvbnN0cnVjdChjMGEsICdjMGFaJyk7XG4gICAgICAgIG5ldyBDb25zdHJ1Y3QoYzFhLCAnYzFhWicpO1xuICAgICAgICBuZXcgQ29uc3RydWN0KGMxYiwgJ2MxYlonKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUcmVlKGNvbnRleHQ/OiBhbnkpIHtcbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiByb290LnNldENvbnRleHQoa2V5LCBjb250ZXh0W2tleV0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZDEgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdDaGlsZDEnKTtcbiAgICBjb25zdCBjaGlsZDIgPSBuZXcgQ29uc3RydWN0KHJvb3QsICdDaGlsZDInKTtcbiAgICBjb25zdCBjaGlsZDFfMSA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxLCAnQ2hpbGQxMScpO1xuICAgIGNvbnN0IGNoaWxkMV8yID0gbmV3IENvbnN0cnVjdChjaGlsZDEsICdDaGlsZDEyJyk7XG4gICAgY29uc3QgY2hpbGQxXzFfMSA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxXzEsICdDaGlsZDExMScpO1xuICAgIGNvbnN0IGNoaWxkMl8xID0gbmV3IENvbnN0cnVjdChjaGlsZDIsICdDaGlsZDIxJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICByb290LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQxXzEsIGNoaWxkMV8yLCBjaGlsZDFfMV8xLCBjaGlsZDJfMVxuICAgIH07XG59XG5cbmNsYXNzIE15QmVhdXRpZnVsQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgQ29uc3RydWN0V2l0aFJlcXVpcmVkUHJvcHMge1xuICAgIG9wdGlvbmFsUHJvcD86IHN0cmluZztcbiAgICByZXF1aXJlZFByb3A6IG51bWJlcjtcbiAgICBhbm90aGVyUmVxdWlyZWRQcm9wOiBib29sZWFuO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RXaXRoUmVxdWlyZWQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZFByb3A6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgYW5vdGhlclJlcXVpcmVkUHJvcDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBDb25zdHJ1Y3RXaXRoUmVxdWlyZWRQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMucmVxdWlyZWRQcm9wID0gdGhpcy5yZXF1aXJlZChwcm9wcywgJ3JlcXVpcmVkUHJvcCcpO1xuICAgICAgICB0aGlzLmFub3RoZXJSZXF1aXJlZFByb3AgPSB0aGlzLnJlcXVpcmVkKHByb3BzLCAnYW5vdGhlclJlcXVpcmVkUHJvcCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhhdCAqbXVzdCogYmUgbmFtZWQgXCJTcGFydGFjdXNcIlxuICovXG5jbGFzcyBJQW1TcGFydGFjdXNDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIHByb3RlY3RlZCBfdmFsaWRhdGVJZChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgIT09IFwiU3BhcnRhY3VzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnN0cnVjdCBuYW1lIG11c3QgYmUgJ1NwYXJ0YWN1cydcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUNBQTBDO0FBRTFDLG1DQUE0QztBQWdZNUMsU0FBUyxVQUFVLENBQUMsT0FBYTtJQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLFVBQUksRUFBRSxDQUFDO0lBQ3hCLElBQUksT0FBTyxFQUFFO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksZUFBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbEQsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVE7S0FDL0QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLG9CQUFxQixTQUFRLGVBQVM7SUFDMUMsWUFBWSxNQUFpQixFQUFFLElBQVk7UUFDekMsS0FBSyxD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LENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxN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SSxlQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFYix5RkFBeUY7UUFDekYsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLCtDQUErQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxvREFBb0QsQ0FBQyxDQUFDO1FBRXJHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVmLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBSb290IH0gZnJvbSAnLi4vLi4vbGliJztcblxuLy8gdHNsaW50OmRpc2FibGU6dmFyaWFibGUtbmFtZVxuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbmV4cG9ydCA9IHtcbiAgJ3RoZSBcIlJvb3RcIiBjb25zdHJ1Y3QgaXMgYSBzcGVjaWFsIGNvbnN0cnVjdCB3aGljaCBjYW4gYmUgdXNlZCBhcyB0aGUgcm9vdCBvZiB0aGUgdHJlZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgIHRlc3QuZXF1YWwocm9vdC5pZCwgJycsICdpZiBub3Qgc3BlY2lmaWVkLCBuYW1lIG9mIGEgcm9vdCBjb25zdHJ1Y3QgaXMgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgdGVzdC5vayghcm9vdC5wYXJlbnQsICdubyBwYXJlbnQnKTtcbiAgICB0ZXN0LmVxdWFsKHJvb3QuY2hpbGRyZW4ubGVuZ3RoLCAwLCAnYSBjb25zdHJ1Y3QgaXMgY3JlYXRlZCB3aXRob3V0IGNoaWxkcmVuJyk7IC8vIG5vIGNoaWxkcmVuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnN0cnVjdHMgY2Fubm90IGJlIGNyZWF0ZWQgd2l0aCBhbiBlbXB0eSBuYW1lIHVubGVzcyB0aGV5IGFyZSByb290Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IENvbnN0cnVjdChyb290LCAnJykpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjb25zdHJ1Y3QubmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3QnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCB0ID0gY3JlYXRlVHJlZSgpO1xuXG4gICAgdGVzdC5lcXVhbCh0LmNoaWxkMS5pZCwgJ0NoaWxkMScpO1xuICAgIHRlc3QuZXF1YWwodC5jaGlsZDIuaWQsICdDaGlsZDInKTtcbiAgICB0ZXN0LmVxdWFsKHQuY2hpbGQxXzEuaWQsICdDaGlsZDExJyk7XG4gICAgdGVzdC5lcXVhbCh0LmNoaWxkMV8yLmlkLCAnQ2hpbGQxMicpO1xuICAgIHRlc3QuZXF1YWwodC5jaGlsZDFfMV8xLmlkLCAnQ2hpbGQxMTEnKTtcbiAgICB0ZXN0LmVxdWFsKHQuY2hpbGQyXzEuaWQsICdDaGlsZDIxJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0IGlkIGNhbiB1c2UgYW55IGNoYXJhY3RlciBleGNlcHQgdGhlIHBhdGggc2VwYXJhdG9yJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAndmFsaWQnKTtcbiAgICBuZXcgQ29uc3RydWN0KHJvb3QsICdWYWxpRCcpO1xuICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ1ZhMTIzbGlkJyk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAndicpO1xuICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJyAgaW52YWxpZCcgKTtcbiAgICBuZXcgQ29uc3RydWN0KHJvb3QsICdpbnZhbGlkICAgJyApO1xuICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJzEyM2ludmFsaWQnICk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnaW4gdmFsaWQnICk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnaW5fVmFsaWQnICk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnaW4tVmFsaWQnICk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnaW5cXFxcVmFsaWQnICk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnaW4uVmFsaWQnICk7XG5cbiAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgQ29uc3RydWN0KHJvb3QsICdpbi9WYWxpZCcgKSwgRXJyb3IsICdiYWNrc2xhc2hlcyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0LnVuaXF1ZUlkIHJldHVybnMgYSB0cmVlLXVuaXF1ZSBhbHBoYW51bWVyaWMgaWQgb2YgdGhpcyBjb25zdHJ1Y3QnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcblxuICAgIGNvbnN0IGNoaWxkMSA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ1RoaXMgaXMgdGhlIGZpcnN0IGNoaWxkJyk7XG4gICAgY29uc3QgY2hpbGQyID0gbmV3IENvbnN0cnVjdChjaGlsZDEsICdTZWNvbmQgbGV2ZWwnKTtcbiAgICBjb25zdCBjMSA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQyLCAnTXkgY29uc3RydWN0Jyk7XG4gICAgY29uc3QgYzIgPSBuZXcgQ29uc3RydWN0KGNoaWxkMSwgJ015IGNvbnN0cnVjdCcpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoYzEucGF0aCwgJ1RoaXMgaXMgdGhlIGZpcnN0IGNoaWxkL1NlY29uZCBsZXZlbC9NeSBjb25zdHJ1Y3QnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChjMi5wYXRoLCAnVGhpcyBpcyB0aGUgZmlyc3QgY2hpbGQvTXkgY29uc3RydWN0Jyk7XG4gICAgdGVzdC5kZWVwRXF1YWwoYzEudW5pcXVlSWQsICdUaGlzaXN0aGVmaXJzdGNoaWxkU2Vjb25kbGV2ZWxNeWNvbnN0cnVjdDIwMjEzMUUwJyk7XG4gICAgdGVzdC5kZWVwRXF1YWwoYzIudW5pcXVlSWQsICdUaGlzaXN0aGVmaXJzdGNoaWxkTXljb25zdHJ1Y3Q4QzI4OERGOScpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjYW5ub3QgY2FsY3VsYXRlIHVuaXF1ZUlkIGlmIHRoZSBjb25zdHJ1Y3QgcGF0aCBpcyBbXCJEZWZhdWx0XCJdJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IENvbnN0cnVjdChyb290LCAnRGVmYXVsdCcpLCAvVW5hYmxlIHRvIGNhbGN1bGF0ZSBhIHVuaXF1ZSBpZCBmb3IgYW4gZW1wdHkgc2V0IG9mIGNvbXBvbmVudHMvKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0LmdldENoaWxkcmVuKCkgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY2hpbGRyZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ0NoaWxkMScpO1xuICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ0NoaWxkMicpO1xuICAgIHRlc3QuZXF1YWwoY2hpbGQuY2hpbGRyZW4ubGVuZ3RoLCAwLCAnbm8gY2hpbGRyZW4nKTtcbiAgICB0ZXN0LmVxdWFsKHJvb3QuY2hpbGRyZW4ubGVuZ3RoLCAyLCAndHdvIGNoaWxkcmVuIGFyZSBleHBlY3RlZCcpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjb25zdHJ1Y3QuZmluZENoaWxkKG5hbWUpIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIGEgY2hpbGQgZnJvbSBhIHBhcmVudCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgIGNvbnN0IGNoaWxkID0gbmV3IENvbnN0cnVjdChyb290LCAnQ29udHJ1Y3QnKTtcbiAgICB0ZXN0LnN0cmljdEVxdWFsKHJvb3QudHJ5RmluZENoaWxkKGNoaWxkLmlkKSwgY2hpbGQsICdmaW5kQ2hpbGQobmFtZSkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNoaWxkIGZyb20gYSBwYXJlbnQnKTtcbiAgICB0ZXN0Lm9rKCFyb290LnRyeUZpbmRDaGlsZCgnTm90Rm91bmQnKSwgJ2ZpbmRDaGlsZChuYW1lKSByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgY2hpbGQgaXMgbm90IGZvdW5kJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnN0cnVjdC5nZXRDaGlsZChuYW1lKSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBhIGNoaWxkIGZyb20gYSBwYXJlbnQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ0NvbnRydWN0Jyk7XG4gICAgdGVzdC5zdHJpY3RFcXVhbChyb290LmZpbmRDaGlsZChjaGlsZC5pZCksIGNoaWxkLCAnZ2V0Q2hpbGQobmFtZSkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNoaWxkIGZyb20gYSBwYXJlbnQnKTtcbiAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICByb290LmZpbmRDaGlsZCgnTm90Rm91bmQnKTtcbiAgICB9LCAnJywgJ2dldENoaWxkKG5hbWUpIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjaGlsZCBpcyBub3QgZm91bmQnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0LnRvU3RyaW5nKCkgYW5kIGNvbnN0cnVjdC50b1RyZWVTdHJpbmcoKSBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpY3MnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCB0ID0gY3JlYXRlVHJlZSgpO1xuXG4gICAgdGVzdC5lcXVhbCh0LnJvb3QudG9TdHJpbmcoKSwgJ1Jvb3QnKTtcbiAgICB0ZXN0LmVxdWFsKHQuY2hpbGQxXzFfMS50b1N0cmluZygpLCAnQ29uc3RydWN0IFtDaGlsZDEvQ2hpbGQxMS9DaGlsZDExMV0nKTtcbiAgICB0ZXN0LmVxdWFsKHQuY2hpbGQyLnRvU3RyaW5nKCksICdDb25zdHJ1Y3QgW0NoaWxkMl0nKTtcbiAgICB0ZXN0LmVxdWFsKHQucm9vdC50b1RyZWVTdHJpbmcoKSwgJ1Jvb3RcXG4gIENvbnN0cnVjdCBbQ2hpbGQxXVxcbiAgICBDb25zdHJ1Y3QgW0NoaWxkMTFdXFxuICAgICAgQ29uc3RydWN0IFtDaGlsZDExMV1cXG4gICAgQ29uc3RydWN0IFtDaGlsZDEyXVxcbiAgQ29uc3RydWN0IFtDaGlsZDJdXFxuICAgIENvbnN0cnVjdCBbQ2hpbGQyMV1cXG4nKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0LmdldENvbnRleHQoa2V5KSBjYW4gYmUgdXNlZCB0byByZWFkIGEgdmFsdWUgZnJvbSBjb250ZXh0IGRlZmluZWQgYXQgdGhlIHJvb3QgbGV2ZWwnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgY3R4MTogMTIsXG4gICAgICBjdHgyOiAnaGVsbG8nXG4gICAgfTtcblxuICAgIGNvbnN0IHQgPSBjcmVhdGVUcmVlKGNvbnRleHQpO1xuICAgIHRlc3QuZXF1YWwodC5yb290LmdldENvbnRleHQoJ2N0eDEnKSwgMTIpO1xuICAgIHRlc3QuZXF1YWwodC5jaGlsZDFfMV8xLmdldENvbnRleHQoJ2N0eDInKSwgJ2hlbGxvJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnN0cnVjdC5zZXRDb250ZXh0KGssdikgc2V0cyBjb250ZXh0IGF0IHNvbWUgbGV2ZWwgYW5kIGNvbnN0cnVjdC5nZXRDb250ZXh0KGtleSkgd2lsbCByZXR1cm4gdGhlIGxvd2VybW9zdCB2YWx1ZSBkZWZpbmVkIGluIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgIHJvb3Quc2V0Q29udGV4dCgnYzEnLCAncm9vdCcpO1xuICAgIHJvb3Quc2V0Q29udGV4dCgnYzInLCAncm9vdCcpO1xuXG4gICAgY29uc3QgY2hpbGQxID0gbmV3IENvbnN0cnVjdChyb290LCAnY2hpbGQxJyk7XG4gICAgY2hpbGQxLnNldENvbnRleHQoJ2MyJywgJ2NoaWxkMScpO1xuICAgIGNoaWxkMS5zZXRDb250ZXh0KCdjMycsICdjaGlsZDEnKTtcblxuICAgIGNvbnN0IGNoaWxkMiA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ2NoaWxkMicpO1xuICAgIGNvbnN0IGNoaWxkMyA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxLCAnY2hpbGQxY2hpbGQxJyk7XG4gICAgY2hpbGQzLnNldENvbnRleHQoJ2MxJywgJ2NoaWxkMycpO1xuICAgIGNoaWxkMy5zZXRDb250ZXh0KCdjNCcsICdjaGlsZDMnKTtcblxuICAgIHRlc3QuZXF1YWwocm9vdC5nZXRDb250ZXh0KCdjMScpLCAncm9vdCcpO1xuICAgIHRlc3QuZXF1YWwocm9vdC5nZXRDb250ZXh0KCdjMicpLCAncm9vdCcpO1xuICAgIHRlc3QuZXF1YWwocm9vdC5nZXRDb250ZXh0KCdjMycpLCB1bmRlZmluZWQpO1xuXG4gICAgdGVzdC5lcXVhbChjaGlsZDEuZ2V0Q29udGV4dCgnYzEnKSwgJ3Jvb3QnKTtcbiAgICB0ZXN0LmVxdWFsKGNoaWxkMS5nZXRDb250ZXh0KCdjMicpLCAnY2hpbGQxJyk7XG4gICAgdGVzdC5lcXVhbChjaGlsZDEuZ2V0Q29udGV4dCgnYzMnKSwgJ2NoaWxkMScpO1xuXG4gICAgdGVzdC5lcXVhbChjaGlsZDIuZ2V0Q29udGV4dCgnYzEnKSwgJ3Jvb3QnKTtcbiAgICB0ZXN0LmVxdWFsKGNoaWxkMi5nZXRDb250ZXh0KCdjMicpLCAncm9vdCcpO1xuICAgIHRlc3QuZXF1YWwoY2hpbGQyLmdldENvbnRleHQoJ2MzJyksIHVuZGVmaW5lZCk7XG5cbiAgICB0ZXN0LmVxdWFsKGNoaWxkMy5nZXRDb250ZXh0KCdjMScpLCAnY2hpbGQzJyk7XG4gICAgdGVzdC5lcXVhbChjaGlsZDMuZ2V0Q29udGV4dCgnYzInKSwgJ2NoaWxkMScpO1xuICAgIHRlc3QuZXF1YWwoY2hpbGQzLmdldENvbnRleHQoJ2MzJyksICdjaGlsZDEnKTtcbiAgICB0ZXN0LmVxdWFsKGNoaWxkMy5nZXRDb250ZXh0KCdjNCcpLCAnY2hpbGQzJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0LnNldENvbnRleHQoa2V5LCB2YWx1ZSkgY2FuIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBhZGRpbmcgYW55IGNoaWxkcmVuJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgbmV3IENvbnN0cnVjdChyb290LCAnY2hpbGQxJyk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gcm9vdC5zZXRDb250ZXh0KCdrJywgJ3YnKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnN0cnVjdC5wYXRoUGFydHMgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIG9mIGFsbCBuYW1lcyBmcm9tIHJvb3QgdG8gbm9kZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHRyZWUgPSBjcmVhdGVUcmVlKCk7XG4gICAgdGVzdC5kZWVwRXF1YWwodHJlZS5yb290LnBhdGgsICcnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbCh0cmVlLmNoaWxkMV8xXzEucGF0aCwgJ0NoaWxkMS9DaGlsZDExL0NoaWxkMTExJyk7XG4gICAgdGVzdC5kZWVwRXF1YWwodHJlZS5jaGlsZDIucGF0aCwgJ0NoaWxkMicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpZiBhIHJvb3QgY29uc3RydWN0IGhhcyBhIG5hbWUsIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcGF0aCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHRyZWUgPSBjcmVhdGVUcmVlKHt9KTtcbiAgICB0ZXN0LmRlZXBFcXVhbCh0cmVlLnJvb3QucGF0aCwgJycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHRyZWUuY2hpbGQxXzFfMS5wYXRoLCAnQ2hpbGQxL0NoaWxkMTEvQ2hpbGQxMTEnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29uc3RydWN0IGNhbiBub3QgYmUgY3JlYXRlZCB3aXRoIHRoZSBuYW1lIG9mIGEgc2libGluZycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ1NhbWVOYW1lJyk7XG5cbiAgICAvLyBUSEVOOiBUaGV5IGhhdmUgZGlmZmVyZW50IHBhdGhzXG4gICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgbmV3IENvbnN0cnVjdChyb290LCAnU2FtZU5hbWUnKTtcbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhZGRNZXRhZGF0YSh0eXBlLCBkYXRhKSBjYW4gYmUgdXNlZCB0byBhdHRhY2ggbWV0YWRhdGEgdG8gY29uc3RydWN0cyBGSU5EX01FJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgY29uc3QgY29uID0gbmV3IENvbnN0cnVjdChyb290LCAnTXlDb25zdHJ1Y3QnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGEsIFtdLCAnc3RhcnRzIGVtcHR5Jyk7XG5cbiAgICBjb24uYWRkTWV0YWRhdGEoJ2tleScsICd2YWx1ZScpO1xuICAgIGNvbi5hZGRNZXRhZGF0YSgnbnVtYmVyJywgMTAzKTtcbiAgICBjb24uYWRkTWV0YWRhdGEoJ2FycmF5JywgWyAxMjMsIDQ1NiBdKTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS50eXBlLCAna2V5Jyk7XG4gICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLmRhdGEsICd2YWx1ZScpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVsxXS5kYXRhLCAxMDMpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVsyXS5kYXRhLCBbIDEyMywgNDU2IF0pO1xuICAgIHRlc3Qub2soY29uLm1ldGFkYXRhWzBdLnRyYWNlWzBdLmluZGV4T2YoJ0ZJTkRfTUUnKSAhPT0gLTEsICdGaXJzdCBzdGFjayBsaW5lIHNob3VsZCBpbmNsdWRlIHRoaXMgZnVuY3Rpb25cXHMgbmFtZScpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhZGRNZXRhZGF0YSh0eXBlLCB1bmRlZmluZWQvbnVsbCkgaXMgaWdub3JlZCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgIGNvbnN0IGNvbiA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ0ZvbycpO1xuICAgIGNvbi5hZGRNZXRhZGF0YSgnTnVsbCcsIG51bGwpO1xuICAgIGNvbi5hZGRNZXRhZGF0YSgnVW5kZWZpbmVkJywgdW5kZWZpbmVkKTtcbiAgICBjb24uYWRkTWV0YWRhdGEoJ1RydWUnLCB0cnVlKTtcbiAgICBjb24uYWRkTWV0YWRhdGEoJ0ZhbHNlJywgZmFsc2UpO1xuICAgIGNvbi5hZGRNZXRhZGF0YSgnRW1wdHknLCAnJyk7XG5cbiAgICBjb25zdCBleGlzdHMgPSAoa2V5OiBzdHJpbmcpID0+IGNvbi5tZXRhZGF0YS5maW5kKHggPT4geC50eXBlID09PSBrZXkpO1xuXG4gICAgdGVzdC5vayghZXhpc3RzKCdOdWxsJykpO1xuICAgIHRlc3Qub2soIWV4aXN0cygnVW5kZWZpbmVkJykpO1xuICAgIHRlc3Qub2soZXhpc3RzKCdUcnVlJykpO1xuICAgIHRlc3Qub2soZXhpc3RzKCdGYWxzZScpKTtcbiAgICB0ZXN0Lm9rKGV4aXN0cygnRW1wdHknKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FkZFdhcm5pbmcobWVzc2FnZSkgY2FuIGJlIHVzZWQgdG8gYWRkIGEgXCJXQVJOSU5HXCIgbWVzc2FnZSBlbnRyeSB0byB0aGUgY29uc3RydWN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgY29uc3QgY29uID0gbmV3IENvbnN0cnVjdChyb290LCAnTXlDb25zdHJ1Y3QnKTtcbiAgICBjb24uYWRkV2FybmluZygnVGhpcyBjb25zdHJ1Y3QgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSBvdGhlciBvbmUgaW5zdGVhZCcpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS50eXBlLCBjeGFwaS5XQVJOSU5HX01FVEFEQVRBX0tFWSk7XG4gICAgdGVzdC5kZWVwRXF1YWwoY29uLm1ldGFkYXRhWzBdLmRhdGEsICdUaGlzIGNvbnN0cnVjdCBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIG90aGVyIG9uZSBpbnN0ZWFkJyk7XG4gICAgdGVzdC5vayhjb24ubWV0YWRhdGFbMF0udHJhY2UubGVuZ3RoID4gMCk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FkZEVycm9yKG1lc3NhZ2UpIGNhbiBiZSB1c2VkIHRvIGFkZCBhIFwiRVJST1JcIiBtZXNzYWdlIGVudHJ5IHRvIHRoZSBjb25zdHJ1Y3QnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICBjb25zdCBjb24gPSBuZXcgQ29uc3RydWN0KHJvb3QsICdNeUNvbnN0cnVjdCcpO1xuICAgIGNvbi5hZGRFcnJvcignU3RvcCEnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGFbMF0udHlwZSwgY3hhcGkuRVJST1JfTUVUQURBVEFfS0VZKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGFbMF0uZGF0YSwgJ1N0b3AhJyk7XG4gICAgdGVzdC5vayhjb24ubWV0YWRhdGFbMF0udHJhY2UubGVuZ3RoID4gMCk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FkZEluZm8obWVzc2FnZSkgY2FuIGJlIHVzZWQgdG8gYWRkIGFuIFwiSU5GT1wiIG1lc3NhZ2UgZW50cnkgdG8gdGhlIGNvbnN0cnVjdCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgIGNvbnN0IGNvbiA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ015Q29uc3RydWN0Jyk7XG4gICAgY29uLmFkZEluZm8oJ0hleSB0aGVyZSwgaG93IGRvIHlvdSBkbz8nKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChjb24ubWV0YWRhdGFbMF0udHlwZSwgY3hhcGkuSU5GT19NRVRBREFUQV9LRVkpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNvbi5tZXRhZGF0YVswXS5kYXRhLCAnSGV5IHRoZXJlLCBob3cgZG8geW91IGRvPycpO1xuICAgIHRlc3Qub2soY29uLm1ldGFkYXRhWzBdLnRyYWNlLmxlbmd0aCA+IDApO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdtdWx0aXBsZSBjaGlsZHJlbiBvZiB0aGUgc2FtZSB0eXBlLCB3aXRoIGV4cGxpY2l0IG5hbWVzIGFyZSB3ZWxjb21lJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgbmV3IE15QmVhdXRpZnVsQ29uc3RydWN0KHJvb3QsICdtYmMxJyk7XG4gICAgbmV3IE15QmVhdXRpZnVsQ29uc3RydWN0KHJvb3QsICdtYmMyJyk7XG4gICAgbmV3IE15QmVhdXRpZnVsQ29uc3RydWN0KHJvb3QsICdtYmMzJyk7XG4gICAgbmV3IE15QmVhdXRpZnVsQ29uc3RydWN0KHJvb3QsICdtYmM0Jyk7XG4gICAgdGVzdC5lcXVhbChyb290LmNoaWxkcmVuLmxlbmd0aCwgNCk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnN0cnVjdC5yZXF1aXJlZChwcm9wcywgbmFtZSkgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhhdCByZXF1aXJlZCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG5cbiAgICAvLyBzaG91bGQgYmUgb2tcbiAgICBjb25zdCBjID0gbmV3IENvbnN0cnVjdFdpdGhSZXF1aXJlZChyb290LCAnQ29uc3RydWN0JywgeyByZXF1aXJlZFByb3A6IDEyMywgYW5vdGhlclJlcXVpcmVkUHJvcDogdHJ1ZSB9KTtcbiAgICB0ZXN0LmVxdWFsKGMucmVxdWlyZWRQcm9wLCAxMjMpO1xuICAgIHRlc3QuZXF1YWwoYy5hbm90aGVyUmVxdWlyZWRQcm9wLCB0cnVlKTtcblxuICAgIC8vIHNob3VsZCB0aHJvd1xuICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBDb25zdHJ1Y3RXaXRoUmVxdWlyZWQocm9vdCwgJ0MnLCB7IG9wdGlvbmFsUHJvcDogJ2hlbGxvJyB9IGFzIGFueSkpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdDb25zdHJ1Y3QgbmFtZSB2YWxpZGF0aW9uIGNhbiBiZSBvdmVycmlkZGVuJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG5cbiAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgSUFtU3BhcnRhY3VzQ29uc3RydWN0KHJvb3QsIFwiQ2Flc2FyXCIpKTtcbiAgICBuZXcgSUFtU3BhcnRhY3VzQ29uc3RydWN0KHJvb3QsIFwiU3BhcnRhY3VzXCIpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAnY29uc3RydWN0LnZhbGlkYXRlKCkgY2FuIGJlIGltcGxlbWVudGVkIHRvIHBlcmZvcm0gdmFsaWRhdGlvbiwgY29uc3RydWN0LnZhbGlkYXRlVHJlZSgpIHdpbGwgcmV0dXJuIGFsbCBlcnJvcnMgZnJvbSB0aGUgc3VidHJlZSAoREZTKScodGVzdDogVGVzdCkge1xuXG4gICAgY2xhc3MgTXlDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgICAgICByZXR1cm4gWyAnbXktZXJyb3IxJywgJ215LWVycm9yMicgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBZb3VyQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIFsgJ3lvdXItZXJyb3IxJyBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRoZWlyQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICBuZXcgWW91ckNvbnN0cnVjdCh0aGlzLCAnWW91ckNvbnN0cnVjdCcpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBbICd0aGVpci1lcnJvcicgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTdGFjayBleHRlbmRzIFJvb3Qge1xuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgbmV3IE15Q29uc3RydWN0KHRoaXMsICdNeUNvbnN0cnVjdCcpO1xuICAgICAgICBuZXcgVGhlaXJDb25zdHJ1Y3QodGhpcywgJ1RoZWlyQ29uc3RydWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICBbICdzdGFjay1lcnJvcicgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgZXJyb3JzID0gKHN0YWNrLnZhbGlkYXRlVHJlZSgpKS5tYXAodiA9PiAoeyBwYXRoOiB2LnNvdXJjZS5wYXRoLCBtZXNzYWdlOiB2Lm1lc3NhZ2UgfSkpO1xuXG4gICAgLy8gdmFsaWRhdGUgREZTXG4gICAgdGVzdC5kZWVwRXF1YWwoZXJyb3JzLCBbXG4gICAgICB7IHBhdGg6ICdNeUNvbnN0cnVjdCcsIG1lc3NhZ2U6ICdteS1lcnJvcjEnIH0sXG4gICAgICB7IHBhdGg6ICdNeUNvbnN0cnVjdCcsIG1lc3NhZ2U6ICdteS1lcnJvcjInIH0sXG4gICAgICB7IHBhdGg6ICdUaGVpckNvbnN0cnVjdC9Zb3VyQ29uc3RydWN0JywgbWVzc2FnZTogJ3lvdXItZXJyb3IxJyB9LFxuICAgICAgeyBwYXRoOiAnVGhlaXJDb25zdHJ1Y3QnLCBtZXNzYWdlOiAndGhlaXItZXJyb3InIH0sXG4gICAgICB7IHBhdGg6ICcnLCBtZXNzYWdlOiAnc3RhY2stZXJyb3InIH1cbiAgICBdKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjb25zdHJ1Y3QubG9jaygpIHByb3RlY3RzIGFnYWluc3QgYWRkaW5nIGNoaWxkcmVuIGFueXdoZXJlIHVuZGVyIHRoaXMgY29uc3RydWN0IChkaXJlY3Qgb3IgaW5kaXJlY3QpJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICBjbGFzcyBMb2NrYWJsZUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgICBwdWJsaWMgbG9ja01lKCkge1xuICAgICAgICB0aGlzLmxvY2soKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIHVubG9ja01lKCkge1xuICAgICAgICB0aGlzLnVubG9jaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFJvb3QoKTtcblxuICAgIGNvbnN0IGMwYSA9IG5ldyBMb2NrYWJsZUNvbnN0cnVjdChzdGFjaywgJ2MwYScpO1xuICAgIGNvbnN0IGMwYiA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdjMGInKTtcblxuICAgIGNvbnN0IGMxYSA9IG5ldyBDb25zdHJ1Y3QoYzBhLCAnYzFhJyk7XG4gICAgY29uc3QgYzFiID0gbmV3IENvbnN0cnVjdChjMGEsICdjMWInKTtcblxuICAgIGMwYS5sb2NrTWUoKTtcblxuICAgIC8vIG5vdyB3ZSBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBhZGQgY2hpbGRyZW4gdG8gYzBiLCBidXQgbm90IHRvIGMwYSBvciBhbnkgaXRzIGNoaWxkcmVuXG4gICAgbmV3IENvbnN0cnVjdChjMGIsICdjMWEnKTtcbiAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgQ29uc3RydWN0KGMwYSwgJ2ZhaWwxJyksIC9DYW5ub3QgYWRkIGNoaWxkcmVuIHRvIFwiYzBhXCIgZHVyaW5nIHN5bnRoZXNpcy8pO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBDb25zdHJ1Y3QoYzFhLCAnZmFpbDInKSwgL0Nhbm5vdCBhZGQgY2hpbGRyZW4gdG8gXCJjMGFcXC9jMWFcIiBkdXJpbmcgc3ludGhlc2lzLyk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IENvbnN0cnVjdChjMWIsICdmYWlsMycpLCAvQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBcImMwYVxcL2MxYlwiIGR1cmluZyBzeW50aGVzaXMvKTtcblxuICAgIGMwYS51bmxvY2tNZSgpO1xuXG4gICAgbmV3IENvbnN0cnVjdChjMGEsICdjMGFaJyk7XG4gICAgbmV3IENvbnN0cnVjdChjMWEsICdjMWFaJyk7XG4gICAgbmV3IENvbnN0cnVjdChjMWIsICdjMWJaJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVHJlZShjb250ZXh0PzogYW55KSB7XG4gIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICBpZiAoY29udGV4dCkge1xuICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goa2V5ID0+IHJvb3Quc2V0Q29udGV4dChrZXksIGNvbnRleHRba2V5XSkpO1xuICB9XG5cbiAgY29uc3QgY2hpbGQxID0gbmV3IENvbnN0cnVjdChyb290LCAnQ2hpbGQxJyk7XG4gIGNvbnN0IGNoaWxkMiA9IG5ldyBDb25zdHJ1Y3Qocm9vdCwgJ0NoaWxkMicpO1xuICBjb25zdCBjaGlsZDFfMSA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxLCAnQ2hpbGQxMScpO1xuICBjb25zdCBjaGlsZDFfMiA9IG5ldyBDb25zdHJ1Y3QoY2hpbGQxLCAnQ2hpbGQxMicpO1xuICBjb25zdCBjaGlsZDFfMV8xID0gbmV3IENvbnN0cnVjdChjaGlsZDFfMSwgJ0NoaWxkMTExJyk7XG4gIGNvbnN0IGNoaWxkMl8xID0gbmV3IENvbnN0cnVjdChjaGlsZDIsICdDaGlsZDIxJyk7XG5cbiAgcmV0dXJuIHtcbiAgICByb290LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQxXzEsIGNoaWxkMV8yLCBjaGlsZDFfMV8xLCBjaGlsZDJfMVxuICB9O1xufVxuXG5jbGFzcyBNeUJlYXV0aWZ1bENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICB9XG59XG5cbmludGVyZmFjZSBDb25zdHJ1Y3RXaXRoUmVxdWlyZWRQcm9wcyB7XG4gIG9wdGlvbmFsUHJvcD86IHN0cmluZztcbiAgcmVxdWlyZWRQcm9wOiBudW1iZXI7XG4gIGFub3RoZXJSZXF1aXJlZFByb3A6IGJvb2xlYW47XG59XG5cbmNsYXNzIENvbnN0cnVjdFdpdGhSZXF1aXJlZCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByZXF1aXJlZFByb3A6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFub3RoZXJSZXF1aXJlZFByb3A6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IENvbnN0cnVjdFdpdGhSZXF1aXJlZFByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMucmVxdWlyZWRQcm9wID0gdGhpcy5yZXF1aXJlZChwcm9wcywgJ3JlcXVpcmVkUHJvcCcpO1xuICAgIHRoaXMuYW5vdGhlclJlcXVpcmVkUHJvcCA9IHRoaXMucmVxdWlyZWQocHJvcHMsICdhbm90aGVyUmVxdWlyZWRQcm9wJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhhdCAqbXVzdCogYmUgbmFtZWQgXCJTcGFydGFjdXNcIlxuICovXG5jbGFzcyBJQW1TcGFydGFjdXNDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcm90ZWN0ZWQgX3ZhbGlkYXRlSWQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgIT09IFwiU3BhcnRhY3VzXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnN0cnVjdCBuYW1lIG11c3QgYmUgJ1NwYXJ0YWN1cydcIik7XG4gICAgfVxuICB9XG59XG4iXX0=

@@ -166,2 +166,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50YWctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudGFnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLHdEQUEyRDtBQUMzRCw0REFBbUU7QUFFbkUsTUFBTSxXQUFZLFNBQVEscUJBQVM7SUFFL0IsWUFBWSxNQUFpQixFQUFFLElBQVk7UUFDdkMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksd0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFDRCxNQUFNLEtBQU0sU0FBUSxxQkFBUztJQUN6QixZQUFZLE1BQWlCLEVBQUUsSUFBWTtRQUN2QyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDSjtBQUVELGlCQUFTO0lBRUwsNENBQTRDLEVBQUU7UUFDMUMsMENBQTBDLENBQUMsSUFBVTtZQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxzQkFBc0I7WUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLE1BQU0sR0FBRyxHQUFHLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFD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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIFJvb3QgfSBmcm9tICcuLi8uLi9saWIvY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgSVRhZ2dhYmxlLCBUYWdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbGliL2NvcmUvdGFnLW1hbmFnZXInO1xuXG5jbGFzcyBDaGlsZFRhZ2dlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElUYWdnYWJsZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IFRhZ01hbmFnZXI7XG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICB0aGlzLnRhZ3MgPSBuZXcgVGFnTWFuYWdlcihwYXJlbnQpO1xuICAgIH1cbn1cbmNsYXNzIENoaWxkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG4gICAgfVxufVxuXG5leHBvcnQgPSB7XG5cbiAgICAnVGFnTWFuZ2VyIGhhbmRsZXMgdGFncyBmb3IgYSBDb250cnVjdCBUcmVlJzoge1xuICAgICAgICAnc2V0VGFnIGJ5IGRlZmF1bHQgcHJvcGFnYXRlcyB0byBjaGlsZHJlbicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIxID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICd0d28nKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICd0aHJlZScpO1xuXG4gICAgICAgICAgICAvLyBub3QgdGFnZ2FibGUgYXQgYWxsXG4gICAgICAgICAgICBuZXcgQ2hpbGQoY3RhZ2dlciwgJ25vdGFnJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHtrZXk6ICdOYW1lJywgdmFsdWU6ICdUaGVDYWtlSXNBTGllJ307XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKHRhZy5rZXksIHRhZy52YWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhZ0FycmF5ID0gW3RhZ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnN0cnVjdCBvZiBbY3RhZ2dlciwgY3RhZ2dlcjFdKSB7XG4gICAgICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uc3RydWN0LnRhZ3MucmVzb2x2ZSgpLCB0YWdBcnJheSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIyLnRhZ3MucmVzb2x2ZSgpLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3NldFRhZyB3aXRoIHByb3BhZ2F0ZSBmYWxzZSB0YWdzIGRvIG5vdCBwcm9wYWdhdGUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyMSA9IG5ldyBDaGlsZFRhZ2dlcihjdGFnZ2VyLCAndHdvJyk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyMiA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAndGhyZWUnKTtcblxuICAgICAgICAgICAgLy8gbm90IHRhZ2dhYmxlIGF0IGFsbFxuICAgICAgICAgICAgbmV3IENoaWxkKGN0YWdnZXIsICdub3RhZycpO1xuXG4gICAgICAgICAgICBjb25zdCB0YWcgPSB7a2V5OiAnTmFtZScsIHZhbHVlOiAnVGhlQ2FrZUlzQUxpZSd9O1xuICAgICAgICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUsIHtwcm9wYWdhdGU6IGZhbHNlfSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29uc3RydWN0IG9mIFtjdGFnZ2VyMSwgY3RhZ2dlcjJdKSB7XG4gICAgICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uc3RydWN0LnRhZ3MucmVzb2x2ZSgpLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpWzBdLmtleSwgJ05hbWUnKTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIudGFncy5yZXNvbHZlKClbMF0udmFsdWUsICdUaGVDYWtlSXNBTGllJyk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3NldFRhZyB3aXRoIG92ZXJ3cml0ZSBmYWxzZSBkb2VzIG5vdCBvdmVyd3JpdGUgYSB0YWcnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKCdFbnYnLCAnRGV2Jyk7XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKCdFbnYnLCAnUHJvZCcsIHtvdmVyd3JpdGU6IGZhbHNlfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzdWx0LCBbe2tleTogJ0VudicsIHZhbHVlOiAnRGV2J31dKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICAnc2V0VGFnIHdpdGggc3RpY2t5IGZhbHNlIGVuYWJsZXMgcHJvcGFnYXRpb25zIHRvIG92ZXJ3cml0ZSBjaGlsZCB0YWdzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ29uZScpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlcjEgPSBuZXcgQ2hpbGRUYWdnZXIoY3RhZ2dlciwgJ3R3bycpO1xuICAgICAgICAgICAgY3RhZ2dlci50YWdzLnNldFRhZygnUGFyZW50JywgJ0lzIGFsd2F5cyByaWdodCcpO1xuICAgICAgICAgICAgY3RhZ2dlcjEudGFncy5zZXRUYWcoJ1BhcmVudCcsICdJcyB3cm9uZycsIHtzdGlja3k6IGZhbHNlfSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdGFnZ2VyMS50YWdzLnJlc29sdmUoKTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHBhcmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgJ3RhZ3MgcHJvcGFnYXRlIGZyb20gYWxsIHBhcmVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICAgICAgICBuZXcgQ2hpbGRUYWdnZXIoY3RhZ2dlciwgJ3R3bycpO1xuICAgICAgICAgICAgY29uc3QgY05vVGFnID0gbmV3IENoaWxkKGN0YWdnZXIsICd0aHJlZScpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlcjIgPSBuZXcgQ2hpbGRUYWdnZXIoY05vVGFnLCAnZm91cicpO1xuICAgICAgICAgICAgY29uc3QgdGFnID0ge2tleTogJ05hbWUnLCB2YWx1ZTogJ1RoZUNha2VJc0FMaWUnfTtcbiAgICAgICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlLCB7cHJvcGFnYXRlOiB0cnVlfSk7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChjdGFnZ2VyMi50YWdzLnJlc29sdmUoKSwgW3RhZ10pO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgICdhIHRhZyBjYW4gYmUgcmVtb3ZlZCBhbmQgYWRkZWQgYmFjaycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHtrZXk6ICdOYW1lJywgdmFsdWU6ICdUaGVDYWtlSXNBTGllJ307XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKHRhZy5rZXksIHRhZy52YWx1ZSwge3Byb3BhZ2F0ZTogdHJ1ZX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY3RhZ2dlci50YWdzLnJlc29sdmUoKSwgW3RhZ10pO1xuICAgICAgICAgICAgY3RhZ2dlci50YWdzLnJlbW92ZVRhZyh0YWcua2V5KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIudGFncy5yZXNvbHZlKCksIFtdKTtcbiAgICAgICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlLCB7cHJvcGFnYXRlOiB0cnVlfSk7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpLCBbdGFnXSk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlbW92ZVRhZyByZW1vdmVzIGEgdGFnIGJ5IGtleScodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIxID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICd0d28nKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICd0aHJlZScpO1xuXG4gICAgICAgICAgICAvLyBub3QgdGFnZ2FibGUgYXQgYWxsXG4gICAgICAgICAgICBuZXcgQ2hpbGQoY3RhZ2dlciwgJ25vdGFnJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHtrZXk6ICdOYW1lJywgdmFsdWU6ICdUaGVDYWtlSXNBTGllJ307XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKHRhZy5rZXksIHRhZy52YWx1ZSk7XG4gICAgICAgICAgICBjdGFnZ2VyLnRhZ3MucmVtb3ZlVGFnKCdOYW1lJyk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29uc3RydWN0IG9mIFtjdGFnZ2VyLCBjdGFnZ2VyMSwgY3RhZ2dlcjJdKSB7XG4gICAgICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uc3RydWN0LnRhZ3MucmVzb2x2ZSgpLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlbW92ZVRhZyB3aXRoIGJsb2NrUHJvcGFnYXRlIHJlbW92ZXMgYW55IHByb3BhZ2F0ZWQgdGFncycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdnZXIxID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICd0d28nKTtcbiAgICAgICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcoJ0VudicsICdEZXYnKTtcbiAgICAgICAgICAgIGN0YWdnZXIxLnRhZ3MucmVtb3ZlVGFnKCdFbnYnLCB7YmxvY2tQcm9wYWdhdGU6IHRydWV9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGN0YWdnZXIudGFncy5yZXNvbHZlKCk7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXN1bHQsIFt7a2V5OiAnRW52JywgdmFsdWU6ICdEZXYnfV0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY3RhZ2dlcjEudGFncy5yZXNvbHZlKCksIFtdKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICAnY2hpbGRyZW4gY2FuIG92ZXJyaWRlIHBhcmVudCBwcm9wYWdhdGVkIHRhZ3MnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICAgICAgICBjb25zdCBjdGFnQ2hpbGQgPSBuZXcgQ2hpbGRUYWdnZXIoY3RhZ2dlciwgJ29uZScpO1xuICAgICAgICAgICAgY29uc3QgdGFnID0ge2tleTogJ0Jlc3RCZWFjaCcsIHZhbHVlOiAnU3RvbmVTdGVwcyd9O1xuICAgICAgICAgICAgY29uc3QgdGFnMiA9IHtrZXk6ICdCZXN0QmVhY2gnLCB2YWx1ZTogJ2stMzgnfTtcbiAgICAgICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnMi5rZXksIHRhZzIudmFsdWUpO1xuICAgICAgICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUpO1xuICAgICAgICAgICAgY3RhZ0NoaWxkLnRhZ3Muc2V0VGFnKHRhZzIua2V5LCB0YWcyLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhZ3MgPSBjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRUYWdzID0gY3RhZ0NoaWxkLnRhZ3MucmVzb2x2ZSgpO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocGFyZW50VGFncywgW3RhZ10pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoY2hpbGRUYWdzLCBbdGFnMl0pO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgICdyZXNvbHZlKCkgcmV0dXJucyBhbGwgdGFncycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN0YWdDaGlsZCA9IG5ldyBDaGlsZFRhZ2dlcihjdGFnZ2VyLCAnb25lJyk7XG4gICAgICAgICAgICBjb25zdCB0YWdzTm9Qcm9wID0gW1xuICAgICAgICAgICAgICAgIHtrZXk6ICdOb3J0aENvdW50eVNwb3QnLCB2YWx1ZTogJ1RhYmxldG9wcyd9LFxuICAgICAgICAgICAgICAgIHtrZXk6ICdDcm93ZGVkJywgdmFsdWU6ICdUcmVzdGxlcyd9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3NQcm9wID0gW1xuICAgICAgICAgICAgICAgIHtrZXk6ICdCZXN0QmVhY2gnLCB2YWx1ZTogJ1N0b25lU3RlcHMnfSxcbiAgICAgICAgICAgICAgICB7a2V5OiAnQmVzdFdhdmVzJywgdmFsdWU6ICdCbGFja3MnfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzTm9Qcm9wKSB7XG4gICAgICAgICAgICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUsIHtwcm9wYWdhdGU6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzUHJvcCkge1xuICAgICAgICAgICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsbFRhZ3MgPSB0YWdzTm9Qcm9wLmNvbmNhdCh0YWdzUHJvcCk7XG4gICAgICAgICAgICBjb25zdCBjQWxsID0gY3RhZ2dlci50YWdzO1xuICAgICAgICAgICAgY29uc3QgY1Byb3AgPSBjdGFnQ2hpbGQudGFncztcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgY0FsbC5yZXNvbHZlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFRhZyA9IGFsbFRhZ3MuZmlsdGVyKCAodCkgPT4gKHQua2V5ID09PSB0YWcua2V5KSk7XG4gICAgICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoZXhwZWN0ZWRUYWdbMF0udmFsdWUsIHRhZy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiBjUHJvcC5yZXNvbHZlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFRhZyA9IHRhZ3NQcm9wLmZpbHRlciggKHQpID0+ICh0LmtleSA9PT0gdGFnLmtleSkpO1xuICAgICAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGV4cGVjdGVkVGFnWzBdLnZhbHVlLCB0YWcudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50YWctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudGFnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLHdEQUEyRDtBQUMzRCw0REFBbUU7QUFFbkUsTUFBTSxXQUFZLFNBQVEscUJBQVM7SUFFakMsWUFBWSxNQUFpQixFQUFFLElBQVk7UUFDekMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksd0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLEtBQU0sU0FBUSxxQkFBUztJQUMzQixZQUFZLE1BQWlCLEVBQUUsSUFBWTtRQUN6QyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELGlCQUFTO0lBQ1AsNENBQTRDLEVBQUU7UUFDNUMsMENBQTBDLENBQUMsSUFBVTtZQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxzQkFBc0I7WUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLE1BQU0sR0FBRyxHQUFHLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDcEQ7WUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxtREFBbUQsQ0FBQyxJQUFVO1lBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRWhELHNCQUFzQjtZQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFNUIsTUFBTSxHQUFHLEdBQUcsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUU1RCxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxzREFBc0QsQ0FBQyxJQUFVO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsdUVBQXVFLENBQUMsSUFBVTtZQUNoRixNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWQsQ0FBQztRQUNELGlDQUFpQyxDQUFDLElBQVU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQkFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QscUNBQXFDLENBQUMsSUFBVTtZQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsZ0NBQWdDLENBQUMsSUFBVTtZQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxzQkFBc0I7WUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLE1BQU0sR0FBRyxHQUFHLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFL0IsS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsMkRBQTJELENBQUMsSUFBVTtZQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCw4Q0FBOEMsQ0FBQyxJQUFVO1lBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTSxHQUFHLEdBQUcsRUFBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksR0FBRyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCw0QkFBNEIsQ0FBQyxJQUFVO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEVBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUM7Z0JBQzVDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDO2FBQ3BDLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBQztnQkFDdkMsRUFBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUM7YUFDcEMsQ0FBQztZQUNGLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO2dCQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQzthQUM3RDtZQUNELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBRTdCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakQ7WUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDakMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIFJvb3QgfSBmcm9tICcuLi8uLi9saWIvY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgSVRhZ2dhYmxlLCBUYWdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbGliL2NvcmUvdGFnLW1hbmFnZXInO1xuXG5jbGFzcyBDaGlsZFRhZ2dlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElUYWdnYWJsZSB7XG4gIHB1YmxpYyByZWFkb25seSB0YWdzOiBUYWdNYW5hZ2VyO1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcbiAgICB0aGlzLnRhZ3MgPSBuZXcgVGFnTWFuYWdlcihwYXJlbnQpO1xuICB9XG59XG5cbmNsYXNzIENoaWxkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0ID0ge1xuICAnVGFnTWFuZ2VyIGhhbmRsZXMgdGFncyBmb3IgYSBDb250cnVjdCBUcmVlJzoge1xuICAgICdzZXRUYWcgYnkgZGVmYXVsdCBwcm9wYWdhdGVzIHRvIGNoaWxkcmVuJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ29uZScpO1xuICAgICAgY29uc3QgY3RhZ2dlcjEgPSBuZXcgQ2hpbGRUYWdnZXIoY3RhZ2dlciwgJ3R3bycpO1xuICAgICAgY29uc3QgY3RhZ2dlcjIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ3RocmVlJyk7XG5cbiAgICAgIC8vIG5vdCB0YWdnYWJsZSBhdCBhbGxcbiAgICAgIG5ldyBDaGlsZChjdGFnZ2VyLCAnbm90YWcnKTtcblxuICAgICAgY29uc3QgdGFnID0ge2tleTogJ05hbWUnLCB2YWx1ZTogJ1RoZUNha2VJc0FMaWUnfTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlKTtcblxuICAgICAgY29uc3QgdGFnQXJyYXkgPSBbdGFnXTtcbiAgICAgIGZvciAoY29uc3QgY29uc3RydWN0IG9mIFtjdGFnZ2VyLCBjdGFnZ2VyMV0pIHtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY29uc3RydWN0LnRhZ3MucmVzb2x2ZSgpLCB0YWdBcnJheSk7XG4gICAgICB9XG5cbiAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIyLnRhZ3MucmVzb2x2ZSgpLmxlbmd0aCwgMCk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuICAgICdzZXRUYWcgd2l0aCBwcm9wYWdhdGUgZmFsc2UgdGFncyBkbyBub3QgcHJvcGFnYXRlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ29uZScpO1xuICAgICAgY29uc3QgY3RhZ2dlcjEgPSBuZXcgQ2hpbGRUYWdnZXIoY3RhZ2dlciwgJ3R3bycpO1xuICAgICAgY29uc3QgY3RhZ2dlcjIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ3RocmVlJyk7XG5cbiAgICAgIC8vIG5vdCB0YWdnYWJsZSBhdCBhbGxcbiAgICAgIG5ldyBDaGlsZChjdGFnZ2VyLCAnbm90YWcnKTtcblxuICAgICAgY29uc3QgdGFnID0ge2tleTogJ05hbWUnLCB2YWx1ZTogJ1RoZUNha2VJc0FMaWUnfTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlLCB7cHJvcGFnYXRlOiBmYWxzZX0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbnN0cnVjdCBvZiBbY3RhZ2dlcjEsIGN0YWdnZXIyXSkge1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjb25zdHJ1Y3QudGFncy5yZXNvbHZlKCkubGVuZ3RoLCAwKTtcbiAgICAgIH1cbiAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIudGFncy5yZXNvbHZlKClbMF0ua2V5LCAnTmFtZScpO1xuICAgICAgdGVzdC5kZWVwRXF1YWwoY3RhZ2dlci50YWdzLnJlc29sdmUoKVswXS52YWx1ZSwgJ1RoZUNha2VJc0FMaWUnKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ3NldFRhZyB3aXRoIG92ZXJ3cml0ZSBmYWxzZSBkb2VzIG5vdCBvdmVyd3JpdGUgYSB0YWcnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKCdFbnYnLCAnRGV2Jyk7XG4gICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKCdFbnYnLCAnUHJvZCcsIHtvdmVyd3JpdGU6IGZhbHNlfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzdWx0LCBbe2tleTogJ0VudicsIHZhbHVlOiAnRGV2J31dKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ3NldFRhZyB3aXRoIHN0aWNreSBmYWxzZSBlbmFibGVzIHByb3BhZ2F0aW9ucyB0byBvdmVyd3JpdGUgY2hpbGQgdGFncycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIxID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICd0d28nKTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcoJ1BhcmVudCcsICdJcyBhbHdheXMgcmlnaHQnKTtcbiAgICAgIGN0YWdnZXIxLnRhZ3Muc2V0VGFnKCdQYXJlbnQnLCAnSXMgd3JvbmcnLCB7c3RpY2t5OiBmYWxzZX0pO1xuICAgICAgY29uc3QgcGFyZW50ID0gY3RhZ2dlci50YWdzLnJlc29sdmUoKTtcbiAgICAgIGNvbnN0IGNoaWxkID0gY3RhZ2dlcjEudGFncy5yZXNvbHZlKCk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChwYXJlbnQsIGNoaWxkKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuXG4gICAgfSxcbiAgICAndGFncyBwcm9wYWdhdGUgZnJvbSBhbGwgcGFyZW50cycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgIG5ldyBDaGlsZFRhZ2dlcihjdGFnZ2VyLCAndHdvJyk7XG4gICAgICBjb25zdCBjTm9UYWcgPSBuZXcgQ2hpbGQoY3RhZ2dlciwgJ3RocmVlJyk7XG4gICAgICBjb25zdCBjdGFnZ2VyMiA9IG5ldyBDaGlsZFRhZ2dlcihjTm9UYWcsICdmb3VyJyk7XG4gICAgICBjb25zdCB0YWcgPSB7a2V5OiAnTmFtZScsIHZhbHVlOiAnVGhlQ2FrZUlzQUxpZSd9O1xuICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUsIHtwcm9wYWdhdGU6IHRydWV9KTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIyLnRhZ3MucmVzb2x2ZSgpLCBbdGFnXSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuICAgICdhIHRhZyBjYW4gYmUgcmVtb3ZlZCBhbmQgYWRkZWQgYmFjaycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgIGNvbnN0IHRhZyA9IHtrZXk6ICdOYW1lJywgdmFsdWU6ICdUaGVDYWtlSXNBTGllJ307XG4gICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKHRhZy5rZXksIHRhZy52YWx1ZSwge3Byb3BhZ2F0ZTogdHJ1ZX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwoY3RhZ2dlci50YWdzLnJlc29sdmUoKSwgW3RhZ10pO1xuICAgICAgY3RhZ2dlci50YWdzLnJlbW92ZVRhZyh0YWcua2V5KTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKGN0YWdnZXIudGFncy5yZXNvbHZlKCksIFtdKTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlLCB7cHJvcGFnYXRlOiB0cnVlfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChjdGFnZ2VyLnRhZ3MucmVzb2x2ZSgpLCBbdGFnXSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuICAgICdyZW1vdmVUYWcgcmVtb3ZlcyBhIHRhZyBieSBrZXknKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgY29uc3QgY3RhZ2dlciA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAnb25lJyk7XG4gICAgICBjb25zdCBjdGFnZ2VyMSA9IG5ldyBDaGlsZFRhZ2dlcihjdGFnZ2VyLCAndHdvJyk7XG4gICAgICBjb25zdCBjdGFnZ2VyMiA9IG5ldyBDaGlsZFRhZ2dlcihyb290LCAndGhyZWUnKTtcblxuICAgICAgLy8gbm90IHRhZ2dhYmxlIGF0IGFsbFxuICAgICAgbmV3IENoaWxkKGN0YWdnZXIsICdub3RhZycpO1xuXG4gICAgICBjb25zdCB0YWcgPSB7a2V5OiAnTmFtZScsIHZhbHVlOiAnVGhlQ2FrZUlzQUxpZSd9O1xuICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUpO1xuICAgICAgY3RhZ2dlci50YWdzLnJlbW92ZVRhZygnTmFtZScpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbnN0cnVjdCBvZiBbY3RhZ2dlciwgY3RhZ2dlcjEsIGN0YWdnZXIyXSkge1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjb25zdHJ1Y3QudGFncy5yZXNvbHZlKCkubGVuZ3RoLCAwKTtcbiAgICAgIH1cbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ3JlbW92ZVRhZyB3aXRoIGJsb2NrUHJvcGFnYXRlIHJlbW92ZXMgYW55IHByb3BhZ2F0ZWQgdGFncycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICBjb25zdCBjdGFnZ2VyID0gbmV3IENoaWxkVGFnZ2VyKHJvb3QsICdvbmUnKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIxID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICd0d28nKTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcoJ0VudicsICdEZXYnKTtcbiAgICAgIGN0YWdnZXIxLnRhZ3MucmVtb3ZlVGFnKCdFbnYnLCB7YmxvY2tQcm9wYWdhdGU6IHRydWV9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGN0YWdnZXIudGFncy5yZXNvbHZlKCk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXN1bHQsIFt7a2V5OiAnRW52JywgdmFsdWU6ICdEZXYnfV0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwoY3RhZ2dlcjEudGFncy5yZXNvbHZlKCksIFtdKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ2NoaWxkcmVuIGNhbiBvdmVycmlkZSBwYXJlbnQgcHJvcGFnYXRlZCB0YWdzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ29uZScpO1xuICAgICAgY29uc3QgY3RhZ0NoaWxkID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICdvbmUnKTtcbiAgICAgIGNvbnN0IHRhZyA9IHtrZXk6ICdCZXN0QmVhY2gnLCB2YWx1ZTogJ1N0b25lU3RlcHMnfTtcbiAgICAgIGNvbnN0IHRhZzIgPSB7a2V5OiAnQmVzdEJlYWNoJywgdmFsdWU6ICdrLTM4J307XG4gICAgICBjdGFnZ2VyLnRhZ3Muc2V0VGFnKHRhZzIua2V5LCB0YWcyLnZhbHVlKTtcbiAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlKTtcbiAgICAgIGN0YWdDaGlsZC50YWdzLnNldFRhZyh0YWcyLmtleSwgdGFnMi52YWx1ZSk7XG4gICAgICBjb25zdCBwYXJlbnRUYWdzID0gY3RhZ2dlci50YWdzLnJlc29sdmUoKTtcbiAgICAgIGNvbnN0IGNoaWxkVGFncyA9IGN0YWdDaGlsZC50YWdzLnJlc29sdmUoKTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKHBhcmVudFRhZ3MsIFt0YWddKTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKGNoaWxkVGFncywgW3RhZzJdKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ3Jlc29sdmUoKSByZXR1cm5zIGFsbCB0YWdzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCByb290ID0gbmV3IFJvb3QoKTtcbiAgICAgIGNvbnN0IGN0YWdnZXIgPSBuZXcgQ2hpbGRUYWdnZXIocm9vdCwgJ29uZScpO1xuICAgICAgY29uc3QgY3RhZ0NoaWxkID0gbmV3IENoaWxkVGFnZ2VyKGN0YWdnZXIsICdvbmUnKTtcbiAgICAgIGNvbnN0IHRhZ3NOb1Byb3AgPSBbXG4gICAgICAgIHtrZXk6ICdOb3J0aENvdW50eVNwb3QnLCB2YWx1ZTogJ1RhYmxldG9wcyd9LFxuICAgICAgICB7a2V5OiAnQ3Jvd2RlZCcsIHZhbHVlOiAnVHJlc3RsZXMnfSxcbiAgICAgIF07XG4gICAgICBjb25zdCB0YWdzUHJvcCA9IFtcbiAgICAgICAge2tleTogJ0Jlc3RCZWFjaCcsIHZhbHVlOiAnU3RvbmVTdGVwcyd9LFxuICAgICAgICB7a2V5OiAnQmVzdFdhdmVzJywgdmFsdWU6ICdCbGFja3MnfSxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzTm9Qcm9wKSB7XG4gICAgICAgIGN0YWdnZXIudGFncy5zZXRUYWcodGFnLmtleSwgdGFnLnZhbHVlLCB7cHJvcGFnYXRlOiBmYWxzZX0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFnc1Byb3ApIHtcbiAgICAgICAgY3RhZ2dlci50YWdzLnNldFRhZyh0YWcua2V5LCB0YWcudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsVGFncyA9IHRhZ3NOb1Byb3AuY29uY2F0KHRhZ3NQcm9wKTtcbiAgICAgIGNvbnN0IGNBbGwgPSBjdGFnZ2VyLnRhZ3M7XG4gICAgICBjb25zdCBjUHJvcCA9IGN0YWdDaGlsZC50YWdzO1xuXG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBjQWxsLnJlc29sdmUoKSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZFRhZyA9IGFsbFRhZ3MuZmlsdGVyKCAodCkgPT4gKHQua2V5ID09PSB0YWcua2V5KSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV4cGVjdGVkVGFnWzBdLnZhbHVlLCB0YWcudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB0YWcgb2YgY1Byb3AucmVzb2x2ZSgpKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVGFnID0gdGFnc1Byb3AuZmlsdGVyKCAodCkgPT4gKHQua2V5ID09PSB0YWcua2V5KSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV4cGVjdGVkVGFnWzBdLnZhbHVlLCB0YWcudmFsdWUpO1xuICAgICAgfVxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcbiAgfSxcbn07XG4iXX0=

@@ -282,2 +282,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTRFO0FBQzVFLGlFQUE2RDtBQWdSN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNqQixPQUFPO1FBQ1YsT0FBTztZQUNILElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQy9CLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNXLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS25ELENBQUM7SUFIVSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDSjtBQUVELE1BQU0sWUFBWTtJQUNkLFlBQXFCLEdBQVc7UUFBWCxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBQ2hDLENBQUM7Q0FDSjtBQUVELE1BQU0sUUFBUyxTQUFRLFlBQVk7SUFHL0I7UUFDSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFIUCxRQUFHLEdBQUcsT0FBTyxDQUFDO0lBSXJCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxLQUFVO0lBQzFDLE9BQU87UUFDSCxJQUFJLFdBQUssQ0FBQyxLQUFLLENBQUM7UUFDaEIsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0tBQ3pCLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlDQUFpQyxDQUFDLEtBQVU7SUFDakQsT0FBTztRQUNILElBQUkseUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUks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QzthQUNwRDtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw4REFBOEQsQ0FBQyxJQUFVO1FBQ3JFLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUvQyxPQUFPO1FBQ1AsTUFBTSxDQUFDLEdBQUc7WUFDTixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFO1NBQ3RDLENBQUM7UUFFRixPQUFPO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdURBQXVELENBQUMsSUFBVTtRQUM5RCxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE9BQU87UUFDUCxNQUFNLENBQUMsR0FBRztZQUNOLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUU7U0FDdEMsQ0FBQztRQUVGLE9BQU87UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxzR0FBc0csQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCByZXNvbHZlLCBUb2tlbiwgdW5yZXNvbHZlZCB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBldmFsdWF0ZUNGTiB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uL2V2YWx1YXRlLWNmbic7XG5cbmV4cG9ydCA9IHtcbiAgICAncmVzb2x2ZSBhIHBsYWluIG9sZCBvYmplY3Qgc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBvYmplY3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0geyBQbGFpbk9sZE9iamVjdDogMTIzLCBBcnJheTogWyAxLCAyLCAzIF0gfTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShvYmopLCBvYmopO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2lmIGEgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSB0b2tlbiB2YWx1ZSwgaXQgd2lsbCBiZSBldmFsdWF0ZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgUmVndWxhclZhbHVlOiAnaGVsbG8nLFxuICAgICAgICAgICAgTGF6eVZhbHVlOiBuZXcgVG9rZW4oJ1dvcmxkJylcbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIHtcbiAgICAgICAgICAgIFJlZ3VsYXJWYWx1ZTogJ2hlbGxvJyxcbiAgICAgICAgICAgIExhenlWYWx1ZTogJ1dvcmxkJ1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIGFueXdoZXJlIGluIHRoZSBvYmplY3QgdHJlZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgUHJvbWlzZTEoKTtcbiAgICAgICAgY29uc3QgYWN0dWFsID0gcmVzb2x2ZSh7IE9iajogb2JqIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgICAgICAgT2JqOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgICAgICBjb25zdCBhY3R1YWwgPSByZXNvbHZlKG5ldyBUb2tlbigoKSA9PiAoeyBPYmo6IG9iaiB9KSkpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgICAgICAgT2JqOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2VtcHR5IGFycmF5cyBvciBvYmplY3RzIGFyZSBrZXB0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyB9KSwgeyB9KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShbIF0pLCBbIF0pO1xuXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIFByb3AxOiAxMjM0LFxuICAgICAgICAgICAgUHJvcDI6IHsgfSxcbiAgICAgICAgICAgIFByb3AzOiBbIF0sXG4gICAgICAgICAgICBQcm9wNDogJ2hlbGxvJyxcbiAgICAgICAgICAgIFByb3A1OiB7XG4gICAgICAgICAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgICAgICAgICBQcm9wQjoge1xuICAgICAgICAgICAgICAgICAgICBQcm9wQzogWyB1bmRlZmluZWQsIHVuZGVmaW5lZCBdLFxuICAgICAgICAgICAgICAgICAgICBQcm9wRDogJ1lvb2hvbydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShvYmopLCB7XG4gICAgICAgICAgICBQcm9wMTogMTIzNCxcbiAgICAgICAgICAgIFByb3AyOiB7IH0sXG4gICAgICAgICAgICBQcm9wMzogWyBdLFxuICAgICAgICAgICAgUHJvcDQ6ICdoZWxsbycsXG4gICAgICAgICAgICBQcm9wNToge1xuICAgICAgICAgICAgICAgIFByb3BBOiB7IH0sXG4gICAgICAgICAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICAgICAgICAgICAgUHJvcEM6IFsgXSxcbiAgICAgICAgICAgICAgICAgICAgUHJvcEQ6ICdZb29ob28nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2lmIGFuIG9iamVjdCBoYXMgYSBcInJlc29sdmVcIiBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uLCBpdCBpcyBub3QgY29uc2lkZXJlZCBhIHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyBhX3Rva2VuOiB7IHJlc29sdmU6ICgpID0+IDc4Nzg3IH19KSwgeyBhX3Rva2VuOiA3ODc4NyB9KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSksICAgICB7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgJ2lmIGEgcmVzb2x2YWJsZSBvYmplY3QgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIHRoYXQgaXMgYWxzbyByZXNvbHZhYmxlLCB0aGUgXCJjb25zdHJ1Y3RvclwiIGZ1bmN0aW9uIHdpbGwgbm90IGdldCBpbiB0aGUgd2F5ICh1c2VzIE9iamVjdC5rZXlzIGluc3RlYWQgb2YgXCJmb3IgaW5cIiknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IHByb3A6IG5ldyBEYXRhVHlwZSgpIH0pLCB7IHByb3A6IHsgZm9vOiAxMiwgZ29vOiAnaGVsbG8nIH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaXNUb2tlbihvYmopIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0Lm9rKHVucmVzb2x2ZWQoeyByZXNvbHZlOiAoKSA9PiAxMjMgfSkpO1xuICAgICAgICB0ZXN0Lm9rKHVucmVzb2x2ZWQoeyBhOiAxLCBiOiAyLCByZXNvbHZlOiAoKSA9PiAnaGVsbG8nIH0pKTtcbiAgICAgICAgdGVzdC5vayghdW5yZXNvbHZlZCh7IGE6IDEsIGI6IDIsIHJlc29sdmU6IDMgfSkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1Rva2VuIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0b2tlbnMgdGhhdCBjb250YWluIGEgY29uc3RhbnQgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbigxMikpLCAxMik7XG4gICAgICAgIHRlc3QuZXF1YWwocmVzb2x2ZShuZXcgVG9rZW4oJ2hlbGxvJykpLCAnaGVsbG8nKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShuZXcgVG9rZW4oWyAnaGknLCAndGhlcmUnIF0pKSwgWyAnaGknLCAndGhlcmUnIF0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc29sdmluZyBsZWF2ZXMgYSBEYXRlIG9iamVjdCBpbiB3b3JraW5nIG9yZGVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAwMC0wMS0wMScpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoZGF0ZSk7XG5cbiAgICAgICAgdGVzdC5lcXVhbChkYXRlLnRvU3RyaW5nKCksIHJlc29sdmVkLnRvU3RyaW5nKCkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlZCB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKCgpID0+ICd3b29mIHdvb2YnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gYFRoZSBkb2cgc2F5czogJHt0b2tlbn1gO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAnVGhlIGRvZyBzYXlzOiB3b29mIHdvb2YnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdUb2tlbnMgc3RyaW5naWZpY2F0aW9uIGFuZCByZXZlcnNpbmcgb2YgQ2xvdWRGb3JtYXRpb24gVG9rZW5zIGlzIGltcGxlbWVudGVkIHVzaW5nIEZuOjpKb2luJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gJ3dvb2Ygd29vZicpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgVGhlIGRvZyBzYXlzOiAke3Rva2VufWA7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShzdHJpbmdpZmllZCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlZCwge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogWycnLCBbJ1RoZSBkb2cgc2F5czogJywgJ3dvb2Ygd29vZiddXVxuICAgICAgICB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdEb3VibHkgbmVzdGVkIHN0cmluZ3MgZXZhbHVhdGUgY29ycmVjdGx5IGluIHNjYWxhciBjb250ZXh0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuMSA9IG5ldyBUb2tlbigoKSA9PiBcIndvcmxkXCIpO1xuICAgICAgICBjb25zdCB0b2tlbjIgPSBuZXcgVG9rZW4oKCkgPT4gYGhlbGxvICR7dG9rZW4xfWApO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQxID0gcmVzb2x2ZSh0b2tlbjIudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkMiA9IHJlc29sdmUodG9rZW4yKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMSksIFwiaGVsbG8gd29ybGRcIik7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMiksIFwiaGVsbG8gd29ybGRcIik7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdpbnRlZ2VyIFRva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbygxKSkge1xuICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgdGhlIG51bWJlciBpcyAke3Rva2VufWA7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICd0aGUgbnVtYmVyIGlzIDEnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ludHJpbnNpYyBUb2tlbnMgY2FuIGJlIHN0cmluZ2lmaWVkIGFuZCBldmFsdWF0ZSB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0TmFtZSBvZiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8oeyBSZWY6ICdNeUJ1Y2tldCcgfSkpIHtcbiAgICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgbXkgYnVja2V0IGlzIG5hbWVkICR7YnVja2V0TmFtZX1gKTtcblxuICAgICAgICAgICAgLy8gVEhFTlxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtNeUJ1Y2tldDogJ1RoZU5hbWUnfTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAnbXkgYnVja2V0IGlzIG5hbWVkIFRoZU5hbWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIHJlc29sdmUgcHJvcGVybHkgaW4gaW5pdGlhbCBwb3NpdGlvbicodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvJykpIHtcbiAgICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbn0gd29ybGRgKTtcblxuICAgICAgICAgICAgLy8gVEhFTlxuICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdzaWRlLWJ5LXNpZGUgVG9rZW5zIHJlc29sdmUgY29ycmVjdGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4xIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvICcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuMiBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCd3b3JsZCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbjF9JHt0b2tlbjJ9YCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0b2tlbnMgY2FuIGJlIHVzZWQgaW4gaGFzaCBrZXlzIGJ1dCBtdXN0IHJlc29sdmUgdG8gYSBzdHJpbmcnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ0kgYW0gYSBzdHJpbmcnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgICBbdG9rZW4udG9TdHJpbmcoKV06IGBib29tICR7dG9rZW59YFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShzKSwgeyAnSSBhbSBhIHN0cmluZyc6ICdib29tIEkgYW0gYSBzdHJpbmcnIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ZhaWxzIGlmIHRva2VuIGluIGEgaGFzaCBrZXkgcmVzb2x2ZXMgdG8gYSBub24tc3RyaW5nJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oeyBSZWY6ICdPdGhlcicgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgICAgW3Rva2VuLnRvU3RyaW5nKCldOiBgYm9vbSAke3Rva2VufWBcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHJlc29sdmUocyksICdUaGUga2V5IFwiJHtUb2tlbltUT0tFTi4xOV19XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8ge1wiUmVmXCI6XCJPdGhlclwifSBidXQgbXVzdCBiZSByZXNvbHZhYmxlIHRvIGEgc3RyaW5nJyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbn07XG5cbmNsYXNzIFByb21pc2UyIGV4dGVuZHMgVG9rZW4ge1xuICAgIHB1YmxpYyByZXNvbHZlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgIHN0cmluZ1Byb3A6ICdoZWxsbycsXG4gICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWN1cnNlOiBuZXcgVG9rZW4oKCkgPT4gNDIpXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBQcm9taXNlMSBleHRlbmRzIFRva2VuIHtcbiAgICBwdWJsaWMgcDIgPSBbIG5ldyBQcm9taXNlMigpLCBuZXcgUHJvbWlzZTIoKSBdO1xuXG4gICAgcHVibGljIHJlc29sdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAyO1xuICAgIH1cbn1cblxuY2xhc3MgQmFzZURhdGFUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb286IG51bWJlcikge1xuICAgIH1cbn1cblxuY2xhc3MgRGF0YVR5cGUgZXh0ZW5kcyBCYXNlRGF0YVR5cGUge1xuICAgIHB1YmxpYyBnb28gPSAnaGVsbG8nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDEyKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IFRva2VuKHZhbHVlKSxcbiAgICAgICAgbmV3IFRva2VuKCgpID0+IHZhbHVlKVxuICAgIF07XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IGFueSk6IFRva2VuW10ge1xuICAgIHJldHVybiBbXG4gICAgICAgIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHZhbHVlKSxcbiAgICAgICAgbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gdmFsdWUpXG4gICAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVG9rZW5zIGluIGJvdGggZmxhdm9ycyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0b2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgICByZXR1cm4gbGl0ZXJhbFRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpLmNvbmNhdChjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpKTtcbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTRFO0FBQzVFLGlFQUE2RDtBQWdSN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNuQixPQUFPO1FBQ1osT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDakI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNTLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS2pELENBQUM7SUFIUSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQUVELE1BQU0sWUFBWTtJQUNoQixZQUFxQixHQUFXO1FBQVgsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxZQUFZO0lBR2pDO1FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBSEwsUUFBRyxHQUFHLE9BQU8sQ0FBQztJQUlyQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQUMsS0FBVTtJQUM1QyxPQUFPO1FBQ0wsSUFBSSxXQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hCLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FBQyxLQUFVO0lBQ25ELE9BQU87UUFDTCxJQUFJLHlCQUFtQixDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJ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RUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDhEQUE4RCxDQUFDLElBQVU7UUFDdkUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRS9DLE9BQU87UUFDUCxNQUFNLENBQUMsR0FBRztZQUNSLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUU7U0FDcEMsQ0FBQztRQUVGLE9BQU87UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVEQUF1RCxDQUFDLElBQVU7UUFDaEUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQW1CLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV4RCxPQUFPO1FBQ1AsTUFBTSxDQUFDLEdBQUc7WUFDUixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFO1NBQ3BDLENBQUM7UUFFRixPQUFPO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0dBQXNHLENBQUMsQ0FBQztRQUN0SSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCByZXNvbHZlLCBUb2tlbiwgdW5yZXNvbHZlZCB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBldmFsdWF0ZUNGTiB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uL2V2YWx1YXRlLWNmbic7XG5cbmV4cG9ydCA9IHtcbiAgJ3Jlc29sdmUgYSBwbGFpbiBvbGQgb2JqZWN0IHNob3VsZCBqdXN0IHJldHVybiB0aGUgb2JqZWN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgb2JqID0geyBQbGFpbk9sZE9iamVjdDogMTIzLCBBcnJheTogWyAxLCAyLCAzIF0gfTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIG9iaik7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lmIGEgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSB0b2tlbiB2YWx1ZSwgaXQgd2lsbCBiZSBldmFsdWF0ZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBSZWd1bGFyVmFsdWU6ICdoZWxsbycsXG4gICAgICBMYXp5VmFsdWU6IG5ldyBUb2tlbignV29ybGQnKVxuICAgIH07XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIHtcbiAgICAgIFJlZ3VsYXJWYWx1ZTogJ2hlbGxvJyxcbiAgICAgIExhenlWYWx1ZTogJ1dvcmxkJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIGFueXdoZXJlIGluIHRoZSBvYmplY3QgdHJlZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgIGNvbnN0IGFjdHVhbCA9IHJlc29sdmUoeyBPYmo6IG9iaiB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgT2JqOiBbXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd0b2tlbnMgYXJlIGV2YWx1YXRlZCByZWN1cnNpdmVseScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgIGNvbnN0IGFjdHVhbCA9IHJlc29sdmUobmV3IFRva2VuKCgpID0+ICh7IE9iajogb2JqIH0pKSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChhY3R1YWwsIHtcbiAgICAgIE9iajogW1xuICAgICAgICB7XG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICB9LFxuICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICB9LFxuICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZW1wdHkgYXJyYXlzIG9yIG9iamVjdHMgYXJlIGtlcHQnKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgfSksIHsgfSk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShbIF0pLCBbIF0pO1xuXG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgUHJvcDE6IDEyMzQsXG4gICAgICBQcm9wMjogeyB9LFxuICAgICAgUHJvcDM6IFsgXSxcbiAgICAgIFByb3A0OiAnaGVsbG8nLFxuICAgICAgUHJvcDU6IHtcbiAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICBQcm9wQzogWyB1bmRlZmluZWQsIHVuZGVmaW5lZCBdLFxuICAgICAgICAgIFByb3BEOiAnWW9vaG9vJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob2JqKSwge1xuICAgICAgUHJvcDE6IDEyMzQsXG4gICAgICBQcm9wMjogeyB9LFxuICAgICAgUHJvcDM6IFsgXSxcbiAgICAgIFByb3A0OiAnaGVsbG8nLFxuICAgICAgUHJvcDU6IHtcbiAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICBQcm9wQzogWyBdLFxuICAgICAgICAgIFByb3BEOiAnWW9vaG9vJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaWYgYW4gb2JqZWN0IGhhcyBhIFwicmVzb2x2ZVwiIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24sIGl0IGlzIG5vdCBjb25zaWRlcmVkIGEgdG9rZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgYV90b2tlbjogeyByZXNvbHZlOiAoKSA9PiA3ODc4NyB9fSksIHsgYV90b2tlbjogNzg3ODcgfSk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSksICAgeyBub3RfYV90b2tlbjogeyByZXNvbHZlOiAxMiB9IH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgJ2lmIGEgcmVzb2x2YWJsZSBvYmplY3QgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIHRoYXQgaXMgYWxzbyByZXNvbHZhYmxlLCB0aGUgXCJjb25zdHJ1Y3RvclwiIGZ1bmN0aW9uIHdpbGwgbm90IGdldCBpbiB0aGUgd2F5ICh1c2VzIE9iamVjdC5rZXlzIGluc3RlYWQgb2YgXCJmb3IgaW5cIiknKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgcHJvcDogbmV3IERhdGFUeXBlKCkgfSksIHsgcHJvcDogeyBmb286IDEyLCBnb286ICdoZWxsbycgfSB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaXNUb2tlbihvYmopIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgIHRlc3Qub2sodW5yZXNvbHZlZCh7IHJlc29sdmU6ICgpID0+IDEyMyB9KSk7XG4gICAgdGVzdC5vayh1bnJlc29sdmVkKHsgYTogMSwgYjogMiwgcmVzb2x2ZTogKCkgPT4gJ2hlbGxvJyB9KSk7XG4gICAgdGVzdC5vayghdW5yZXNvbHZlZCh7IGE6IDEsIGI6IDIsIHJlc29sdmU6IDMgfSkpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdUb2tlbiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgdG9rZW5zIHRoYXQgY29udGFpbiBhIGNvbnN0YW50IHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbigxMikpLCAxMik7XG4gICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbignaGVsbG8nKSksICdoZWxsbycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUobmV3IFRva2VuKFsgJ2hpJywgJ3RoZXJlJyBdKSksIFsgJ2hpJywgJ3RoZXJlJyBdKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncmVzb2x2aW5nIGxlYXZlcyBhIERhdGUgb2JqZWN0IGluIHdvcmtpbmcgb3JkZXInKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoJzIwMDAtMDEtMDEnKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoZGF0ZSk7XG5cbiAgICB0ZXN0LmVxdWFsKGRhdGUudG9TdHJpbmcoKSwgcmVzb2x2ZWQudG9TdHJpbmcoKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlZCB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbigoKSA9PiAnd29vZiB3b29mJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgVGhlIGRvZyBzYXlzOiAke3Rva2VufWA7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHN0cmluZ2lmaWVkKTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdUaGUgZG9nIHNheXM6IHdvb2Ygd29vZicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdUb2tlbnMgc3RyaW5naWZpY2F0aW9uIGFuZCByZXZlcnNpbmcgb2YgQ2xvdWRGb3JtYXRpb24gVG9rZW5zIGlzIGltcGxlbWVudGVkIHVzaW5nIEZuOjpKb2luJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKCgpID0+ICd3b29mIHdvb2YnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IGBUaGUgZG9nIHNheXM6ICR7dG9rZW59YDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmVkLCB7XG4gICAgICAnRm46OkpvaW4nOiBbJycsIFsnVGhlIGRvZyBzYXlzOiAnLCAnd29vZiB3b29mJ11dXG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0RvdWJseSBuZXN0ZWQgc3RyaW5ncyBldmFsdWF0ZSBjb3JyZWN0bHkgaW4gc2NhbGFyIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuMSA9IG5ldyBUb2tlbigoKSA9PiBcIndvcmxkXCIpO1xuICAgIGNvbnN0IHRva2VuMiA9IG5ldyBUb2tlbigoKSA9PiBgaGVsbG8gJHt0b2tlbjF9YCk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcmVzb2x2ZWQxID0gcmVzb2x2ZSh0b2tlbjIudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcmVzb2x2ZWQyID0gcmVzb2x2ZSh0b2tlbjIpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMSksIFwiaGVsbG8gd29ybGRcIik7XG4gICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQyKSwgXCJoZWxsbyB3b3JsZFwiKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbnRlZ2VyIFRva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgbGl0ZXJhbFRva2Vuc1RoYXRSZXNvbHZlVG8oMSkpIHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gYHRoZSBudW1iZXIgaXMgJHt0b2tlbn1gO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHN0cmluZ2lmaWVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAndGhlIG51bWJlciBpcyAxJyk7XG4gICAgfVxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbnRyaW5zaWMgVG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGUgdG8gY29uY2VwdHVhbCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgZm9yIChjb25zdCBidWNrZXROYW1lIG9mIGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh7IFJlZjogJ015QnVja2V0JyB9KSkge1xuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGBteSBidWNrZXQgaXMgbmFtZWQgJHtidWNrZXROYW1lfWApO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCwgY29udGV4dCksICdteSBidWNrZXQgaXMgbmFtZWQgVGhlTmFtZScpO1xuICAgIH1cblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd0b2tlbnMgcmVzb2x2ZSBwcm9wZXJseSBpbiBpbml0aWFsIHBvc2l0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvJykpIHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbn0gd29ybGRgKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgIH1cblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzaWRlLWJ5LXNpZGUgVG9rZW5zIHJlc29sdmUgY29ycmVjdGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IHRva2VuMSBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCdIZWxsbyAnKSkge1xuICAgICAgZm9yIChjb25zdCB0b2tlbjIgb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnd29ybGQnKSkge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbjF9JHt0b2tlbjJ9YCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ0hlbGxvIHdvcmxkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBjYW4gYmUgdXNlZCBpbiBoYXNoIGtleXMgYnV0IG11c3QgcmVzb2x2ZSB0byBhIHN0cmluZycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ0kgYW0gYSBzdHJpbmcnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzID0ge1xuICAgICAgW3Rva2VuLnRvU3RyaW5nKCldOiBgYm9vbSAke3Rva2VufWBcbiAgICB9O1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocyksIHsgJ0kgYW0gYSBzdHJpbmcnOiAnYm9vbSBJIGFtIGEgc3RyaW5nJyB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgaWYgdG9rZW4gaW4gYSBoYXNoIGtleSByZXNvbHZlcyB0byBhIG5vbi1zdHJpbmcnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oeyBSZWY6ICdPdGhlcicgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcyA9IHtcbiAgICAgIFt0b2tlbi50b1N0cmluZygpXTogYGJvb20gJHt0b2tlbn1gXG4gICAgfTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LnRocm93cygoKSA9PiByZXNvbHZlKHMpLCAnVGhlIGtleSBcIiR7VG9rZW5bVE9LRU4uMTldfVwiIGhhcyBiZWVuIHJlc29sdmVkIHRvIHtcIlJlZlwiOlwiT3RoZXJcIn0gYnV0IG11c3QgYmUgcmVzb2x2YWJsZSB0byBhIHN0cmluZycpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuXG5jbGFzcyBQcm9taXNlMiBleHRlbmRzIFRva2VuIHtcbiAgcHVibGljIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIERhdGE6IHtcbiAgICAgICAgc3RyaW5nUHJvcDogJ2hlbGxvJyxcbiAgICAgICAgbnVtYmVyUHJvcDogMTIzNCxcbiAgICAgIH0sXG4gICAgICBSZWN1cnNlOiBuZXcgVG9rZW4oKCkgPT4gNDIpXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBQcm9taXNlMSBleHRlbmRzIFRva2VuIHtcbiAgcHVibGljIHAyID0gWyBuZXcgUHJvbWlzZTIoKSwgbmV3IFByb21pc2UyKCkgXTtcblxuICBwdWJsaWMgcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wMjtcbiAgfVxufVxuXG5jbGFzcyBCYXNlRGF0YVR5cGUge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb286IG51bWJlcikge1xuICB9XG59XG5cbmNsYXNzIERhdGFUeXBlIGV4dGVuZHMgQmFzZURhdGFUeXBlIHtcbiAgcHVibGljIGdvbyA9ICdoZWxsbyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoMTIpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gIHJldHVybiBbXG4gICAgbmV3IFRva2VuKHZhbHVlKSxcbiAgICBuZXcgVG9rZW4oKCkgPT4gdmFsdWUpXG4gIF07XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IGFueSk6IFRva2VuW10ge1xuICByZXR1cm4gW1xuICAgIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHZhbHVlKSxcbiAgICBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbigoKSA9PiB2YWx1ZSlcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVG9rZW5zIGluIGJvdGggZmxhdm9ycyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0b2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgcmV0dXJuIGxpdGVyYWxUb2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlKS5jb25jYXQoY2xvdWRGb3JtYXRpb25Ub2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlKSk7XG59XG4iXX0=

@@ -58,2 +58,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSw4Q0FBMkU7QUFtRTNFLE1BQU0sU0FBUztJQUFmO1FBQ1csUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFFBQUcsR0FBRyxFQUFFLENBQUM7SUFJcEIsQ0FBQztJQUhVLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUF2RUQsaUJBQVM7SUFDTCwyR0FBMkcsQ0FBQyxJQUFVO1FBRWxILElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQXVCLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBdUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQUMsQ0FBRSxPQUFPLEVBQUUsRUFBRSxDQUFFLENBQUMsRUFBRSxDQUFFLE9BQU8sRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQ2xDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDaEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQ2xDLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3RCLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxF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a0JBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBRSxTQUFTLEVBQUUsU0FBUyxDQUFFLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcywgaWdub3JlRW1wdHkgfSBmcm9tICcuLi8uLi9saWIvY29yZS91dGlsJztcblxuZXhwb3J0ID0ge1xuICAgICdjYXBpdGFsaXplUmVzb3VyY2VQcm9wZXJ0aWVzIGNhcGl0YWxpemVzIGFsbCBrZXlzIG9mIGFuIG9iamVjdCAocmVjdXJzaXZlbHkpIGZyb20gY2FtZWxDYXNlIHRvIFBhc2NhbENhc2UnKHRlc3Q6IFRlc3QpIHtcblxuICAgICAgICB0ZXN0LmVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHVuZGVmaW5lZCksIHVuZGVmaW5lZCk7XG4gICAgICAgIHRlc3QuZXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoMTIpLCAxMik7XG4gICAgICAgIHRlc3QuZXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoJ2hlbGxvJyksICdoZWxsbycpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjYXBpdGFsaXplUHJvcGVydHlOYW1lcyhbICdoZWxsbycsIDg4IF0pLCBbICdoZWxsbycsIDg4IF0pO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChjYXBpdGFsaXplUHJvcGVydHlOYW1lcyhcbiAgICAgICAgICAgIHsgSGVsbG86ICd3b3JsZCcsIGhleTogJ2R1ZGUnIH0pLFxuICAgICAgICAgICAgeyBIZWxsbzogJ3dvcmxkJywgSGV5OiAnZHVkZScgfSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKFxuICAgICAgICAgICAgWyAxLCAyLCB7IHRocmVlOiAzIH1dKSxcbiAgICAgICAgICAgIFsgMSwgMiwgeyBUaHJlZTogMyB9XSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKFxuICAgICAgICAgICAgeyBIZWxsbzogJ3dvcmxkJywgcmVjdXJzaXZlOiB7IGZvbzogMTIzLCB0aGVyZTogeyBhbm90aGVyOiBbICdoZWxsbycsIHsgd29ybGQ6IDEyMyB9IF19IH0gfSksXG4gICAgICAgICAgICB7IEhlbGxvOiAnd29ybGQnLCBSZWN1cnNpdmU6IHsgRm9vOiAxMjMsIFRoZXJlOiB7IEFub3RoZXI6IFsgJ2hlbGxvJywgeyBXb3JsZDogMTIzIH0gXX0gfSB9KTtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdG9rZW5zIGFyZSByZXNvbHZlZCBhbmQgcmVzdWx0IGlzIGFsc28gY2FwaXRhbGl6ZWRcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoXG4gICAgICAgICAgICB7IGhlbGxvOiB7IHJlc29sdmU6ICgpID0+ICh7IGZvbzogJ2JhcicgfSkgfSwgd29ybGQ6IG5ldyBTb21lVG9rZW4oKSB9KSxcbiAgICAgICAgICAgIHsgSGVsbG86IHsgRm9vOiAnYmFyJyB9LCBXb3JsZDogMTAwIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaWdub3JlRW1wdHknOiB7XG5cbiAgICAgICAgJ1tdJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGlnbm9yZUVtcHR5KFtdKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd7fScodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgdGVzdC5zdHJpY3RFcXVhbChpZ25vcmVFbXB0eSh7fSksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAndW5kZWZpbmVkL251bGwnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkodW5kZWZpbmVkKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkobnVsbCksIG51bGwpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3ByaW1pdGl2ZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkoMTIpLCAxMik7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGlnbm9yZUVtcHR5KFwiMTJcIiksIFwiMTJcIik7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAnbm9uLWVtcHR5IGFycmF5cy9vYmplY3RzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChpZ25vcmVFbXB0eShbIDEsIDIsIDMsIHVuZGVmaW5lZCBdKSwgWyAxLCAyLCAzIF0pOyAvLyB1bmRlZmluZWQgYXJyYXkgdmFsdWVzIGlzIGNsZWFuZWQgdXAgYnkgXCJyZXNvbHZlXCJcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGlnbm9yZUVtcHR5KHsgbzogMSwgYjogMiwgajogMyB9KSwgeyBvOiAxLCBiOiAyLCBqOiAzIH0pO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3Jlc29sdmUgZmlyc3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGlnbm9yZUVtcHR5KHsgeG9vOiB7IHJlc29sdmU6ICgpID0+IDEyMyB9fSksIHsgeG9vOiAxMjMgfSk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGlnbm9yZUVtcHR5KHsgeG9vOiB7IHJlc29sdmU6ICgpID0+IHVuZGVmaW5lZCB9fSksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChpZ25vcmVFbXB0eSh7IHhvbzogeyByZXNvbHZlOiAoKSA9PiBbIF0gfX0pLCB7IHhvbzogW10gfSk7XG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChpZ25vcmVFbXB0eSh7IHhvbzogeyByZXNvbHZlOiAoKSA9PiBbIHVuZGVmaW5lZCwgdW5kZWZpbmVkIF0gfX0pLCB7IHhvbzogW10gfSk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNsYXNzIFNvbWVUb2tlbiB7XG4gICAgcHVibGljIGZvbyA9IDYwO1xuICAgIHB1YmxpYyBnb28gPSA0MDtcbiAgICBwdWJsaWMgcmVzb2x2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9vICsgdGhpcy5nb287XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSw4Q0FBMkU7QUFtRTNFLE1BQU0sU0FBUztJQUFmO1FBQ1MsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFFBQUcsR0FBRyxFQUFFLENBQUM7SUFJbEIsQ0FBQztJQUhRLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUF2RUQsaUJBQVM7SUFDUCwyR0FBMkcsQ0FBQyxJQUFVO1FBRXBILElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQXVCLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBdUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQUMsQ0FBRSxPQUFPLEVBQUUsRUFBRSxDQUFFLENBQUMsRUFBRSxDQUFFLE9BQU8sRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQ3BDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDaEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQXVCLENBQ3BDLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3RCLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxF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Q0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBRSxTQUFTLEVBQUUsU0FBUyxDQUFFLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzLCBpZ25vcmVFbXB0eSB9IGZyb20gJy4uLy4uL2xpYi9jb3JlL3V0aWwnO1xuXG5leHBvcnQgPSB7XG4gICdjYXBpdGFsaXplUmVzb3VyY2VQcm9wZXJ0aWVzIGNhcGl0YWxpemVzIGFsbCBrZXlzIG9mIGFuIG9iamVjdCAocmVjdXJzaXZlbHkpIGZyb20gY2FtZWxDYXNlIHRvIFBhc2NhbENhc2UnKHRlc3Q6IFRlc3QpIHtcblxuICAgIHRlc3QuZXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModW5kZWZpbmVkKSwgdW5kZWZpbmVkKTtcbiAgICB0ZXN0LmVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKDEyKSwgMTIpO1xuICAgIHRlc3QuZXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoJ2hlbGxvJyksICdoZWxsbycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKFsgJ2hlbGxvJywgODggXSksIFsgJ2hlbGxvJywgODggXSk7XG4gICAgdGVzdC5kZWVwRXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoXG4gICAgICB7IEhlbGxvOiAnd29ybGQnLCBoZXk6ICdkdWRlJyB9KSxcbiAgICAgIHsgSGVsbG86ICd3b3JsZCcsIEhleTogJ2R1ZGUnIH0pO1xuICAgIHRlc3QuZGVlcEVxdWFsKGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKFxuICAgICAgWyAxLCAyLCB7IHRocmVlOiAzIH1dKSxcbiAgICAgIFsgMSwgMiwgeyBUaHJlZTogMyB9XSk7XG4gICAgdGVzdC5kZWVwRXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoXG4gICAgICB7IEhlbGxvOiAnd29ybGQnLCByZWN1cnNpdmU6IHsgZm9vOiAxMjMsIHRoZXJlOiB7IGFub3RoZXI6IFsgJ2hlbGxvJywgeyB3b3JsZDogMTIzIH0gXX0gfSB9KSxcbiAgICAgIHsgSGVsbG86ICd3b3JsZCcsIFJlY3Vyc2l2ZTogeyBGb286IDEyMywgVGhlcmU6IHsgQW5vdGhlcjogWyAnaGVsbG8nLCB7IFdvcmxkOiAxMjMgfSBdfSB9IH0pO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRva2VucyBhcmUgcmVzb2x2ZWQgYW5kIHJlc3VsdCBpcyBhbHNvIGNhcGl0YWxpemVkXG4gICAgdGVzdC5kZWVwRXF1YWwoY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoXG4gICAgICB7IGhlbGxvOiB7IHJlc29sdmU6ICgpID0+ICh7IGZvbzogJ2JhcicgfSkgfSwgd29ybGQ6IG5ldyBTb21lVG9rZW4oKSB9KSxcbiAgICAgIHsgSGVsbG86IHsgRm9vOiAnYmFyJyB9LCBXb3JsZDogMTAwIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lnbm9yZUVtcHR5Jzoge1xuXG4gICAgJ1tdJyh0ZXN0OiBUZXN0KSB7XG4gICAgICB0ZXN0LnN0cmljdEVxdWFsKGlnbm9yZUVtcHR5KFtdKSwgdW5kZWZpbmVkKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAne30nKHRlc3Q6IFRlc3QpIHtcbiAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkoe30pLCB1bmRlZmluZWQpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd1bmRlZmluZWQvbnVsbCcodGVzdDogVGVzdCkge1xuICAgICAgdGVzdC5zdHJpY3RFcXVhbChpZ25vcmVFbXB0eSh1bmRlZmluZWQpLCB1bmRlZmluZWQpO1xuICAgICAgdGVzdC5zdHJpY3RFcXVhbChpZ25vcmVFbXB0eShudWxsKSwgbnVsbCk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3ByaW1pdGl2ZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkoMTIpLCAxMik7XG4gICAgICB0ZXN0LnN0cmljdEVxdWFsKGlnbm9yZUVtcHR5KFwiMTJcIiksIFwiMTJcIik7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ25vbi1lbXB0eSBhcnJheXMvb2JqZWN0cycodGVzdDogVGVzdCkge1xuICAgICAgdGVzdC5kZWVwRXF1YWwoaWdub3JlRW1wdHkoWyAxLCAyLCAzLCB1bmRlZmluZWQgXSksIFsgMSwgMiwgMyBdKTsgLy8gdW5kZWZpbmVkIGFycmF5IHZhbHVlcyBpcyBjbGVhbmVkIHVwIGJ5IFwicmVzb2x2ZVwiXG4gICAgICB0ZXN0LmRlZXBFcXVhbChpZ25vcmVFbXB0eSh7IG86IDEsIGI6IDIsIGo6IDMgfSksIHsgbzogMSwgYjogMiwgajogMyB9KTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb2x2ZSBmaXJzdCcodGVzdDogVGVzdCkge1xuICAgICAgdGVzdC5kZWVwRXF1YWwoaWdub3JlRW1wdHkoeyB4b286IHsgcmVzb2x2ZTogKCkgPT4gMTIzIH19KSwgeyB4b286IDEyMyB9KTtcbiAgICAgIHRlc3Quc3RyaWN0RXF1YWwoaWdub3JlRW1wdHkoeyB4b286IHsgcmVzb2x2ZTogKCkgPT4gdW5kZWZpbmVkIH19KSwgdW5kZWZpbmVkKTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKGlnbm9yZUVtcHR5KHsgeG9vOiB7IHJlc29sdmU6ICgpID0+IFsgXSB9fSksIHsgeG9vOiBbXSB9KTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKGlnbm9yZUVtcHR5KHsgeG9vOiB7IHJlc29sdmU6ICgpID0+IFsgdW5kZWZpbmVkLCB1bmRlZmluZWQgXSB9fSksIHsgeG9vOiBbXSB9KTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbiAgfVxufTtcblxuY2xhc3MgU29tZVRva2VuIHtcbiAgcHVibGljIGZvbyA9IDYwO1xuICBwdWJsaWMgZ29vID0gNDA7XG4gIHB1YmxpYyByZXNvbHZlKCkge1xuICAgIHJldHVybiB0aGlzLmZvbyArIHRoaXMuZ29vO1xuICB9XG59XG4iXX0=

@@ -282,2 +282,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsZ0NBQWdFO0FBQ2hFLG9DQUFpQztBQUVqQyxFQUFFO0FBQ0YsMkRBQTJEO0FBRTNELFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBYztJQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxDQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBRSxDQUFDLENBQUM7SUFFM0MscUNBQXFDO0lBRXJDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUYsSUFBSSxjQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4QyxJQUFJLGNBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzQyxvQkFBb0I7SUFD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dUJBQXVCLEVBQUU7Z0JBQ3pCLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixJQUFJLEVBQUU7b0JBQ0YsTUFBTTtvQkFDTixNQUFNO2lCQUNUO2dCQUNELEtBQUssRUFBRTtvQkFDSCxRQUFRO29CQUNSLFFBQVE7aUJBQ1g7YUFDQTtTQUNKLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQscUNBQXFDLENBQUMsSUFBVTtRQUM1QyxNQUFNLEdBQUcsR0FBRztZQUNSLElBQUksRUFBRSxNQUFNO1NBQ2YsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ2pCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLGlCQUFpQjt3QkFDdkIsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE1BQU0sRUFBRSxXQUFXO3FCQUNwQjtpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtpQkFDZjthQUNGO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQ0FBcUMsQ0FBQyxJQUFVO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBSZXNvdXJjZSwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi4vbGliL2FwcCc7XG5cbi8vXG4vLyB0aGlzIGlzIHRoZSBpZGlvbWF0aWMgd2F5IHdlIHdhbnQgb3VyIGFwcHMgdG8gbG9vayBsaWtlOlxuXG5mdW5jdGlvbiBtYWluKC4uLmFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFsgJ215cHJvZycsIC4uLmFyZ3YgXSk7XG5cbiAgICAvLyBzdGFja3MgYXJlIGNoaWxkcmVuIG9mIHRoZSBwcm9ncmFtXG5cbiAgICBjb25zdCBzdGFjazEgPSBuZXcgU3RhY2soYXBwLCAnc3RhY2sxJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIG5ldyBSZXNvdXJjZShzdGFjazEsICdzMWMxJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgUHJvcDE6ICdQcm9wMScgfSB9KTtcbiAgICBjb25zdCByMiA9IG5ldyBSZXNvdXJjZShzdGFjazEsICdzMWMyJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgRm9vOiAxMjMgfSB9KTtcblxuICAgIGNvbnN0IHN0YWNrMiA9IG5ldyBTdGFjayhhcHAsICdzdGFjazInKTtcbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2syLCAnczJjMScsIHsgdHlwZTogJ0R1bW15UmVzb3VyY2UnLCBwcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSk7XG4gICAgY29uc3QgYzEgPSBuZXcgTXlDb25zdHJ1Y3Qoc3RhY2syLCAnczFjMicpO1xuXG4gICAgLy8gYWRkIHNvbWUgbWV0YWRhdGFcbiAgICBzdGFjazEuYWRkTWV0YWRhdGEoJ21ldGEnLCAxMTEpO1xuICAgIHIyLmFkZFdhcm5pbmcoJ3dhcm5pbmcxJyk7XG4gICAgcjIuYWRkV2FybmluZygnd2FybmluZzInKTtcbiAgICBjMS5hZGRNZXRhZGF0YSgnbWV0YScsIHsga2V5OiAndmFsdWUnIH0pO1xuICAgIGFwcC5hZGRNZXRhZGF0YSgnYXBwbGV2ZWwnLCAxMjMpOyAvLyBhcHBzIGNhbiBhbHNvIGhhdmUgbWV0YWRhdGFcblxuICAgIHJldHVybiBKU09OLnBhcnNlKGFwcC5ydW4oKSk7XG59XG5cbmZ1bmN0aW9uIHJ1bk1haW4ob2JqZWN0OiBjeGFwaS5DWFJlcXVlc3QpIHtcbiAgICByZXR1cm4gbWFpbihKU09OLnN0cmluZ2lmeShvYmplY3QpKTtcbn1cblxuZnVuY3Rpb24gcnVuTGlzdCgpIHtcbiAgICByZXR1cm4gKG1haW4oSlNPTi5zdHJpbmdpZnkoe3R5cGU6ICdsaXN0J30pKSBhcyBjeGFwaS5MaXN0U3RhY2tzUmVzcG9uc2UpLnN0YWNrcztcbn1cblxuZnVuY3Rpb24gcnVuQ29uc05vTWV0YTEoc3RhY2s6IHN0cmluZywgY29udGV4dD86IGFueSk6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2sge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbWFpbihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHR5cGU6ICdzeW50aCcsXG4gICAgICAgIHN0YWNrczogW3N0YWNrXSxcbiAgICAgICAgY29udGV4dFxuICAgIH0pKTtcbiAgICBkZWxldGUgcmVzcG9uc2Uuc3RhY2tzWzBdLm1ldGFkYXRhO1xuICAgIHJldHVybiByZXNwb25zZS5zdGFja3NbMF07XG59XG5cbmV4cG9ydCA9IHtcbiAgICAnZmlyc3QgbGluZSBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgY3ggaW50ZXJmYWNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgICAgIHRlc3Qub2soKHByb2cucnVuKCkpLmluZGV4T2YoJ0Nsb3VkRXhlY3V0YWJsZS8xLjAnKSA9PT0gMCk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnd2hlbiBleGVjdXRlZCB3aXRob3V0IGFyZ3VtZW50cywgc2hvd3MgaW50ZXJmYWNlIHZlcnNpb24gYW5kIHVzYWdlIHVzYWdlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcHAoWyAnbXlwcm9nJyBdKS5ydW4oKTtcblxuICAgICAgICB0ZXN0Lm5vdEVxdWFsKG91dHB1dC5pbmRleE9mKCdteXByb2cnKSwgLTEsICdPdXRwdXQgc2hvdWxkIGNvbnRhaW4gcHJvZ3JhbSBuYW1lJyk7XG4gICAgICAgIHRlc3Qubm90RXF1YWwob3V0cHV0LmluZGV4T2YoJ1VzYWdlJyksIC0xLCAnT3V0cHV0IHNob3VsZCBjb250YWluIHVzYWdlJyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICBhc3luYyAndW5rbm93biBjb21tYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3InKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiB7IG1haW4oJ2ZvbycpOyB9XG4gICAgICAgICk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnXCJsaXN0XCIgd2l0aCBubyBzdGFja3MgcmV0dXJucyB3aXRoIGFuIGVtcHR5IGFycmF5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcHAoWyAnbXlwcm9nJywgSlNPTi5zdHJpbmdpZnkoe3R5cGU6ICdsaXN0J30pIF0pLnJ1bigpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChKU09OLnBhcnNlKG91dHB1dCkuc3RhY2tzLCBbXSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnXCJsaXN0XCIgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN0YWNrcywgd2l0aCByZWdpb24gaW5mb3JtYXRpb24gaWYgZXhpc3RzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocnVuTGlzdCgpLCBbIHsgbmFtZTogJ3N0YWNrMScsIGVudmlyb25tZW50OiB7IG5hbWU6ICcxMjM0NS91cy1lYXN0LTEnLCByZWdpb246ICd1cy1lYXN0LTEnLCBhY2NvdW50OiAnMTIzNDUnIH0gfSwgeyBuYW1lOiAnc3RhY2syJyB9IF0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2xpc3QoKSBjYW4gYmUgdXNlZCBwcm9ncmFtbWF0aWNhbGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHByb2cubGlzdFN0YWNrcygpLCBbXSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnXCJjb25zXCIgdGhyb3dzIGlmIHRoZSBzdGFjayBkbyBub3QgZXhpc3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiB7IHJ1bk1haW4oe3R5cGU6ICdzeW50aCcsIHN0YWNrczogWydzdGFjazk5J10gfSk7IH1cbiAgICAgICAgKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdcImNvbnNcIiB3aWxsIHJldHVybiByZWdpb24gaW5mbyBmb3IgdGhlIHJlcXVpcmVkIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG91dCA9IChydW5Db25zTm9NZXRhMSgnc3RhY2sxJykpO1xuICAgICAgICB0ZXN0LmVxdWFsKCdzdGFjazEnLCBvdXQubmFtZSk7XG4gICAgICAgIHRlc3QuZXF1YWwoJzEyMzQ1Jywgb3V0LmVudmlyb25tZW50IS5hY2NvdW50KTtcbiAgICAgICAgdGVzdC5lcXVhbCgndXMtZWFzdC0xJywgb3V0LmVudmlyb25tZW50IS5yZWdpb24pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1wiY29uc1wiIHdpbGwgcmV0dXJuIHRoZSBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZSBmb3IgdGhlIHJlcXVpcmVkIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG91dDEgPSAocnVuQ29uc05vTWV0YTEoJ3N0YWNrMScpKS50ZW1wbGF0ZTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwob3V0MSwgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICB7IHMxYzE6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IFByb3AxOiAnUHJvcDEnIH0gfSxcbiAgICAgICAgICAgICAgczFjMjogeyBUeXBlOiAnRHVtbXlSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgRm9vOiAxMjMgfSB9IH0gfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0MiA9IChydW5Db25zTm9NZXRhMSgnc3RhY2syJykpLnRlbXBsYXRlO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChvdXQyLFxuICAgICAgICAgICAgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICB7IHMyYzE6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSxcbiAgICAgICAgICAgICAgICBzMWMycjFEMTc5MUMwMTogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMScgfSxcbiAgICAgICAgICAgICAgICBzMWMycjI1RjY4NUZGRjogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMicgfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnc3ludGgobmFtZSkgY2FuIGJlIHVzZWQgcHJvZ3JhbW1hdGljYWxseScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwcm9nID0gbmV3IEFwcCgpO1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhwcm9nLCAnTXlTdGFjaycpO1xuICAgICAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUnIH0pO1xuXG4gICAgICAgIGxldCB0aHJvd3M7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9nLnN5bnRoZXNpemVTdGFja3MoWydmb28nXSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93cyA9IGUubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0ZXN0Lm9rKHRocm93cy5pbmRleE9mKCdDYW5ub3QgZmluZCBzdGFjayBmb28nKSAhPT0gLTEpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuc3ludGhlc2l6ZVN0YWNrKCdNeVN0YWNrJykudGVtcGxhdGUsXG4gICAgICAgICAgICB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdNeVJlc291cmNlVHlwZScgfSB9IH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3N5bnRoKG5hbWUpIGFsc28gY29sbGVjdHMgbWV0YWRhdGEgZnJvbSBhbGwgY29uc3RydWN0cyBpbiB0aGUgc3RhY2snKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBydW5NYWluKHt0eXBlOiAnc3ludGgnLCBzdGFja3M6IFsnc3RhY2sxJ119KSBhcyBjeGFwaS5TeW50aGVzaXplUmVzcG9uc2U7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gcmVzcG9uc2Uuc3RhY2tzWzBdLm1ldGFkYXRhO1xuICAgICAgICBzdHJpcFN0YWNrVHJhY2VzKG91dHB1dCk7XG5cbiAgICAgICAgdGVzdC5vayhvdXRwdXRbJy8nXSwgJ2FwcC1sZXZlbCBtZXRhZGF0YSBpcyBpbmNsdWRlZCB1bmRlciBcIi5cIicpO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dFsnLyddWzBdLnR5cGUsICdhcHBsZXZlbCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dFsnLyddWzBdLmRhdGEsIDEyMyk7XG5cbiAgICAgICAgdGVzdC5vayhvdXRwdXRbJy9zdGFjazEnXSwgJ3RoZSBjb25zdHJ1Y3QgXCJzdGFjazFcIiBoYXMgbWV0YWRhdGEnKTtcbiAgICAgICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEnXVswXS50eXBlLCAnbWV0YScpO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMSddWzBdLmRhdGEsIDExMSk7XG4gICAgICAgIHRlc3Qub2sob3V0cHV0Wycvc3RhY2sxJ11bMF0udHJhY2UubGVuZ3RoID4gMCwgJ3RyYWNlIGNvbnRhaW5zIG11bHRpcGxlIGVudHJpZXMnKTtcblxuICAgICAgICB0ZXN0Lm9rKG91dHB1dFsnL3N0YWNrMS9zMWMyJ10pO1xuICAgICAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMS9zMWMyJ10ubGVuZ3RoLCAyLCAndHdvIGVudHJpZXMnKTtcbiAgICAgICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEvczFjMiddWzBdLmRhdGEsICd3YXJuaW5nMScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IHJ1bk1haW4oe3R5cGU6ICdzeW50aCcsIHN0YWNrczogWydzdGFjazInXX0pIGFzIGN4YXBpLlN5bnRoZXNpemVSZXNwb25zZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0MiA9IHJlc3BvbnNlMi5zdGFja3NbMF0ubWV0YWRhdGE7XG5cbiAgICAgICAgdGVzdC5vayhvdXRwdXQyWycvc3RhY2syL3MxYzInXSk7XG4gICAgICAgIHRlc3QuZXF1YWwob3V0cHV0MlsnL3N0YWNrMi9zMWMyJ11bMF0udHlwZSwgJ21ldGEnKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwob3V0cHV0MlsnL3N0YWNrMi9zMWMyJ11bMF0uZGF0YSwgeyBrZXk6ICd2YWx1ZScgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb250ZXh0IGNhbiBiZSBwYXNzZWQgdXNpbmcgdGhlIC1jIG9wdGlvbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwcm9nID0gbmV3IEFwcChbICdteXByb2cnLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB0eXBlOiAnc3ludGgnLFxuICAgICAgICAgICAgc3RhY2tOYW1lOiAnc3RhY2snLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGtleTE6ICd2YWwxJyxcbiAgICAgICAgICAgICAgICBrZXkyOiAndmFsMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSldKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocHJvZy5nZXRDb250ZXh0KCdrZXkxJyksICd2YWwxJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuZ2V0Q29udGV4dCgna2V5MicpLCAndmFsMicpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbnRleHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHJ1bkNvbnNOb01ldGExKCdzdGFjazInLCB7IGN0eDE6ICdIRUxMTycgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwob3V0cHV0LnRlbXBsYXRlLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgczJjMToge1xuICAgICAgICAgICAgICAgIFR5cGU6IFwiRHVtbXlSZXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgIFByb2cyOiBcIlByb2cyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHMxYzJyMUQxNzkxQzAxOiB7XG4gICAgICAgICAgICAgICAgVHlwZTogXCJSZXNvdXJjZVR5cGUxXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgczFjMnIyNUY2ODVGRkY6IHtcbiAgICAgICAgICAgICAgICBUeXBlOiBcIlJlc291cmNlVHlwZTJcIixcbiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICBGcm9tQ29udGV4dDogXCJIRUxMT1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3NldENvbnRleHQoayx2KSBjYW4gYmUgdXNlZCB0byBzZXQgY29udGV4dCBwcm9ncmFtbWF0aWNhbGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgICAgIHByb2cuc2V0Q29udGV4dCgnZm9vJywgJ2JhcicpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLmdldENvbnRleHQoJ2ZvbycpLCAnYmFyJyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnc2V0Q29udGV4dChrLHYpIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgc3RhY2tzIGhhdmUgYmVlbiBhZGRlZCBiZWNhdXNlIHN0YWNrcyBtYXkgdXNlIHRoZSBjb250ZXh0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgICAgIG5ldyBTdGFjayhwcm9nLCAnczEnKTtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gcHJvZy5zZXRDb250ZXh0KCdmb28nLCAnYmFyJykpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FwcC5zeW50aGVzaXplU3RhY2soc3RhY2spIHBlcmZvcm1zIHZhbGlkYXRpb24gZmlyc3QgKGFwcC52YWxpZGF0ZUFsbCgpKSBhbmQgaWYgdGhlcmUgYXJlIGVycm9ycywgaXQgcmV0dXJucyB0aGUgZXJyb3JzJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICAgICAgY2xhc3MgQ2hpbGQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgICAgICAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbIGBFcnJvciBmcm9tICR7dGhpcy5pZH1gIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzcyBQYXJlbnQgZXh0ZW5kcyBTdGFjayB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBuZXcgUGFyZW50KGFwcCwgJ1BhcmVudCcpO1xuICAgICAgICBuZXcgQ2hpbGQocGFyZW50LCAnQzEnKTtcbiAgICAgICAgbmV3IENoaWxkKHBhcmVudCwgJ0MyJyk7XG5cbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgYXBwLnN5bnRoZXNpemVTdGFja3MoWydQYXJlbnQnXSk7XG4gICAgICAgIH0sIC9TdGFjayB2YWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzLyk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhcHAuc3ludGhlc2l6ZVN0YWNrKHN0YWNrKSB3aWxsIHJldHVybiBhIGxpc3Qgb2YgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQ6IGN4YXBpLkNYUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdzeW50aCcsXG4gICAgICAgICAgICBzdGFja3M6IFsnTXlTdGFjayddXG4gICAgICAgIH07XG5cbiAgICAgICAgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQXBwLCBuYW1lOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSwgcHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nQ29udGV4dCgnbWlzc2luZy1jb250ZXh0LWtleScsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6ICdjdHgtcHJvdmlkZXInLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbICdhcmcxJywgJ2FyZzInIF0sXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiBbICdzY29wZTEnLCAnc2NvcGUyJyBdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydE1pc3NpbmdDb250ZXh0KCdtaXNzaW5nLWNvbnRleHQta2V5LTInLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiAnY3R4LXByb3ZpZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogWyAnYXJnMScsICdhcmcyJyBdLFxuICAgICAgICAgICAgICAgICAgICBzY29wZTogWyAnc2NvcGUxJywgJ3Njb3BlMicgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChbICdwcm9nJywgSlNPTi5zdHJpbmdpZnkoY29tbWFuZCkgXSk7XG5cbiAgICAgICAgbmV3IE15U3RhY2soYXBwLCAnTXlTdGFjaycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhcHAucnVuKCkpIGFzIGN4YXBpLlN5bnRoZXNpemVSZXNwb25zZTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNwb25zZS5zdGFja3NbMF0ubWlzc2luZywge1xuICAgICAgICAgICAgXCJtaXNzaW5nLWNvbnRleHQta2V5XCI6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBcImN0eC1wcm92aWRlclwiLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgIFwiYXJnMVwiLFxuICAgICAgICAgICAgICAgIFwiYXJnMlwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc2NvcGU6IFtcbiAgICAgICAgICAgICAgICBcInNjb3BlMVwiLFxuICAgICAgICAgICAgICAgIFwic2NvcGUyXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1pc3NpbmctY29udGV4dC1rZXktMlwiOiB7XG4gICAgICAgICAgICBwcm92aWRlcjogXCJjdHgtcHJvdmlkZXJcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICBcImFyZzFcIixcbiAgICAgICAgICAgICAgICBcImFyZzJcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHNjb3BlOiBbXG4gICAgICAgICAgICAgICAgXCJzY29wZTFcIixcbiAgICAgICAgICAgICAgICBcInNjb3BlMlwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVxdWVzdHMgY2FuIGFsc28gYmUgYmFzZTY0IGVuY29kZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgdHlwZTogJ2xpc3QnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3AgPSBtYWluKCdiYXNlNjQ6JyArIG5ldyBCdWZmZXIoSlNPTi5zdHJpbmdpZnkocmVxKSkudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzcCwge1xuICAgICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN0YWNrMVwiLFxuICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIjEyMzQ1L3VzLWVhc3QtMVwiLFxuICAgICAgICAgICAgICAgICAgYWNjb3VudDogXCIxMjM0NVwiLFxuICAgICAgICAgICAgICAgICAgcmVnaW9uOiBcInVzLWVhc3QtMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzdGFjazJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnZmFpbHMgd2hlbiBiYXNlNjQgY2Fubm90IGJlIGVuY29kZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gbWFpbignYmFzZTY0OicpLCAvVW5leHBlY3RlZCBlbmQgb2YgSlNPTiBpbnB1dC8pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuXG5jbGFzcyBNeUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIG5ldyBSZXNvdXJjZSh0aGlzLCAncjEnLCB7IHR5cGU6ICdSZXNvdXJjZVR5cGUxJyB9KTtcbiAgICAgICAgbmV3IFJlc291cmNlKHRoaXMsICdyMicsIHsgdHlwZTogJ1Jlc291cmNlVHlwZTInLCBwcm9wZXJ0aWVzOiB7IEZyb21Db250ZXh0OiB0aGlzLmdldENvbnRleHQoJ2N0eDEnKSB9IH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBTdHJpcCBzdGFjayB0cmFjZXMgZnJvbSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBzdHJpcFN0YWNrVHJhY2VzKG1ldGE6IGN4YXBpLlN0YWNrTWV0YWRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhKSkge1xuICAgICAgICBtZXRhW2tleV0gPSBtZXRhW2tleV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnR5cGUgIT09ICdhd3M6Y2RrOmxvZ2ljYWxJZCcpO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsZ0NBQWdFO0FBQ2hFLG9DQUFpQztBQUVqQyxFQUFFO0FBQ0YsMkRBQTJEO0FBRTNELFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBYztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxDQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBRSxDQUFDLENBQUM7SUFFM0MscUNBQXFDO0lBRXJDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUYsSUFBSSxjQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4QyxJQUFJLGNBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzQyxvQkFBb0I7SUFD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QkFDekIsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLElBQUksRUFBRTtvQkFDSixNQUFNO29CQUNOLE1BQU07aUJBQ1A7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLFFBQVE7b0JBQ1IsUUFBUTtpQkFDVDthQUNBO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFDQUFxQyxDQUFDLElBQVU7UUFDOUMsTUFBTSxHQUFHLEdBQUc7WUFDVixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUM7UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUNuQixNQUFNLEVBQUU7Z0JBQ047b0JBQ0EsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxpQkFBaUI7d0JBQ3ZCLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixNQUFNLEVBQUUsV0FBVztxQkFDcEI7aUJBQ0E7Z0JBQ0Q7b0JBQ0EsSUFBSSxFQUFFLFFBQVE7aUJBQ2I7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxxQ0FBcUMsQ0FBQyxJQUFVO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIFJlc291cmNlLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJy4uL2xpYic7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuLi9saWIvYXBwJztcblxuLy9cbi8vIHRoaXMgaXMgdGhlIGlkaW9tYXRpYyB3YXkgd2Ugd2FudCBvdXIgYXBwcyB0byBsb29rIGxpa2U6XG5cbmZ1bmN0aW9uIG1haW4oLi4uYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBhcHAgPSBuZXcgQXBwKFsgJ215cHJvZycsIC4uLmFyZ3YgXSk7XG5cbiAgLy8gc3RhY2tzIGFyZSBjaGlsZHJlbiBvZiB0aGUgcHJvZ3JhbVxuXG4gIGNvbnN0IHN0YWNrMSA9IG5ldyBTdGFjayhhcHAsICdzdGFjazEnLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gIG5ldyBSZXNvdXJjZShzdGFjazEsICdzMWMxJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgUHJvcDE6ICdQcm9wMScgfSB9KTtcbiAgY29uc3QgcjIgPSBuZXcgUmVzb3VyY2Uoc3RhY2sxLCAnczFjMicsIHsgdHlwZTogJ0R1bW15UmVzb3VyY2UnLCBwcm9wZXJ0aWVzOiB7IEZvbzogMTIzIH0gfSk7XG5cbiAgY29uc3Qgc3RhY2syID0gbmV3IFN0YWNrKGFwcCwgJ3N0YWNrMicpO1xuICBuZXcgUmVzb3VyY2Uoc3RhY2syLCAnczJjMScsIHsgdHlwZTogJ0R1bW15UmVzb3VyY2UnLCBwcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSk7XG4gIGNvbnN0IGMxID0gbmV3IE15Q29uc3RydWN0KHN0YWNrMiwgJ3MxYzInKTtcblxuICAvLyBhZGQgc29tZSBtZXRhZGF0YVxuICBzdGFjazEuYWRkTWV0YWRhdGEoJ21ldGEnLCAxMTEpO1xuICByMi5hZGRXYXJuaW5nKCd3YXJuaW5nMScpO1xuICByMi5hZGRXYXJuaW5nKCd3YXJuaW5nMicpO1xuICBjMS5hZGRNZXRhZGF0YSgnbWV0YScsIHsga2V5OiAndmFsdWUnIH0pO1xuICBhcHAuYWRkTWV0YWRhdGEoJ2FwcGxldmVsJywgMTIzKTsgLy8gYXBwcyBjYW4gYWxzbyBoYXZlIG1ldGFkYXRhXG5cbiAgcmV0dXJuIEpTT04ucGFyc2UoYXBwLnJ1bigpKTtcbn1cblxuZnVuY3Rpb24gcnVuTWFpbihvYmplY3Q6IGN4YXBpLkNYUmVxdWVzdCkge1xuICByZXR1cm4gbWFpbihKU09OLnN0cmluZ2lmeShvYmplY3QpKTtcbn1cblxuZnVuY3Rpb24gcnVuTGlzdCgpIHtcbiAgcmV0dXJuIChtYWluKEpTT04uc3RyaW5naWZ5KHt0eXBlOiAnbGlzdCd9KSkgYXMgY3hhcGkuTGlzdFN0YWNrc1Jlc3BvbnNlKS5zdGFja3M7XG59XG5cbmZ1bmN0aW9uIHJ1bkNvbnNOb01ldGExKHN0YWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBjeGFwaS5TeW50aGVzaXplZFN0YWNrIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBtYWluKEpTT04uc3RyaW5naWZ5KHtcbiAgICB0eXBlOiAnc3ludGgnLFxuICAgIHN0YWNrczogW3N0YWNrXSxcbiAgICBjb250ZXh0XG4gIH0pKTtcbiAgZGVsZXRlIHJlc3BvbnNlLnN0YWNrc1swXS5tZXRhZGF0YTtcbiAgcmV0dXJuIHJlc3BvbnNlLnN0YWNrc1swXTtcbn1cblxuZXhwb3J0ID0ge1xuICAnZmlyc3QgbGluZSBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgY3ggaW50ZXJmYWNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICB0ZXN0Lm9rKChwcm9nLnJ1bigpKS5pbmRleE9mKCdDbG91ZEV4ZWN1dGFibGUvMS4wJykgPT09IDApO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd3aGVuIGV4ZWN1dGVkIHdpdGhvdXQgYXJndW1lbnRzLCBzaG93cyBpbnRlcmZhY2UgdmVyc2lvbiBhbmQgdXNhZ2UgdXNhZ2UnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgQXBwKFsgJ215cHJvZycgXSkucnVuKCk7XG5cbiAgICB0ZXN0Lm5vdEVxdWFsKG91dHB1dC5pbmRleE9mKCdteXByb2cnKSwgLTEsICdPdXRwdXQgc2hvdWxkIGNvbnRhaW4gcHJvZ3JhbSBuYW1lJyk7XG4gICAgdGVzdC5ub3RFcXVhbChvdXRwdXQuaW5kZXhPZignVXNhZ2UnKSwgLTEsICdPdXRwdXQgc2hvdWxkIGNvbnRhaW4gdXNhZ2UnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICBhc3luYyAndW5rbm93biBjb21tYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3InKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LnRocm93cyhcbiAgICAgICgpID0+IHsgbWFpbignZm9vJyk7IH1cbiAgICApO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdcImxpc3RcIiB3aXRoIG5vIHN0YWNrcyByZXR1cm5zIHdpdGggYW4gZW1wdHkgYXJyYXknKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgQXBwKFsgJ215cHJvZycsIEpTT04uc3RyaW5naWZ5KHt0eXBlOiAnbGlzdCd9KSBdKS5ydW4oKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChKU09OLnBhcnNlKG91dHB1dCkuc3RhY2tzLCBbXSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1wibGlzdFwiIHJldHVybnMgYSBsaXN0IG9mIGFsbCBzdGFja3MsIHdpdGggcmVnaW9uIGluZm9ybWF0aW9uIGlmIGV4aXN0cycodGVzdDogVGVzdCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICB0ZXN0LmRlZXBFcXVhbChydW5MaXN0KCksIFsgeyBuYW1lOiAnc3RhY2sxJywgZW52aXJvbm1lbnQ6IHsgbmFtZTogJzEyMzQ1L3VzLWVhc3QtMScsIHJlZ2lvbjogJ3VzLWVhc3QtMScsIGFjY291bnQ6ICcxMjM0NScgfSB9LCB7IG5hbWU6ICdzdGFjazInIH0gXSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2xpc3QoKSBjYW4gYmUgdXNlZCBwcm9ncmFtbWF0aWNhbGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLmxpc3RTdGFja3MoKSwgW10pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdcImNvbnNcIiB0aHJvd3MgaWYgdGhlIHN0YWNrIGRvIG5vdCBleGlzdCcodGVzdDogVGVzdCkge1xuICAgIHRlc3QudGhyb3dzKFxuICAgICAgKCkgPT4geyBydW5NYWluKHt0eXBlOiAnc3ludGgnLCBzdGFja3M6IFsnc3RhY2s5OSddIH0pOyB9XG4gICAgKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnXCJjb25zXCIgd2lsbCByZXR1cm4gcmVnaW9uIGluZm8gZm9yIHRoZSByZXF1aXJlZCBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG91dCA9IChydW5Db25zTm9NZXRhMSgnc3RhY2sxJykpO1xuICAgIHRlc3QuZXF1YWwoJ3N0YWNrMScsIG91dC5uYW1lKTtcbiAgICB0ZXN0LmVxdWFsKCcxMjM0NScsIG91dC5lbnZpcm9ubWVudCEuYWNjb3VudCk7XG4gICAgdGVzdC5lcXVhbCgndXMtZWFzdC0xJywgb3V0LmVudmlyb25tZW50IS5yZWdpb24pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdcImNvbnNcIiB3aWxsIHJldHVybiB0aGUgY2xvdWRmb3JtYXRpb24gdGVtcGxhdGUgZm9yIHRoZSByZXF1aXJlZCBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG91dDEgPSAocnVuQ29uc05vTWV0YTEoJ3N0YWNrMScpKS50ZW1wbGF0ZTtcbiAgICB0ZXN0LmRlZXBFcXVhbChvdXQxLCB7IFJlc291cmNlczpcbiAgICAgIHsgczFjMTogeyBUeXBlOiAnRHVtbXlSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgUHJvcDE6ICdQcm9wMScgfSB9LFxuICAgICAgICBzMWMyOiB7IFR5cGU6ICdEdW1teVJlc291cmNlJywgUHJvcGVydGllczogeyBGb286IDEyMyB9IH0gfSB9KTtcblxuICAgIGNvbnN0IG91dDIgPSAocnVuQ29uc05vTWV0YTEoJ3N0YWNrMicpKS50ZW1wbGF0ZTtcbiAgICB0ZXN0LmRlZXBFcXVhbChvdXQyLFxuICAgICAgeyBSZXNvdXJjZXM6XG4gICAgICB7IHMyYzE6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSxcbiAgICAgICAgczFjMnIxRDE3OTFDMDE6IHsgVHlwZTogJ1Jlc291cmNlVHlwZTEnIH0sXG4gICAgICAgIHMxYzJyMjVGNjg1RkZGOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUyJyB9IH0gfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc3ludGgobmFtZSkgY2FuIGJlIHVzZWQgcHJvZ3JhbW1hdGljYWxseScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2socHJvZywgJ015U3RhY2snKTtcbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUnIH0pO1xuXG4gICAgbGV0IHRocm93cztcbiAgICB0cnkge1xuICAgICAgcHJvZy5zeW50aGVzaXplU3RhY2tzKFsnZm9vJ10pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93cyA9IGUubWVzc2FnZTtcbiAgICB9XG4gICAgdGVzdC5vayh0aHJvd3MuaW5kZXhPZignQ2Fubm90IGZpbmQgc3RhY2sgZm9vJykgIT09IC0xKTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuc3ludGhlc2l6ZVN0YWNrKCdNeVN0YWNrJykudGVtcGxhdGUsXG4gICAgICB7IFJlc291cmNlczogeyBNeVJlc291cmNlOiB7IFR5cGU6ICdNeVJlc291cmNlVHlwZScgfSB9IH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzeW50aChuYW1lKSBhbHNvIGNvbGxlY3RzIG1ldGFkYXRhIGZyb20gYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBydW5NYWluKHt0eXBlOiAnc3ludGgnLCBzdGFja3M6IFsnc3RhY2sxJ119KSBhcyBjeGFwaS5TeW50aGVzaXplUmVzcG9uc2U7XG5cbiAgICBjb25zdCBvdXRwdXQgPSByZXNwb25zZS5zdGFja3NbMF0ubWV0YWRhdGE7XG4gICAgc3RyaXBTdGFja1RyYWNlcyhvdXRwdXQpO1xuXG4gICAgdGVzdC5vayhvdXRwdXRbJy8nXSwgJ2FwcC1sZXZlbCBtZXRhZGF0YSBpcyBpbmNsdWRlZCB1bmRlciBcIi5cIicpO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0WycvJ11bMF0udHlwZSwgJ2FwcGxldmVsJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy8nXVswXS5kYXRhLCAxMjMpO1xuXG4gICAgdGVzdC5vayhvdXRwdXRbJy9zdGFjazEnXSwgJ3RoZSBjb25zdHJ1Y3QgXCJzdGFjazFcIiBoYXMgbWV0YWRhdGEnKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMSddWzBdLnR5cGUsICdtZXRhJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEnXVswXS5kYXRhLCAxMTEpO1xuICAgIHRlc3Qub2sob3V0cHV0Wycvc3RhY2sxJ11bMF0udHJhY2UubGVuZ3RoID4gMCwgJ3RyYWNlIGNvbnRhaW5zIG11bHRpcGxlIGVudHJpZXMnKTtcblxuICAgIHRlc3Qub2sob3V0cHV0Wycvc3RhY2sxL3MxYzInXSk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEvczFjMiddLmxlbmd0aCwgMiwgJ3R3byBlbnRyaWVzJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEvczFjMiddWzBdLmRhdGEsICd3YXJuaW5nMScpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UyID0gcnVuTWFpbih7dHlwZTogJ3N5bnRoJywgc3RhY2tzOiBbJ3N0YWNrMiddfSkgYXMgY3hhcGkuU3ludGhlc2l6ZVJlc3BvbnNlO1xuICAgIGNvbnN0IG91dHB1dDIgPSByZXNwb25zZTIuc3RhY2tzWzBdLm1ldGFkYXRhO1xuXG4gICAgdGVzdC5vayhvdXRwdXQyWycvc3RhY2syL3MxYzInXSk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXQyWycvc3RhY2syL3MxYzInXVswXS50eXBlLCAnbWV0YScpO1xuICAgIHRlc3QuZGVlcEVxdWFsKG91dHB1dDJbJy9zdGFjazIvczFjMiddWzBdLmRhdGEsIHsga2V5OiAndmFsdWUnIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnRleHQgY2FuIGJlIHBhc3NlZCB1c2luZyB0aGUgLWMgb3B0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoWyAnbXlwcm9nJywgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdHlwZTogJ3N5bnRoJyxcbiAgICAgIHN0YWNrTmFtZTogJ3N0YWNrJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAga2V5MTogJ3ZhbDEnLFxuICAgICAgICBrZXkyOiAndmFsMidcbiAgICAgIH1cbiAgICB9KV0pO1xuICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuZ2V0Q29udGV4dCgna2V5MScpLCAndmFsMScpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuZ2V0Q29udGV4dCgna2V5MicpLCAndmFsMicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjb250ZXh0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBjYW4gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG91dHB1dCA9IHJ1bkNvbnNOb01ldGExKCdzdGFjazInLCB7IGN0eDE6ICdIRUxMTycgfSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChvdXRwdXQudGVtcGxhdGUsIHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBzMmMxOiB7XG4gICAgICAgIFR5cGU6IFwiRHVtbXlSZXNvdXJjZVwiLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvZzI6IFwiUHJvZzJcIlxuICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHMxYzJyMUQxNzkxQzAxOiB7XG4gICAgICAgIFR5cGU6IFwiUmVzb3VyY2VUeXBlMVwiXG4gICAgICAgIH0sXG4gICAgICAgIHMxYzJyMjVGNjg1RkZGOiB7XG4gICAgICAgIFR5cGU6IFwiUmVzb3VyY2VUeXBlMlwiLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRnJvbUNvbnRleHQ6IFwiSEVMTE9cIlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc2V0Q29udGV4dChrLHYpIGNhbiBiZSB1c2VkIHRvIHNldCBjb250ZXh0IHByb2dyYW1tYXRpY2FsbHknKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBwcm9nID0gbmV3IEFwcCgpO1xuICAgIHByb2cuc2V0Q29udGV4dCgnZm9vJywgJ2JhcicpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHByb2cuZ2V0Q29udGV4dCgnZm9vJyksICdiYXInKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc2V0Q29udGV4dChrLHYpIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgc3RhY2tzIGhhdmUgYmVlbiBhZGRlZCBiZWNhdXNlIHN0YWNrcyBtYXkgdXNlIHRoZSBjb250ZXh0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICBuZXcgU3RhY2socHJvZywgJ3MxJyk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gcHJvZy5zZXRDb250ZXh0KCdmb28nLCAnYmFyJykpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhcHAuc3ludGhlc2l6ZVN0YWNrKHN0YWNrKSBwZXJmb3JtcyB2YWxpZGF0aW9uIGZpcnN0IChhcHAudmFsaWRhdGVBbGwoKSkgYW5kIGlmIHRoZXJlIGFyZSBlcnJvcnMsIGl0IHJldHVybnMgdGhlIGVycm9ycycodGVzdDogVGVzdCkge1xuXG4gICAgY2xhc3MgQ2hpbGQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgICAgICByZXR1cm4gWyBgRXJyb3IgZnJvbSAke3RoaXMuaWR9YCBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFBhcmVudCBleHRlbmRzIFN0YWNrIHtcblxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcblxuICAgIGNvbnN0IHBhcmVudCA9IG5ldyBQYXJlbnQoYXBwLCAnUGFyZW50Jyk7XG4gICAgbmV3IENoaWxkKHBhcmVudCwgJ0MxJyk7XG4gICAgbmV3IENoaWxkKHBhcmVudCwgJ0MyJyk7XG5cbiAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICBhcHAuc3ludGhlc2l6ZVN0YWNrcyhbJ1BhcmVudCddKTtcbiAgICB9LCAvU3RhY2sgdmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9ycy8pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FwcC5zeW50aGVzaXplU3RhY2soc3RhY2spIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBtaXNzaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBjb21tYW5kOiBjeGFwaS5DWFJlcXVlc3QgPSB7XG4gICAgICB0eXBlOiAnc3ludGgnLFxuICAgICAgc3RhY2tzOiBbJ015U3RhY2snXVxuICAgIH07XG5cbiAgICBjbGFzcyBNeVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICAgICAgY29uc3RydWN0b3IocGFyZW50OiBBcHAsIG5hbWU6IHN0cmluZywgcHJvcHM/OiBTdGFja1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSwgcHJvcHMpO1xuXG4gICAgICAgIHRoaXMucmVwb3J0TWlzc2luZ0NvbnRleHQoJ21pc3NpbmctY29udGV4dC1rZXknLCB7XG4gICAgICAgICAgcHJvdmlkZXI6ICdjdHgtcHJvdmlkZXInLFxuICAgICAgICAgIGFyZ3M6IFsgJ2FyZzEnLCAnYXJnMicgXSxcbiAgICAgICAgICBzY29wZTogWyAnc2NvcGUxJywgJ3Njb3BlMicgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlcG9ydE1pc3NpbmdDb250ZXh0KCdtaXNzaW5nLWNvbnRleHQta2V5LTInLCB7XG4gICAgICAgICAgcHJvdmlkZXI6ICdjdHgtcHJvdmlkZXInLFxuICAgICAgICAgIGFyZ3M6IFsgJ2FyZzEnLCAnYXJnMicgXSxcbiAgICAgICAgICBzY29wZTogWyAnc2NvcGUxJywgJ3Njb3BlMicgXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFsgJ3Byb2cnLCBKU09OLnN0cmluZ2lmeShjb21tYW5kKSBdKTtcblxuICAgIG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhcHAucnVuKCkpIGFzIGN4YXBpLlN5bnRoZXNpemVSZXNwb25zZTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc3BvbnNlLnN0YWNrc1swXS5taXNzaW5nLCB7XG4gICAgICBcIm1pc3NpbmctY29udGV4dC1rZXlcIjoge1xuICAgICAgcHJvdmlkZXI6IFwiY3R4LXByb3ZpZGVyXCIsXG4gICAgICBhcmdzOiBbXG4gICAgICAgIFwiYXJnMVwiLFxuICAgICAgICBcImFyZzJcIlxuICAgICAgXSxcbiAgICAgIHNjb3BlOiBbXG4gICAgICAgIFwic2NvcGUxXCIsXG4gICAgICAgIFwic2NvcGUyXCJcbiAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm1pc3NpbmctY29udGV4dC1rZXktMlwiOiB7XG4gICAgICBwcm92aWRlcjogXCJjdHgtcHJvdmlkZXJcIixcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgXCJhcmcxXCIsXG4gICAgICAgIFwiYXJnMlwiXG4gICAgICBdLFxuICAgICAgc2NvcGU6IFtcbiAgICAgICAgXCJzY29wZTFcIixcbiAgICAgICAgXCJzY29wZTJcIlxuICAgICAgXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3JlcXVlc3RzIGNhbiBhbHNvIGJlIGJhc2U2NCBlbmNvZGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdHlwZTogJ2xpc3QnXG4gICAgfTtcbiAgICBjb25zdCByZXNwID0gbWFpbignYmFzZTY0OicgKyBuZXcgQnVmZmVyKEpTT04uc3RyaW5naWZ5KHJlcSkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzcCwge1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzdGFjazFcIixcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBuYW1lOiBcIjEyMzQ1L3VzLWVhc3QtMVwiLFxuICAgICAgICAgIGFjY291bnQ6IFwiMTIzNDVcIixcbiAgICAgICAgICByZWdpb246IFwidXMtZWFzdC0xXCJcbiAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgIG5hbWU6IFwic3RhY2syXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2ZhaWxzIHdoZW4gYmFzZTY0IGNhbm5vdCBiZSBlbmNvZGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gbWFpbignYmFzZTY0OicpLCAvVW5leHBlY3RlZCBlbmQgb2YgSlNPTiBpbnB1dC8pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuXG5jbGFzcyBNeUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgbmV3IFJlc291cmNlKHRoaXMsICdyMScsIHsgdHlwZTogJ1Jlc291cmNlVHlwZTEnIH0pO1xuICAgIG5ldyBSZXNvdXJjZSh0aGlzLCAncjInLCB7IHR5cGU6ICdSZXNvdXJjZVR5cGUyJywgcHJvcGVydGllczogeyBGcm9tQ29udGV4dDogdGhpcy5nZXRDb250ZXh0KCdjdHgxJykgfSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHN0YWNrIHRyYWNlcyBmcm9tIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHN0cmlwU3RhY2tUcmFjZXMobWV0YTogY3hhcGkuU3RhY2tNZXRhZGF0YSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhKSkge1xuICAgIG1ldGFba2V5XSA9IG1ldGFba2V5XS5maWx0ZXIoZW50cnkgPT4gZW50cnkudHlwZSAhPT0gJ2F3czpjZGs6bG9naWNhbElkJyk7XG4gIH1cbn1cbiJdfQ==

@@ -62,2 +62,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5Q0FBMEM7QUFFMUMsZ0NBQXVIO0FBMEV2SCxTQUFTLFFBQVEsQ0FBQyxHQUFRO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVk7SUFDcEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFqRkQsaUJBQVM7SUFDTCwyRkFBMkYsQ0FBQyxJQUFVO1FBQ2xHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEcsTUFBTSxHQUFHLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGdFQUFnRSxDQUFDLElBQVU7UUFDdkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRyxNQUFNLE1BQU0sR0FBRyxJQUFJLDhCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FB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QyxDQUFDO1FBRTFFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sT0FBTyxHQUE4QixNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekgsTUFBTSxRQUFRLEdBQThCLE1BQU0sQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXpJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFLLE9BQU8sQ0FBQyxJQUFlLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxDQUFDLENBQUMsQ0FBQztRQUN6SCxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsSUFBSyxRQUFRLENBQUMsSUFBZSxDQUFDLFFBQVEsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDLENBQUM7UUFFbkgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQXBwLCBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIsIENvbnN0cnVjdCwgTWV0YWRhdGFFbnRyeSwgcmVzb2x2ZSwgU1NNUGFyYW1ldGVyUHJvdmlkZXIsIFN0YWNrIH0gZnJvbSAnLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAgICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgcmV0dXJucyBhIGxpc3Qgd2l0aCBkdW1teSB2YWx1ZXMgaWYgdGhlIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgICAgIGNvbnN0IGF6cyA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgWydkdW1teTFhJywgJ2R1bW15MWInLCAnZHVtbXkxYyddKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgd2lsbCByZXR1cm4gY29udGV4dCBsaXN0IGlmIGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChiZWZvcmUsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrKTtcblxuICAgICAgICBzdGFjay5zZXRDb250ZXh0KGtleSwgWyd1cy1lYXN0LTFhJywgJ3VzLWVhc3QtMWInXSk7XG5cbiAgICAgICAgY29uc3QgYXpzID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgWyd1cy1lYXN0LTFhJywgJ3VzLWVhc3QtMWInXSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgd2lsbCBjb21wbGFpbiBpZiBub3QgZ2l2ZW4gYSBsaXN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICAgICAgY29uc3QgYmVmb3JlID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGJlZm9yZSwgWyAnZHVtbXkxYScsICdkdW1teTFiJywgJ2R1bW15MWMnIF0pO1xuICAgICAgICBjb25zdCBrZXkgPSBleHBlY3RlZENvbnRleHRLZXkoc3RhY2spO1xuXG4gICAgICAgIHN0YWNrLnNldENvbnRleHQoa2V5LCAnbm90LWEtbGlzdCcpO1xuXG4gICAgICAgIHRlc3QudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1NTTSBwYXJhbWV0ZXIgcHJvdmlkZXIgd2lsbCByZXR1cm4gY29udGV4dCB2YWx1ZXMgaWYgYXZhaWxhYmxlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICAgICAgbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHN0YWNrKS5nZXRTdHJpbmcoJ3Rlc3QnKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrKTtcblxuICAgICAgICBzdGFjay5zZXRDb250ZXh0KGtleSwgJ2FiYycpO1xuXG4gICAgICAgIGNvbnN0IGF6cyA9IHJlc29sdmUobmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHN0YWNrKS5nZXRTdHJpbmcoJ3Rlc3QnKSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgJ2FiYycpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnUmV0dXJuIGRlZmF1bHQgdmFsdWVzIGlmIFwiZW52XCIgaXMgdW5kZWZpbmVkIHRvIGZhY2lsaXRhdGUgdW5pdCB0ZXN0cywgYnV0IGFsc28gZXhwZWN0IG1ldGFkYXRhIHRvIGluY2x1ZGUgXCJlcnJvclwiIG1lc3NhZ2VzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAndGVzdC1zdGFjaycpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ0NoaWxkQ29uc3RydWN0Jyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwobmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXMsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwobmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKGNoaWxkKS5nZXRTdHJpbmcoJ2ZvbycpLCAnZHVtbXknKTtcblxuICAgICAgICBjb25zdCBvdXRwdXQgPSBhcHAuc3ludGhlc2l6ZVN0YWNrKHN0YWNrLmlkKTtcblxuICAgICAgICBjb25zdCBhekVycm9yOiBNZXRhZGF0YUVudHJ5IHwgdW5kZWZpbmVkID0gb3V0cHV0Lm1ldGFkYXRhWycvdGVzdC1zdGFjayddLmZpbmQoeCA9PiB4LnR5cGUgPT09IGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSk7XG4gICAgICAgIGNvbnN0IHNzbUVycm9yOiBNZXRhZGF0YUVudHJ5IHwgdW5kZWZpbmVkID0gb3V0cHV0Lm1ldGFkYXRhWycvdGVzdC1zdGFjay9DaGlsZENvbnN0cnVjdCddLmZpbmQoeCA9PiB4LnR5cGUgPT09IGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSk7XG5cbiAgICAgICAgdGVzdC5vayhhekVycm9yICYmIChhekVycm9yLmRhdGEgYXMgc3RyaW5nKS5pbmNsdWRlcygnQ2Fubm90IGRldGVybWluZSBzY29wZSBmb3IgY29udGV4dCBwcm92aWRlciBhdmFpbGFiaWxpdHktem9uZXMuJykpO1xuICAgICAgICB0ZXN0Lm9rKHNzbUVycm9yICYmIChzc21FcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgc3NtW1wiZm9vXCJdLicpKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gZmlyc3RLZXkob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopWzBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZXhwZWN0ZWQgY29udGV4dCBrZXkgZnJvbSBhIHN0YWNrIHdpdGggbWlzc2luZyBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIGV4cGVjdGVkQ29udGV4dEtleShzdGFjazogU3RhY2spOiBzdHJpbmcge1xuICAgIHJldHVybiBmaXJzdEtleShzdGFjay5taXNzaW5nQ29udGV4dCk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5Q0FBMEM7QUFFMUMsZ0NBQXVIO0FBMEV2SCxTQUFTLFFBQVEsQ0FBQyxHQUFRO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVk7SUFDdEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFqRkQsaUJBQVM7SUFDUCwyRkFBMkYsQ0FBQyxJQUFVO1FBQ3BHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEcsTUFBTSxHQUFHLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0VBQWdFLENBQUMsSUFBVTtRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFD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QUM7UUFFMUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0MsTUFBTSxPQUFPLEdBQThCLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6SCxNQUFNLFFBQVEsR0FBOEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFekksSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUssT0FBTyxDQUFDLElBQWUsQ0FBQyxRQUFRLENBQUMsaUVBQWlFLENBQUMsQ0FBQyxDQUFDO1FBQ3pILElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFLLFFBQVEsQ0FBQyxJQUFlLENBQUMsUUFBUSxDQUFDLHlEQUF5RCxDQUFDLENBQUMsQ0FBQztRQUVuSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjeGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFwcCwgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyLCBDb25zdHJ1Y3QsIE1ldGFkYXRhRW50cnksIHJlc29sdmUsIFNTTVBhcmFtZXRlclByb3ZpZGVyLCBTdGFjayB9IGZyb20gJy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ0F2YWlsYWJpbGl0eVpvbmVQcm92aWRlciByZXR1cm5zIGEgbGlzdCB3aXRoIGR1bW15IHZhbHVlcyBpZiB0aGUgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIGNvbnN0IGF6cyA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoYXpzLCBbJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJ10pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgd2lsbCByZXR1cm4gY29udGV4dCBsaXN0IGlmIGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICBjb25zdCBiZWZvcmUgPSBuZXcgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHN0YWNrKS5hdmFpbGFiaWxpdHlab25lcztcbiAgICB0ZXN0LmRlZXBFcXVhbChiZWZvcmUsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICBjb25zdCBrZXkgPSBleHBlY3RlZENvbnRleHRLZXkoc3RhY2spO1xuXG4gICAgc3RhY2suc2V0Q29udGV4dChrZXksIFsndXMtZWFzdC0xYScsICd1cy1lYXN0LTFiJ10pO1xuXG4gICAgY29uc3QgYXpzID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgdGVzdC5kZWVwRXF1YWwoYXpzLCBbJ3VzLWVhc3QtMWEnLCAndXMtZWFzdC0xYiddKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgd2lsbCBjb21wbGFpbiBpZiBub3QgZ2l2ZW4gYSBsaXN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIGNvbnN0IGJlZm9yZSA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuICAgIHRlc3QuZGVlcEVxdWFsKGJlZm9yZSwgWyAnZHVtbXkxYScsICdkdW1teTFiJywgJ2R1bW15MWMnIF0pO1xuICAgIGNvbnN0IGtleSA9IGV4cGVjdGVkQ29udGV4dEtleShzdGFjayk7XG5cbiAgICBzdGFjay5zZXRDb250ZXh0KGtleSwgJ25vdC1hLWxpc3QnKTtcblxuICAgIHRlc3QudGhyb3dzKFxuICAgICAgKCkgPT4gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXNcbiAgICApO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1NTTSBwYXJhbWV0ZXIgcHJvdmlkZXIgd2lsbCByZXR1cm4gY29udGV4dCB2YWx1ZXMgaWYgYXZhaWxhYmxlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIG5ldyBTU01QYXJhbWV0ZXJQcm92aWRlcihzdGFjaykuZ2V0U3RyaW5nKCd0ZXN0Jyk7XG4gICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrKTtcblxuICAgIHN0YWNrLnNldENvbnRleHQoa2V5LCAnYWJjJyk7XG5cbiAgICBjb25zdCBhenMgPSByZXNvbHZlKG5ldyBTU01QYXJhbWV0ZXJQcm92aWRlcihzdGFjaykuZ2V0U3RyaW5nKCd0ZXN0JykpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgJ2FiYycpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1JldHVybiBkZWZhdWx0IHZhbHVlcyBpZiBcImVudlwiIGlzIHVuZGVmaW5lZCB0byBmYWNpbGl0YXRlIHVuaXQgdGVzdHMsIGJ1dCBhbHNvIGV4cGVjdCBtZXRhZGF0YSB0byBpbmNsdWRlIFwiZXJyb3JcIiBtZXNzYWdlcycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICd0ZXN0LXN0YWNrJyk7XG5cbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdDaGlsZENvbnN0cnVjdCcpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwobmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXMsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoY2hpbGQpLmdldFN0cmluZygnZm9vJyksICdkdW1teScpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjay5pZCk7XG5cbiAgICBjb25zdCBhekVycm9yOiBNZXRhZGF0YUVudHJ5IHwgdW5kZWZpbmVkID0gb3V0cHV0Lm1ldGFkYXRhWycvdGVzdC1zdGFjayddLmZpbmQoeCA9PiB4LnR5cGUgPT09IGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSk7XG4gICAgY29uc3Qgc3NtRXJyb3I6IE1ldGFkYXRhRW50cnkgfCB1bmRlZmluZWQgPSBvdXRwdXQubWV0YWRhdGFbJy90ZXN0LXN0YWNrL0NoaWxkQ29uc3RydWN0J10uZmluZCh4ID0+IHgudHlwZSA9PT0gY3hhcGkuRVJST1JfTUVUQURBVEFfS0VZKTtcblxuICAgIHRlc3Qub2soYXpFcnJvciAmJiAoYXpFcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgYXZhaWxhYmlsaXR5LXpvbmVzLicpKTtcbiAgICB0ZXN0Lm9rKHNzbUVycm9yICYmIChzc21FcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgc3NtW1wiZm9vXCJdLicpKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxufTtcblxuZnVuY3Rpb24gZmlyc3RLZXkob2JqOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVswXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGV4cGVjdGVkIGNvbnRleHQga2V5IGZyb20gYSBzdGFjayB3aXRoIG1pc3NpbmcgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBleHBlY3RlZENvbnRleHRLZXkoc3RhY2s6IFN0YWNrKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpcnN0S2V5KHN0YWNrLm1pc3NpbmdDb250ZXh0KTtcbn1cbiJdfQ==

@@ -34,2 +34,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUEwRjtBQUUxRixnQ0FBb0M7QUFFcEMsaUJBQVM7SUFDTCw0REFBNEQsQ0FBQyxJQUFVO1FBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsMkhBQTJILENBQUMsSUFBVTtRQUNsSSxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsRUFBRSxDQUFDO1FBRXRCLEdBQUcsQ0FBQyxVQUFVLENBQUMsb0NBQTJCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsVUFBVSxDQUFDLG1DQUEwQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELDBGQUEwRixDQUFDLElBQVU7UUFDakcsTUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFHLEVBQUUsQ0FBQztRQUV0QixHQUFHLENBQUMsVUFBVSxDQUFDLG9DQUEyQixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDbEUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxtQ0FBMEIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFRkFVTFRfQUNDT1VOVF9DT05URVhUX0tFWSwgREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVkgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tICcuLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ0J5IGRlZmF1bHQsIGVudmlyb25tZW50IHJlZ2lvbiBhbmQgYWNjb3VudCBhcmUgbm90IGRlZmluZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgdGVzdC5vayhzdGFjay5lbnYpO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrLmVudi5hY2NvdW50LCBudWxsKTtcbiAgICAgICAgdGVzdC5lcXVhbChzdGFjay5lbnYucmVnaW9uLCBudWxsKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdEZWZhdWx0IGFjY291bnQgYW5kIHJlZ2lvbiBjYW4gYmUgc2V0IGluIGNvbnRleHQgKGBhd3M6Y2RrOnRvb2xraXQ6ZGVmYXVsdC1hY2NvdW50YCBhbmQgYGF3czpjZGs6dG9vbGtpdDpkZWZhdWx0LXJlZ2lvbmApJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcblxuICAgICAgICBhcHAuc2V0Q29udGV4dChERUZBVUxUX0FDQ09VTlRfQ09OVEVYVF9LRVksICdteS1kZWZhdWx0LWFjY291bnQnKTtcbiAgICAgICAgYXBwLnNldENvbnRleHQoREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVksICdteS1kZWZhdWx0LXJlZ2lvbicpO1xuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCk7XG5cbiAgICAgICAgdGVzdC5lcXVhbChzdGFjay5lbnYuYWNjb3VudCwgJ215LWRlZmF1bHQtYWNjb3VudCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrLmVudi5yZWdpb24sICdteS1kZWZhdWx0LXJlZ2lvbicpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnSWYgb25seSBgZW52LnJlZ2lvbmAgb3IgYGVudi5hY2NvdW50YCBhcmUgc3BlY2lmaWVkLCBkZWZhdWx0cyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBvdGhlcicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbiAgICAgICAgYXBwLnNldENvbnRleHQoREVGQVVMVF9BQ0NPVU5UX0NPTlRFWFRfS0VZLCAnbXktZGVmYXVsdC1hY2NvdW50Jyk7XG4gICAgICAgIGFwcC5zZXRDb250ZXh0KERFRkFVTFRfUkVHSU9OX0NPTlRFWFRfS0VZLCAnbXktZGVmYXVsdC1yZWdpb24nKTtcblxuICAgICAgICBjb25zdCBzdGFjazEgPSBuZXcgU3RhY2soYXBwLCAnUzEnLCB7IGVudjogeyByZWdpb246ICdvbmx5LXJlZ2lvbicgfSB9KTtcbiAgICAgICAgY29uc3Qgc3RhY2syID0gbmV3IFN0YWNrKGFwcCwgJ1MyJywgeyBlbnY6IHsgYWNjb3VudDogJ29ubHktYWNjb3VudCcgfSB9KTtcblxuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrMS5lbnYuYWNjb3VudCwgJ215LWRlZmF1bHQtYWNjb3VudCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrMS5lbnYucmVnaW9uLCAnb25seS1yZWdpb24nKTtcblxuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrMi5lbnYuYWNjb3VudCwgJ29ubHktYWNjb3VudCcpO1xuICAgICAgICB0ZXN0LmVxdWFsKHN0YWNrMi5lbnYucmVnaW9uLCAnbXktZGVmYXVsdC1yZWdpb24nKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxufSBhcyBhbnk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUEwRjtBQUUxRixnQ0FBb0M7QUFFcEMsaUJBQVM7SUFDUCw0REFBNEQsQ0FBQyxJQUFVO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCwySEFBMkgsQ0FBQyxJQUFVO1FBQ3BJLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxFQUFFLENBQUM7UUFFdEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxvQ0FBMkIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxVQUFVLENBQUMsbUNBQTBCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVoRSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCwwRkFBMEYsQ0FBQyxJQUFVO1FBQ25HLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxFQUFFLENBQUM7UUFFdEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxvQ0FBMkIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxVQUFVLENBQUMsbUNBQTBCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0ssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFRkFVTFRfQUNDT1VOVF9DT05URVhUX0tFWSwgREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVkgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tICcuLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICdCeSBkZWZhdWx0LCBlbnZpcm9ubWVudCByZWdpb24gYW5kIGFjY291bnQgYXJlIG5vdCBkZWZpbmVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICB0ZXN0Lm9rKHN0YWNrLmVudik7XG4gICAgdGVzdC5lcXVhbChzdGFjay5lbnYuYWNjb3VudCwgbnVsbCk7XG4gICAgdGVzdC5lcXVhbChzdGFjay5lbnYucmVnaW9uLCBudWxsKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnRGVmYXVsdCBhY2NvdW50IGFuZCByZWdpb24gY2FuIGJlIHNldCBpbiBjb250ZXh0IChgYXdzOmNkazp0b29sa2l0OmRlZmF1bHQtYWNjb3VudGAgYW5kIGBhd3M6Y2RrOnRvb2xraXQ6ZGVmYXVsdC1yZWdpb25gKScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcblxuICAgIGFwcC5zZXRDb250ZXh0KERFRkFVTFRfQUNDT1VOVF9DT05URVhUX0tFWSwgJ215LWRlZmF1bHQtYWNjb3VudCcpO1xuICAgIGFwcC5zZXRDb250ZXh0KERFRkFVTFRfUkVHSU9OX0NPTlRFWFRfS0VZLCAnbXktZGVmYXVsdC1yZWdpb24nKTtcblxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCk7XG5cbiAgICB0ZXN0LmVxdWFsKHN0YWNrLmVudi5hY2NvdW50LCAnbXktZGVmYXVsdC1hY2NvdW50Jyk7XG4gICAgdGVzdC5lcXVhbChzdGFjay5lbnYucmVnaW9uLCAnbXktZGVmYXVsdC1yZWdpb24nKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdJZiBvbmx5IGBlbnYucmVnaW9uYCBvciBgZW52LmFjY291bnRgIGFyZSBzcGVjaWZpZWQsIGRlZmF1bHRzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIG90aGVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuXG4gICAgYXBwLnNldENvbnRleHQoREVGQVVMVF9BQ0NPVU5UX0NPTlRFWFRfS0VZLCAnbXktZGVmYXVsdC1hY2NvdW50Jyk7XG4gICAgYXBwLnNldENvbnRleHQoREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVksICdteS1kZWZhdWx0LXJlZ2lvbicpO1xuXG4gICAgY29uc3Qgc3RhY2sxID0gbmV3IFN0YWNrKGFwcCwgJ1MxJywgeyBlbnY6IHsgcmVnaW9uOiAnb25seS1yZWdpb24nIH0gfSk7XG4gICAgY29uc3Qgc3RhY2syID0gbmV3IFN0YWNrKGFwcCwgJ1MyJywgeyBlbnY6IHsgYWNjb3VudDogJ29ubHktYWNjb3VudCcgfSB9KTtcblxuICAgIHRlc3QuZXF1YWwoc3RhY2sxLmVudi5hY2NvdW50LCAnbXktZGVmYXVsdC1hY2NvdW50Jyk7XG4gICAgdGVzdC5lcXVhbChzdGFjazEuZW52LnJlZ2lvbiwgJ29ubHktcmVnaW9uJyk7XG5cbiAgICB0ZXN0LmVxdWFsKHN0YWNrMi5lbnYuYWNjb3VudCwgJ29ubHktYWNjb3VudCcpO1xuICAgIHRlc3QuZXF1YWwoc3RhY2syLmVudi5yZWdpb24sICdteS1kZWZhdWx0LXJlZ2lvbicpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59IGFzIGFueTtcbiJdfQ==

Sorry, the diff of this file is not supported yet

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