Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

tsickle

Package Overview
Dependencies
Maintainers
4
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tsickle - npm Package Compare versions

Comparing version 0.37.1 to 0.38.0

6

package.json
{
"name": "tsickle",
"version": "0.37.1",
"version": "0.38.0",
"description": "Transpile TypeScript code to JavaScript with Closure annotations.",

@@ -14,3 +14,3 @@ "main": "src/tsickle.js",

"peerDependencies": {
"typescript": "~3.6.4"
"typescript": "~3.7.2"
},

@@ -34,3 +34,3 @@ "devDependencies": {

"tslint": "5.11.0",
"typescript": "3.6.4"
"typescript": "3.7.2"
},

@@ -37,0 +37,0 @@ "scripts": {

@@ -21,2 +21,10 @@ /**

/** @typedef {!IteratorIterable} */
var IterableIterator;
/** @typedef {!IIterableResult} */
var IteratorYieldResult;
/** @typedef {!IIterableResult} */
var IteratorReturnResult;
/** @typedef {!HTMLCollection} */

@@ -96,4 +104,4 @@ var HTMLCollectionOf;

* @interface
* @extends{WorkerGlobalScope}
* @extends{Window}
* @extends {WorkerGlobalScope}
* @extends {Window}
*/

@@ -104,1 +112,6 @@ var WindowOrWorkerGlobalScope;

function CanvasDrawImage() {}
/** @constructor */
function CryptoKey() {};
/** @constructor */
function CryptoKeyPair() {};

@@ -19,1 +19,31 @@ /**

export declare function hasExportingDecorator(node: ts.Node, typeChecker: ts.TypeChecker): boolean | undefined;
/**
* A transform pass that adds goog.reflect.objectProperty calls to the property
* name string literals that are emitted as part of TypeScript's default
* decorator output.
*
* goog.reflect.objectProperty is a special function that is recognized by
* Closure Compiler. It is called like goog.reflect.objectProperty('prop', obj)
* and it is compiled to a string literal that's the property named 'prop' on
* the obj value.
*
* This way, runtime decorators can use the property names (e.g. to register
* the property as a getter/setter pair) while still being compatible with
* Closure Compiler's property renaming.
*
* Transforms:
*
* tslib_1.__decorate([
* decorator,
* tslib_1.__metadata("design:type", Object)
* ], Foo.prototype, "prop", void 0);
*
* Into:
*
* tslib_1.__decorate([
* decorator,
* tslib_1.__metadata("design:type", Object)
* ], Foo.prototype,
* __googReflect.objectProperty("prop", Foo.prototype), void 0);
*/
export declare function transformDecoratorsOutputForClosurePropertyRenaming(diagnostics: ts.Diagnostic[]): (context: ts.TransformationContext) => ts.Transformer<ts.SourceFile>;

@@ -71,3 +71,121 @@ /**

}
/**
* A transform pass that adds goog.reflect.objectProperty calls to the property
* name string literals that are emitted as part of TypeScript's default
* decorator output.
*
* goog.reflect.objectProperty is a special function that is recognized by
* Closure Compiler. It is called like goog.reflect.objectProperty('prop', obj)
* and it is compiled to a string literal that's the property named 'prop' on
* the obj value.
*
* This way, runtime decorators can use the property names (e.g. to register
* the property as a getter/setter pair) while still being compatible with
* Closure Compiler's property renaming.
*
* Transforms:
*
* tslib_1.__decorate([
* decorator,
* tslib_1.__metadata("design:type", Object)
* ], Foo.prototype, "prop", void 0);
*
* Into:
*
* tslib_1.__decorate([
* decorator,
* tslib_1.__metadata("design:type", Object)
* ], Foo.prototype,
* __googReflect.objectProperty("prop", Foo.prototype), void 0);
*/
function transformDecoratorsOutputForClosurePropertyRenaming(diagnostics) {
return (context) => {
const result = (sourceFile) => {
let nodeNeedingGoogReflect = undefined;
const visitor = (node) => {
const replacementNode = rewriteDecorator(node, context);
if (replacementNode) {
nodeNeedingGoogReflect = node;
return replacementNode;
}
return ts.visitEachChild(node, visitor, context);
};
const updatedSourceFile = ts.visitNode(sourceFile, visitor);
if (nodeNeedingGoogReflect !== undefined) {
const statements = [...updatedSourceFile.statements];
const googModuleIndex = statements.findIndex(isGoogModuleStatement);
if (googModuleIndex === -1) {
transformer_util_1.reportDiagnostic(diagnostics, nodeNeedingGoogReflect, 'Internal tsickle error: could not find goog.module statement to import __tsickle_googReflect for decorator compilation.');
return sourceFile;
}
const googRequireReflectObjectProperty = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration('__tsickle_googReflect', undefined, ts.createCall(ts.createPropertyAccess(ts.createIdentifier('goog'), 'require'), undefined, [ts.createStringLiteral('goog.reflect')]))], ts.NodeFlags.Const));
// The boilerplate we produce has a goog.module line, then two related
// lines dealing with the `module` variable. Insert our goog.require
// after that to avoid visually breaking up the module info, and to be
// with the rest of the goog.require statements.
statements.splice(googModuleIndex + 3, 0, googRequireReflectObjectProperty);
updatedSourceFile.statements =
ts.setTextRange(ts.createNodeArray(statements), updatedSourceFile.statements);
}
return updatedSourceFile;
};
return result;
};
}
exports.transformDecoratorsOutputForClosurePropertyRenaming = transformDecoratorsOutputForClosurePropertyRenaming;
/**
* If `node` is a call to the tslib __decorate function, this returns a modified
* call with the string argument replaced with
* `__tsickle_googReflect.objectProperty('prop', TheClass.prototype)`.
*
* Returns undefined if no modification is necessary.
*/
function rewriteDecorator(node, context) {
if (!ts.isCallExpression(node)) {
return;
}
const identifier = node.expression;
if (!ts.isIdentifier(identifier) || identifier.text !== '__decorate') {
return;
}
const args = [...node.arguments];
if (args.length !== 4) {
// Some decorators, like class decorators, have fewer arguments, and don't
// need help to be renaming-safe.
return;
}
const untypedFieldNameLiteral = args[2];
if (!ts.isStringLiteral(untypedFieldNameLiteral)) {
// This is allowed, for example:
//
// const prop = Symbol();
// class Foo {
// @decorate [prop] = 'val';
// }
//
// Nothing for us to do in that case.
return;
}
const fieldNameLiteral = untypedFieldNameLiteral;
args[2] = ts.createCall(ts.createPropertyAccess(ts.createIdentifier('__tsickle_googReflect'), 'objectProperty'), undefined, [ts.createStringLiteral(fieldNameLiteral.text), ts.getMutableClone(args[1])]);
return ts.updateCall(node, node.expression, node.typeArguments, args);
}
function isGoogModuleStatement(statement) {
if (!ts.isExpressionStatement(statement)) {
return false;
}
const expr = statement.expression;
if (!ts.isCallExpression(expr)) {
return false;
}
if (!ts.isPropertyAccessExpression(expr.expression)) {
return false;
}
const goog = expr.expression.expression;
if (!ts.isIdentifier(goog)) {
return false;
}
return goog.text === 'goog' && expr.expression.name.text === 'module';
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBRWpDLG1FQUF5RDtJQUV6RDs7T0FFRztJQUNILFNBQWdCLHdCQUF3QixDQUNwQyxTQUF1QixFQUFFLFdBQTJCO1FBQ3RELDZFQUE2RTtRQUM3RSxJQUFJLElBQUksR0FBWSxTQUFTLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUN2RixJQUFJLEdBQUksSUFBeUMsQ0FBQyxVQUFVLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsdURBQXVEO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELE9BQU8sTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBbkJELDREQW1CQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWEsRUFBRSxXQUEyQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUhELHNEQUdDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLG9CQUFvQixDQUFDLFNBQXVCLEVBQUUsV0FBMkI7UUFDaEYsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLHdDQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELEtBQUssTUFBTSxFQUFDLElBQUksRUFBQyxJQUFJLEtBQUssRUFBRTtnQkFDMUIsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0QWxsTGVhZGluZ0NvbW1lbnRzfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGdpdmVuIGRlY29yYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhcbiAgICBkZWNvcmF0b3I6IHRzLkRlY29yYXRvciwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogdHMuRGVjbGFyYXRpb25bXSB7XG4gIC8vIFdhbGsgZG93biB0aGUgZXhwcmVzc2lvbiB0byBmaW5kIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gIGxldCBub2RlOiB0cy5Ob2RlID0gZGVjb3JhdG9yO1xuICB3aGlsZSAobm9kZS5raW5kICE9PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkRlY29yYXRvciB8fCBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIG5vZGUgPSAobm9kZSBhcyB0cy5EZWNvcmF0b3IgfCB0cy5DYWxsRXhwcmVzc2lvbikuZXhwcmVzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgZG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzIHR5cGUgb2YgZGVjb3JhdG9yLlxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuICBpZiAoIWRlY1N5bSkgcmV0dXJuIFtdO1xuICBpZiAoZGVjU3ltLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpIHtcbiAgICBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKGRlY1N5bSk7XG4gIH1cbiAgcmV0dXJuIGRlY1N5bS5nZXREZWNsYXJhdGlvbnMoKSB8fCBbXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgbm9kZSBoYXMgYW4gZXhwb3J0aW5nIGRlY29yYXRvciAgKGkuZS4sIGEgZGVjb3JhdG9yIHdpdGggQEV4cG9ydERlY29yYXRlZEl0ZW1zXG4gKiBpbiBpdHMgSlNEb2MpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwb3J0aW5nRGVjb3JhdG9yKG5vZGU6IHRzLk5vZGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gbm9kZS5kZWNvcmF0b3JzICYmXG4gICAgICBub2RlLmRlY29yYXRvcnMuc29tZShkZWNvcmF0b3IgPT4gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yLCB0eXBlQ2hlY2tlcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVjb3JhdG9yIGhhcyBhbiBARXhwb3J0RGVjb3JhdGVkSXRlbXMgZGlyZWN0aXZlIGluIGl0cyBKU0RvYy5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gZ2V0RGVjb3JhdG9yRGVjbGFyYXRpb25zKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpLnNvbWUoZGVjbGFyYXRpb24gPT4ge1xuICAgIGNvbnN0IHJhbmdlID0gZ2V0QWxsTGVhZGluZ0NvbW1lbnRzKGRlY2xhcmF0aW9uKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3RleHR9IG9mIHJhbmdlKSB7XG4gICAgICBpZiAoL0BFeHBvcnREZWNvcmF0ZWRJdGVtc1xcYi8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBRWpDLG1FQUEyRTtJQUUzRTs7T0FFRztJQUNILFNBQWdCLHdCQUF3QixDQUNwQyxTQUF1QixFQUFFLFdBQTJCO1FBQ3RELDZFQUE2RTtRQUM3RSxJQUFJLElBQUksR0FBWSxTQUFTLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUN2RixJQUFJLEdBQUksSUFBeUMsQ0FBQyxVQUFVLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsdURBQXVEO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELE9BQU8sTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBbkJELDREQW1CQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWEsRUFBRSxXQUEyQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUhELHNEQUdDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLG9CQUFvQixDQUFDLFNBQXVCLEVBQUUsV0FBMkI7UUFDaEYsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLHdDQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELEtBQUssTUFBTSxFQUFDLElBQUksRUFBQyxJQUFJLEtBQUssRUFBRTtnQkFDMUIsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsU0FBZ0IsbURBQW1ELENBQUMsV0FBNEI7UUFDOUYsT0FBTyxDQUFDLE9BQWlDLEVBQUUsRUFBRTtZQUMzQyxNQUFNLE1BQU0sR0FBa0MsQ0FBQyxVQUF5QixFQUFFLEVBQUU7Z0JBQzFFLElBQUksc0JBQXNCLEdBQXNCLFNBQVMsQ0FBQztnQkFDMUQsTUFBTSxPQUFPLEdBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDbkMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN4RCxJQUFJLGVBQWUsRUFBRTt3QkFDbkIsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO3dCQUM5QixPQUFPLGVBQWUsQ0FBQztxQkFDeEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQztnQkFDRixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLHNCQUFzQixLQUFLLFNBQVMsRUFBRTtvQkFDeEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ3BFLElBQUksZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUMxQixtQ0FBZ0IsQ0FDWixXQUFXLEVBQUUsc0JBQXNCLEVBQ25DLHlIQUF5SCxDQUFDLENBQUM7d0JBQy9ILE9BQU8sVUFBVSxDQUFDO3FCQUNuQjtvQkFDRCxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FDL0QsU0FBUyxFQUNULEVBQUUsQ0FBQyw2QkFBNkIsQ0FDNUIsQ0FBQyxFQUFFLENBQUMseUJBQXlCLENBQ3pCLHVCQUF1QixFQUFFLFNBQVMsRUFFbEMsRUFBRSxDQUFDLFVBQVUsQ0FDVCxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFDMUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbkQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUM3QixzRUFBc0U7b0JBQ3RFLG9FQUFvRTtvQkFDcEUsc0VBQXNFO29CQUN0RSxnREFBZ0Q7b0JBQ2hELFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztvQkFDNUUsaUJBQWlCLENBQUMsVUFBVTt3QkFDeEIsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNuRjtnQkFDRCxPQUFPLGlCQUFpQixDQUFDO1lBQzNCLENBQUMsQ0FBQztZQUNGLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQUNKLENBQUM7SUE1Q0Qsa0hBNENDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFhLEVBQUUsT0FBaUM7UUFDeEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQiwwRUFBMEU7WUFDMUUsaUNBQWlDO1lBQ2pDLE9BQU87U0FDUjtRQUNELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDaEQsZ0NBQWdDO1lBQ2hDLEVBQUU7WUFDRiw2QkFBNkI7WUFDN0Isa0JBQWtCO1lBQ2xCLGtDQUFrQztZQUNsQyxRQUFRO1lBQ1IsRUFBRTtZQUNGLHFDQUFxQztZQUNyQyxPQUFPO1NBQ1I7UUFDRCxNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO1FBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUNuQixFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFDdkYsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxTQUFTLHFCQUFxQixDQUFDLFNBQWtCO1FBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbkQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7SUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0QWxsTGVhZGluZ0NvbW1lbnRzLCByZXBvcnREaWFnbm9zdGljfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGdpdmVuIGRlY29yYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhcbiAgICBkZWNvcmF0b3I6IHRzLkRlY29yYXRvciwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogdHMuRGVjbGFyYXRpb25bXSB7XG4gIC8vIFdhbGsgZG93biB0aGUgZXhwcmVzc2lvbiB0byBmaW5kIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gIGxldCBub2RlOiB0cy5Ob2RlID0gZGVjb3JhdG9yO1xuICB3aGlsZSAobm9kZS5raW5kICE9PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkRlY29yYXRvciB8fCBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIG5vZGUgPSAobm9kZSBhcyB0cy5EZWNvcmF0b3IgfCB0cy5DYWxsRXhwcmVzc2lvbikuZXhwcmVzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgZG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzIHR5cGUgb2YgZGVjb3JhdG9yLlxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuICBpZiAoIWRlY1N5bSkgcmV0dXJuIFtdO1xuICBpZiAoZGVjU3ltLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpIHtcbiAgICBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKGRlY1N5bSk7XG4gIH1cbiAgcmV0dXJuIGRlY1N5bS5nZXREZWNsYXJhdGlvbnMoKSB8fCBbXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgbm9kZSBoYXMgYW4gZXhwb3J0aW5nIGRlY29yYXRvciAgKGkuZS4sIGEgZGVjb3JhdG9yIHdpdGggQEV4cG9ydERlY29yYXRlZEl0ZW1zXG4gKiBpbiBpdHMgSlNEb2MpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwb3J0aW5nRGVjb3JhdG9yKG5vZGU6IHRzLk5vZGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gbm9kZS5kZWNvcmF0b3JzICYmXG4gICAgICBub2RlLmRlY29yYXRvcnMuc29tZShkZWNvcmF0b3IgPT4gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yLCB0eXBlQ2hlY2tlcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVjb3JhdG9yIGhhcyBhbiBARXhwb3J0RGVjb3JhdGVkSXRlbXMgZGlyZWN0aXZlIGluIGl0cyBKU0RvYy5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gZ2V0RGVjb3JhdG9yRGVjbGFyYXRpb25zKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpLnNvbWUoZGVjbGFyYXRpb24gPT4ge1xuICAgIGNvbnN0IHJhbmdlID0gZ2V0QWxsTGVhZGluZ0NvbW1lbnRzKGRlY2xhcmF0aW9uKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3RleHR9IG9mIHJhbmdlKSB7XG4gICAgICBpZiAoL0BFeHBvcnREZWNvcmF0ZWRJdGVtc1xcYi8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIHRyYW5zZm9ybSBwYXNzIHRoYXQgYWRkcyBnb29nLnJlZmxlY3Qub2JqZWN0UHJvcGVydHkgY2FsbHMgdG8gdGhlIHByb3BlcnR5XG4gKiBuYW1lIHN0cmluZyBsaXRlcmFscyB0aGF0IGFyZSBlbWl0dGVkIGFzIHBhcnQgb2YgVHlwZVNjcmlwdCdzIGRlZmF1bHRcbiAqIGRlY29yYXRvciBvdXRwdXQuXG4gKlxuICogZ29vZy5yZWZsZWN0Lm9iamVjdFByb3BlcnR5IGlzIGEgc3BlY2lhbCBmdW5jdGlvbiB0aGF0IGlzIHJlY29nbml6ZWQgYnlcbiAqIENsb3N1cmUgQ29tcGlsZXIuIEl0IGlzIGNhbGxlZCBsaWtlIGdvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eSgncHJvcCcsIG9iailcbiAqIGFuZCBpdCBpcyBjb21waWxlZCB0byBhIHN0cmluZyBsaXRlcmFsIHRoYXQncyB0aGUgcHJvcGVydHkgbmFtZWQgJ3Byb3AnIG9uXG4gKiB0aGUgb2JqIHZhbHVlLlxuICpcbiAqIFRoaXMgd2F5LCBydW50aW1lIGRlY29yYXRvcnMgY2FuIHVzZSB0aGUgcHJvcGVydHkgbmFtZXMgKGUuZy4gdG8gcmVnaXN0ZXJcbiAqIHRoZSBwcm9wZXJ0eSBhcyBhIGdldHRlci9zZXR0ZXIgcGFpcikgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoXG4gKiBDbG9zdXJlIENvbXBpbGVyJ3MgcHJvcGVydHkgcmVuYW1pbmcuXG4gKlxuICogVHJhbnNmb3JtczpcbiAqXG4gKiAgICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAqICAgICAgIGRlY29yYXRvcixcbiAqICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAqICAgICBdLCBGb28ucHJvdG90eXBlLCBcInByb3BcIiwgdm9pZCAwKTtcbiAqXG4gKiBJbnRvOlxuICpcbiAqICAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICogICAgICAgICAgIGRlY29yYXRvcixcbiAqICAgICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gKiAgICAgICAgIF0sIEZvby5wcm90b3R5cGUsXG4gKiAgICAgICAgIF9fZ29vZ1JlZmxlY3Qub2JqZWN0UHJvcGVydHkoXCJwcm9wXCIsIEZvby5wcm90b3R5cGUpLCB2b2lkIDApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGVjb3JhdG9yc091dHB1dEZvckNsb3N1cmVQcm9wZXJ0eVJlbmFtaW5nKGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10pIHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IHRzLlRyYW5zZm9ybWVyPHRzLlNvdXJjZUZpbGU+ID0gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGxldCBub2RlTmVlZGluZ0dvb2dSZWZsZWN0OiB1bmRlZmluZWR8dHMuTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZpc2l0b3I6IHRzLlZpc2l0b3IgPSAobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudE5vZGUgPSByZXdyaXRlRGVjb3JhdG9yKG5vZGUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVwbGFjZW1lbnROb2RlKSB7XG4gICAgICAgICAgbm9kZU5lZWRpbmdHb29nUmVmbGVjdCA9IG5vZGU7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlZFNvdXJjZUZpbGUgPSB0cy52aXNpdE5vZGUoc291cmNlRmlsZSwgdmlzaXRvcik7XG4gICAgICBpZiAobm9kZU5lZWRpbmdHb29nUmVmbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbLi4udXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50c107XG4gICAgICAgIGNvbnN0IGdvb2dNb2R1bGVJbmRleCA9IHN0YXRlbWVudHMuZmluZEluZGV4KGlzR29vZ01vZHVsZVN0YXRlbWVudCk7XG4gICAgICAgIGlmIChnb29nTW9kdWxlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhcbiAgICAgICAgICAgICAgZGlhZ25vc3RpY3MsIG5vZGVOZWVkaW5nR29vZ1JlZmxlY3QsXG4gICAgICAgICAgICAgICdJbnRlcm5hbCB0c2lja2xlIGVycm9yOiBjb3VsZCBub3QgZmluZCBnb29nLm1vZHVsZSBzdGF0ZW1lbnQgdG8gaW1wb3J0IF9fdHNpY2tsZV9nb29nUmVmbGVjdCBmb3IgZGVjb3JhdG9yIGNvbXBpbGF0aW9uLicpO1xuICAgICAgICAgIHJldHVybiBzb3VyY2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdvb2dSZXF1aXJlUmVmbGVjdE9iamVjdFByb3BlcnR5ID0gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgJ19fdHNpY2tsZV9nb29nUmVmbGVjdCcsIHVuZGVmaW5lZCxcblxuICAgICAgICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcignZ29vZycpLCAncmVxdWlyZScpLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnZ29vZy5yZWZsZWN0JyldKSldLFxuICAgICAgICAgICAgICAgIHRzLk5vZGVGbGFncy5Db25zdCkpO1xuICAgICAgICAvLyBUaGUgYm9pbGVycGxhdGUgd2UgcHJvZHVjZSBoYXMgYSBnb29nLm1vZHVsZSBsaW5lLCB0aGVuIHR3byByZWxhdGVkXG4gICAgICAgIC8vIGxpbmVzIGRlYWxpbmcgd2l0aCB0aGUgYG1vZHVsZWAgdmFyaWFibGUuIEluc2VydCBvdXIgZ29vZy5yZXF1aXJlXG4gICAgICAgIC8vIGFmdGVyIHRoYXQgdG8gYXZvaWQgdmlzdWFsbHkgYnJlYWtpbmcgdXAgdGhlIG1vZHVsZSBpbmZvLCBhbmQgdG8gYmVcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVzdCBvZiB0aGUgZ29vZy5yZXF1aXJlIHN0YXRlbWVudHMuXG4gICAgICAgIHN0YXRlbWVudHMuc3BsaWNlKGdvb2dNb2R1bGVJbmRleCArIDMsIDAsIGdvb2dSZXF1aXJlUmVmbGVjdE9iamVjdFByb3BlcnR5KTtcbiAgICAgICAgdXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50cyA9XG4gICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodHMuY3JlYXRlTm9kZUFycmF5KHN0YXRlbWVudHMpLCB1cGRhdGVkU291cmNlRmlsZS5zdGF0ZW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVkU291cmNlRmlsZTtcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbi8qKlxuICogSWYgYG5vZGVgIGlzIGEgY2FsbCB0byB0aGUgdHNsaWIgX19kZWNvcmF0ZSBmdW5jdGlvbiwgdGhpcyByZXR1cm5zIGEgbW9kaWZpZWRcbiAqIGNhbGwgd2l0aCB0aGUgc3RyaW5nIGFyZ3VtZW50IHJlcGxhY2VkIHdpdGhcbiAqIGBfX3RzaWNrbGVfZ29vZ1JlZmxlY3Qub2JqZWN0UHJvcGVydHkoJ3Byb3AnLCBUaGVDbGFzcy5wcm90b3R5cGUpYC5cbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBubyBtb2RpZmljYXRpb24gaXMgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiByZXdyaXRlRGVjb3JhdG9yKG5vZGU6IHRzLk5vZGUsIGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCk6IHRzLk5vZGV8dW5kZWZpbmVkIHtcbiAgaWYgKCF0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBub2RlLmV4cHJlc3Npb247XG4gIGlmICghdHMuaXNJZGVudGlmaWVyKGlkZW50aWZpZXIpIHx8IGlkZW50aWZpZXIudGV4dCAhPT0gJ19fZGVjb3JhdGUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbLi4ubm9kZS5hcmd1bWVudHNdO1xuICBpZiAoYXJncy5sZW5ndGggIT09IDQpIHtcbiAgICAvLyBTb21lIGRlY29yYXRvcnMsIGxpa2UgY2xhc3MgZGVjb3JhdG9ycywgaGF2ZSBmZXdlciBhcmd1bWVudHMsIGFuZCBkb24ndFxuICAgIC8vIG5lZWQgaGVscCB0byBiZSByZW5hbWluZy1zYWZlLlxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1bnR5cGVkRmllbGROYW1lTGl0ZXJhbCA9IGFyZ3NbMl07XG4gIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKHVudHlwZWRGaWVsZE5hbWVMaXRlcmFsKSkge1xuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCwgZm9yIGV4YW1wbGU6XG4gICAgLy9cbiAgICAvLyAgICAgY29uc3QgcHJvcCA9IFN5bWJvbCgpO1xuICAgIC8vICAgICBjbGFzcyBGb28ge1xuICAgIC8vICAgICAgIEBkZWNvcmF0ZSBbcHJvcF0gPSAndmFsJztcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gTm90aGluZyBmb3IgdXMgdG8gZG8gaW4gdGhhdCBjYXNlLlxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmaWVsZE5hbWVMaXRlcmFsID0gdW50eXBlZEZpZWxkTmFtZUxpdGVyYWw7XG4gIGFyZ3NbMl0gPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcignX190c2lja2xlX2dvb2dSZWZsZWN0JyksICdvYmplY3RQcm9wZXJ0eScpLFxuICAgICAgdW5kZWZpbmVkLCBbdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbChmaWVsZE5hbWVMaXRlcmFsLnRleHQpLCB0cy5nZXRNdXRhYmxlQ2xvbmUoYXJnc1sxXSldKTtcbiAgcmV0dXJuIHRzLnVwZGF0ZUNhbGwobm9kZSwgbm9kZS5leHByZXNzaW9uLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBpc0dvb2dNb2R1bGVTdGF0ZW1lbnQoc3RhdGVtZW50OiB0cy5Ob2RlKSB7XG4gIGlmICghdHMuaXNFeHByZXNzaW9uU3RhdGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZXhwciA9IHN0YXRlbWVudC5leHByZXNzaW9uO1xuICBpZiAoIXRzLmlzQ2FsbEV4cHJlc3Npb24oZXhwcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCF0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihleHByLmV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdvb2cgPSBleHByLmV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgaWYgKCF0cy5pc0lkZW50aWZpZXIoZ29vZykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdvb2cudGV4dCA9PT0gJ2dvb2cnICYmIGV4cHIuZXhwcmVzc2lvbi5uYW1lLnRleHQgPT09ICdtb2R1bGUnO1xufVxuIl19

@@ -111,2 +111,8 @@ /**

/**
* resolveRestParameterType resolves the array member type for a rest parameter ("...").
* In TypeScript you write "...x: number[]", but in Closure you don't write the array:
* `@param {...number} x`. The code below unwraps the Array<> wrapper.
*/
private resolveRestParameterType;
/**
* Creates the jsdoc for methods, including overloads.

@@ -113,0 +119,0 @@ * If overloaded, merges the signatures in the list of SignatureDeclarations into a single jsdoc.

@@ -21,6 +21,6 @@ /**

addReferencedModule(fileName: string, resolvedModule: string): void;
readonly modules: string[];
get modules(): string[];
getFileNameFromModule(module: string): string;
readonly fileNames: string[];
get fileNames(): string[];
getReferencedModules(fileName: string): string[];
}

@@ -14,2 +14,3 @@ /**

function convertToRelativePath(absoluteOrRelativePath: string, basePath: string, getCanonicalFileName: (path: string) => string): string;
function resolvePath(path: string, ...paths: Array<string | undefined>): string;
}

@@ -16,0 +17,0 @@ export declare function isAbsolute(path: string): boolean;

@@ -46,6 +46,6 @@ /**

function normalize(path) {
return ts.sys.resolvePath(path);
return ts.resolvePath(path);
}
exports.normalize = normalize;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUg7Ozs7Ozs7O09BUUc7SUFFSCxpQ0FBaUM7SUFXakMsU0FBZ0IsVUFBVSxDQUFDLElBQVk7UUFDckMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELGdDQUVDO0lBRUQsU0FBZ0IsSUFBSSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUZELG9CQUVDO0lBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVk7UUFDbEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELDBCQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ2hELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRkQsNEJBRUM7SUFFRCxTQUFnQixTQUFTLENBQUMsSUFBWTtRQUNwQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFGRCw4QkFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFBhdGggbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy5cbiAqIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgYnkgbm9kZWpzIGluIHRoZSAncGF0aCcgbW9kdWxlLlxuICpcbiAqIEJ1dCB3ZSBhY3R1YWxseSB1c2UgdGhlIFR5cGVTY3JpcHQgcGF0aC1tYW5pcHVsYXRpb24gbG9naWMgYmVjYXVzZTpcbiAqIDEpIHdlIHdhbnQgdGhlIGV4YWN0IHNhbWUgYmVoYXZpb3JzIGFzIFRTO1xuICogMikgd2UgZG9uJ3QgZGVwZW5kIG9uIG5vZGUncyAncGF0aCcgbW9kdWxlIHdoZW4gcnVubmluZyB1bmRlciBhIGJyb3dzZXJcbiAqIFNvIHdlIHBva2UgaW50byB0aGVpciBwcml2YXRlIEFQSSBmb3IgdGhlc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmRlY2xhcmUgbW9kdWxlICd0eXBlc2NyaXB0JyB7XG4gIGZ1bmN0aW9uIGlzUm9vdGVkRGlza1BhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbiAgZnVuY3Rpb24gY29tYmluZVBhdGhzKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgZnVuY3Rpb24gZ2V0RGlyZWN0b3J5UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JlbGF0aXZlUGF0aChcbiAgICAgIGFic29sdXRlT3JSZWxhdGl2ZVBhdGg6IHN0cmluZywgYmFzZVBhdGg6IHN0cmluZyxcbiAgICAgIGdldENhbm9uaWNhbEZpbGVOYW1lOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHMuaXNSb290ZWREaXNrUGF0aChwYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW4ocDE6IHN0cmluZywgcDI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5jb21iaW5lUGF0aHMocDEsIHAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmdldERpcmVjdG9yeVBhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShiYXNlOiBzdHJpbmcsIHJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmNvbnZlcnRUb1JlbGF0aXZlUGF0aChyZWwsIGJhc2UsIHAgPT4gcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLnN5cy5yZXNvbHZlUGF0aChwYXRoKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUg7Ozs7Ozs7O09BUUc7SUFFSCxpQ0FBaUM7SUFZakMsU0FBZ0IsVUFBVSxDQUFDLElBQVk7UUFDckMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELGdDQUVDO0lBRUQsU0FBZ0IsSUFBSSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUZELG9CQUVDO0lBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVk7UUFDbEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELDBCQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ2hELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRkQsNEJBRUM7SUFFRCxTQUFnQixTQUFTLENBQUMsSUFBWTtRQUNwQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUZELDhCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUGF0aCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLlxuICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCBieSBub2RlanMgaW4gdGhlICdwYXRoJyBtb2R1bGUuXG4gKlxuICogQnV0IHdlIGFjdHVhbGx5IHVzZSB0aGUgVHlwZVNjcmlwdCBwYXRoLW1hbmlwdWxhdGlvbiBsb2dpYyBiZWNhdXNlOlxuICogMSkgd2Ugd2FudCB0aGUgZXhhY3Qgc2FtZSBiZWhhdmlvcnMgYXMgVFM7XG4gKiAyKSB3ZSBkb24ndCBkZXBlbmQgb24gbm9kZSdzICdwYXRoJyBtb2R1bGUgd2hlbiBydW5uaW5nIHVuZGVyIGEgYnJvd3NlclxuICogU28gd2UgcG9rZSBpbnRvIHRoZWlyIHByaXZhdGUgQVBJIGZvciB0aGVzZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZGVjbGFyZSBtb2R1bGUgJ3R5cGVzY3JpcHQnIHtcbiAgZnVuY3Rpb24gaXNSb290ZWREaXNrUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICBmdW5jdGlvbiBjb21iaW5lUGF0aHMoLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICBmdW5jdGlvbiBnZXREaXJlY3RvcnlQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZztcbiAgZnVuY3Rpb24gY29udmVydFRvUmVsYXRpdmVQYXRoKFxuICAgICAgYWJzb2x1dGVPclJlbGF0aXZlUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLFxuICAgICAgZ2V0Q2Fub25pY2FsRmlsZU5hbWU6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZyk6IHN0cmluZztcbiAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nLCAuLi5wYXRoczogQXJyYXk8c3RyaW5nfHVuZGVmaW5lZD4pOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHMuaXNSb290ZWREaXNrUGF0aChwYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW4ocDE6IHN0cmluZywgcDI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5jb21iaW5lUGF0aHMocDEsIHAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmdldERpcmVjdG9yeVBhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShiYXNlOiBzdHJpbmcsIHJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmNvbnZlcnRUb1JlbGF0aXZlUGF0aChyZWwsIGJhc2UsIHAgPT4gcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLnJlc29sdmVQYXRoKHBhdGgpO1xufVxuIl19

@@ -14,3 +14,3 @@ /**

else if (typeof define === "function" && define.amd) {
define("tsickle/src/tsickle", ["require", "exports", "typescript", "tsickle/src/cli_support", "tsickle/src/decorator_downlevel_transformer", "tsickle/src/enum_transformer", "tsickle/src/externs", "tsickle/src/fileoverview_comment_transformer", "tsickle/src/googmodule", "tsickle/src/jsdoc_transformer", "tsickle/src/modules_manifest", "tsickle/src/transformer_util", "tsickle/src/cli_support", "tsickle/src/externs", "tsickle/src/modules_manifest"], factory);
define("tsickle/src/tsickle", ["require", "exports", "typescript", "tsickle/src/cli_support", "tsickle/src/decorator_downlevel_transformer", "tsickle/src/decorators", "tsickle/src/enum_transformer", "tsickle/src/externs", "tsickle/src/fileoverview_comment_transformer", "tsickle/src/googmodule", "tsickle/src/jsdoc_transformer", "tsickle/src/modules_manifest", "tsickle/src/transformer_util", "tsickle/src/cli_support", "tsickle/src/externs", "tsickle/src/modules_manifest"], factory);
}

@@ -23,2 +23,3 @@ })(function (require, exports) {

const decorator_downlevel_transformer_1 = require("tsickle/src/decorator_downlevel_transformer");
const decorators_1 = require("tsickle/src/decorators");
const enum_transformer_1 = require("tsickle/src/enum_transformer");

@@ -97,2 +98,3 @@ const externs_1 = require("tsickle/src/externs");

tsTransformers.after.push(googmodule.commonJsToGoogmoduleTransformer(host, modulesManifest, typeChecker, tsickleDiagnostics));
tsTransformers.after.push(decorators_1.transformDecoratorsOutputForClosurePropertyRenaming(tsickleDiagnostics));
}

@@ -267,6 +269,10 @@ // Wrap the writeFile callback to hook writing of the dts file.

}
globalSymbols +=
`\t\texport {${localName} as module$contents$${clutzModuleName}_${symbol.name}}\n`;
nestedSymbols +=
`\t\texport {module$contents$${clutzModuleName}_${symbol.name} as ${symbol.name}}\n`;
const mangledName = `module$contents$${clutzModuleName}_${symbol.name}`;
globalSymbols += `\t\texport {${localName} as ${mangledName}}\n`;
// TODO(mprobst): Once tsickle is on TS3.7, the two lines below can be replaced with
// "export {localName};". However in TS3.5, localName resolves within the module, so
// exporting {localName} causes a circular definition error. The workaround is to import the
// mangled name.
nestedSymbols += `\t\timport ${localName}$clutz = ಠ_ಠ.clutz.${mangledName};\n`;
nestedSymbols += `\t\texport {${localName}$clutz as ${symbol.name}};\n`;
}

@@ -278,2 +284,4 @@ dtsFileContent += 'declare global {\n';

dtsFileContent += `\tnamespace ಠ_ಠ.clutz.module$exports$${clutzModuleName} {\n`;
// TODO(martinprobst): See https://github.com/Microsoft/TypeScript/issues/35385, remove once fixed
dtsFileContent += `\t\tconst clutz$workaround$tissue$35385: number;\n`;
dtsFileContent += nestedSymbols;

@@ -296,2 +304,2 @@ dtsFileContent += `\t}\n`;

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBR2pDLHlEQUE2QztJQUM3QyxpR0FBZ0Y7SUFDaEYsbUVBQW1EO0lBQ25ELGlEQUEwQztJQUMxQyxtR0FBdUY7SUFDdkYscURBQTJDO0lBQzNDLHFFQUEyRTtJQUMzRSxtRUFBbUQ7SUFDbkQsbUVBQWlEO0lBRWpELDREQUE0RDtJQUM1RCx1REFBK0M7SUFBdkMseUNBQUEsZ0JBQWdCLENBQUE7SUFDeEIsdUNBQXVDO0lBQ3ZDLCtDQUE4QztJQUF0Qyx3Q0FBQSxtQkFBbUIsQ0FBQTtJQUMzQixpRUFBNEQ7SUFBM0MsNkNBQUEsZUFBZSxDQUFBO0lBbUNoQyxTQUFnQixnQkFBZ0IsQ0FBQyxXQUF5QjtRQUN4RCxNQUFNLFdBQVcsR0FBb0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGtDQUFlLEVBQUUsQ0FBQztRQUM5QyxLQUFLLE1BQU0sRUFBRSxJQUFJLFdBQVcsRUFBRTtZQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUM1QyxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDdkM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMs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QGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7QW5ub3RhdG9ySG9zdH0gZnJvbSAnLi9hbm5vdGF0b3JfaG9zdCc7XG5pbXBvcnQge2Fzc2VydEFic29sdXRlfSBmcm9tICcuL2NsaV9zdXBwb3J0JztcbmltcG9ydCB7ZGVjb3JhdG9yRG93bmxldmVsVHJhbnNmb3JtZXJ9IGZyb20gJy4vZGVjb3JhdG9yX2Rvd25sZXZlbF90cmFuc2Zvcm1lcic7XG5pbXBvcnQge2VudW1UcmFuc2Zvcm1lcn0gZnJvbSAnLi9lbnVtX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7Z2VuZXJhdGVFeHRlcm5zfSBmcm9tICcuL2V4dGVybnMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1GaWxlb3ZlcnZpZXdDb21tZW50RmFjdG9yeX0gZnJvbSAnLi9maWxlb3ZlcnZpZXdfY29tbWVudF90cmFuc2Zvcm1lcic7XG5pbXBvcnQgKiBhcyBnb29nbW9kdWxlIGZyb20gJy4vZ29vZ21vZHVsZSc7XG5pbXBvcnQge2pzZG9jVHJhbnNmb3JtZXIsIHJlbW92ZVR5cGVBc3NlcnRpb25zfSBmcm9tICcuL2pzZG9jX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7TW9kdWxlc01hbmlmZXN0fSBmcm9tICcuL21vZHVsZXNfbWFuaWZlc3QnO1xuaW1wb3J0IHtpc0R0c0ZpbGVOYW1lfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vLyBFeHBvcnRlZCBmb3IgdXNlcnMgYXMgYSBkZWZhdWx0IGltcGwgb2YgcGF0aFRvTW9kdWxlTmFtZS5cbmV4cG9ydCB7cGF0aFRvTW9kdWxlTmFtZX0gZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG4vLyBSZXRhaW5lZCBoZXJlIGZvciBBUEkgY29tcGF0aWJpbGl0eS5cbmV4cG9ydCB7Z2V0R2VuZXJhdGVkRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmV4cG9ydCB7RmlsZU1hcCwgTW9kdWxlc01hbmlmZXN0fSBmcm9tICcuL21vZHVsZXNfbWFuaWZlc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRzaWNrbGVIb3N0IGV4dGVuZHMgZ29vZ21vZHVsZS5Hb29nTW9kdWxlUHJvY2Vzc29ySG9zdCwgQW5ub3RhdG9ySG9zdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRvd25sZXZlbCBkZWNvcmF0b3JzXG4gICAqL1xuICB0cmFuc2Zvcm1EZWNvcmF0b3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb252ZXJzIHR5cGVzIHRvIGNsb3N1cmVcbiAgICovXG4gIHRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYWxpYXNlcyB0byB0aGUgLmQudHMgZmlsZXMgdG8gYWRkIHRoZSBleHBvcnRzIHRvIHRoZVxuICAgKiDgsqBf4LKgLmNsdXR6IG5hbWVzcGFjZS5cbiAgICovXG4gIGFkZER0c0NsdXR6QWxpYXNlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRzaWNrbGUgYW5kIGRlY29yYXRvciBkb3dubGV2ZWwgcHJvY2Vzc2luZyB3aWxsIGJlIHNraXBwZWQgZm9yXG4gICAqIHRoYXQgZmlsZS5cbiAgICovXG4gIHNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHNpY2tsZSB0cmVhdHMgd2FybmluZ3MgYXMgZXJyb3JzLCBpZiB0cnVlLCBpZ25vcmUgd2FybmluZ3MuICBUaGlzIG1pZ2h0IGJlXG4gICAqIHVzZWZ1bCBmb3IgZS5nLiB0aGlyZCBwYXJ0eSBjb2RlLlxuICAgKi9cbiAgc2hvdWxkSWdub3JlV2FybmluZ3NGb3JQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGNvbnZlcnQgQ29tbW9uSlMgcmVxdWlyZSgpIGltcG9ydHMgdG8gZ29vZy5tb2R1bGUoKSBhbmQgZ29vZy5yZXF1aXJlKCkgY2FsbHMuICovXG4gIGdvb2dtb2R1bGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVtaXRSZXN1bHRzKGVtaXRSZXN1bHRzOiBFbWl0UmVzdWx0W10pOiBFbWl0UmVzdWx0IHtcbiAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICBsZXQgZW1pdFNraXBwZWQgPSB0cnVlO1xuICBjb25zdCBlbWl0dGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgY29uc3QgbW9kdWxlc01hbmlmZXN0ID0gbmV3IE1vZHVsZXNNYW5pZmVzdCgpO1xuICBmb3IgKGNvbnN0IGVyIG9mIGVtaXRSZXN1bHRzKSB7XG4gICAgZGlhZ25vc3RpY3MucHVzaCguLi5lci5kaWFnbm9zdGljcyk7XG4gICAgZW1pdFNraXBwZWQgPSBlbWl0U2tpcHBlZCB8fCBlci5lbWl0U2tpcHBlZDtcbiAgICBpZiAoZXIuZW1pdHRlZEZpbGVzKSB7XG4gICAgICBlbWl0dGVkRmlsZXMucHVzaCguLi5lci5lbWl0dGVkRmlsZXMpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKGV4dGVybnMsIGVyLmV4dGVybnMpO1xuICAgIG1vZHVsZXNNYW5pZmVzdC5hZGRNYW5pZmVzdChlci5tb2R1bGVzTWFuaWZlc3QpO1xuICB9XG4gIHJldHVybiB7ZGlhZ25vc3RpY3MsIGVtaXRTa2lwcGVkLCBlbWl0dGVkRmlsZXMsIGV4dGVybnMsIG1vZHVsZXNNYW5pZmVzdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlc3VsdCBleHRlbmRzIHRzLkVtaXRSZXN1bHQge1xuICAvLyBUaGUgbWFuaWZlc3Qgb2YgSlMgbW9kdWxlcyBvdXRwdXQgYnkgdGhlIGNvbXBpbGVyLlxuICBtb2R1bGVzTWFuaWZlc3Q6IE1vZHVsZXNNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGV4dGVybnMuanMgZmlsZXMgcHJvZHVjZWQgYnkgdHNpY2tsZSwgaWYgYW55LiBtb2R1bGUgSURzIGFyZSByZWxhdGl2ZSBwYXRocyBmcm9tXG4gICAqIGZpbGVOYW1lVG9Nb2R1bGVJZC5cbiAgICovXG4gIGV4dGVybnM6IHtbbW9kdWxlSWQ6IHN0cmluZ106IHN0cmluZ307XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFRyYW5zZm9ybWVycyB7XG4gIC8qKiBDdXN0b20gdHJhbnNmb3JtZXJzIHRvIGV2YWx1YXRlIGJlZm9yZSBUc2lja2xlIC5qcyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGJlZm9yZVRzaWNrbGU/OiB0cy5DdXN0b21UcmFuc2Zvcm1lcnNbJ2JlZm9yZSddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBiZWZvcmUgYnVpbHQtaW4gLmpzIHRyYW5zZm9ybWF0aW9ucy4gKi9cbiAgYmVmb3JlVHM/OiB0cy5DdXN0b21UcmFuc2Zvcm1lcnNbJ2JlZm9yZSddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBhZnRlciBidWlsdC1pbiAuanMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBhZnRlclRzPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydhZnRlciddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBhZnRlciBidWlsdC1pbiAuZC50cyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGFmdGVyRGVjbGFyYXRpb25zPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydhZnRlckRlY2xhcmF0aW9ucyddO1xufVxuXG5cbi8qKiBAZGVwcmVjYXRlZCBFeHBvc2VkIGZvciBiYWNrd2FyZCBjb21wYXQgd2l0aCBBbmd1bGFyLiAgVXNlIGVtaXQoKSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRXaXRoVHNpY2tsZShcbiAgICBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBob3N0OiBUc2lja2xlSG9zdCwgdHNIb3N0OiB0cy5Db21waWxlckhvc3QsIHRzT3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zLFxuICAgIHRhcmdldFNvdXJjZUZpbGU/OiB0cy5Tb3VyY2VGaWxlLCB3cml0ZUZpbGU/OiB0cy5Xcml0ZUZpbGVDYWxsYmFjayxcbiAgICBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzPzogYm9vbGVhbixcbiAgICBjdXN0b21UcmFuc2Zvcm1lcnM6IEVtaXRUcmFuc2Zvcm1lcnMgPSB7fSk6IEVtaXRSZXN1bHQge1xuICByZXR1cm4gZW1pdChcbiAgICAgIHByb2dyYW0sIGhvc3QsIHdyaXRlRmlsZSB8fCB0c0hvc3Qud3JpdGVGaWxlLmJpbmQodHNIb3N0KSwgdGFyZ2V0U291cmNlRmlsZSxcbiAgICAgIGNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzLCBjdXN0b21UcmFuc2Zvcm1lcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdChcbiAgICBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBob3N0OiBUc2lja2xlSG9zdCwgd3JpdGVGaWxlOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbixcbiAgICBlbWl0T25seUR0c0ZpbGVzPzogYm9vbGVhbiwgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgZm9yIChjb25zdCBzZiBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBhc3NlcnRBYnNvbHV0ZShzZi5maWxlTmFtZSk7XG4gIH1cblxuICBsZXQgdHNpY2tsZURpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRzT3B0aW9ucyA9IHByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCk7XG4gIGNvbnN0IHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnM6IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj4gPSBbXTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBPbmx5IGFkZCBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9IGNvbW1lbnRzIHdoZW4gYWxzbyBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIHRyYW5zZm9ybUZpbGVvdmVydmlld0NvbW1lbnRGYWN0b3J5KHRzT3B0aW9ucywgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBqc2RvY1RyYW5zZm9ybWVyKGhvc3QsIHRzT3B0aW9ucywgdHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChlbnVtVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG4gIGlmIChob3N0LnRyYW5zZm9ybURlY29yYXRvcnMpIHtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZGVjb3JhdG9yRG93bmxldmVsVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG4gIGNvbnN0IG1vZHVsZXNNYW5pZmVzdCA9IG5ldyBNb2R1bGVzTWFuaWZlc3QoKTtcbiAgY29uc3QgdHNUcmFuc2Zvcm1lcnM6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyA9IHtcbiAgICBiZWZvcmU6IFtcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYmVmb3JlVHNpY2tsZSB8fCBbXSksXG4gICAgICAuLi4odHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycyB8fCBbXSkubWFwKHRmID0+IHNraXBUcmFuc2Zvcm1Gb3JTb3VyY2VGaWxlSWZOZWVkZWQoaG9zdCwgdGYpKSxcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYmVmb3JlVHMgfHwgW10pLFxuICAgIF0sXG4gICAgYWZ0ZXI6IFtcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYWZ0ZXJUcyB8fCBbXSksXG4gICAgXSxcbiAgICBhZnRlckRlY2xhcmF0aW9uczogY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyRGVjbGFyYXRpb25zLFxuICB9O1xuICBpZiAoaG9zdC50cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZSkge1xuICAgIC8vIFNlZSBjb21tZW50IG9uIHJlbW90ZVR5cGVBc3NlcnRpb25zLlxuICAgIHRzVHJhbnNmb3JtZXJzLmJlZm9yZSEucHVzaChyZW1vdmVUeXBlQXNzZXJ0aW9ucygpKTtcbiAgfVxuICBpZiAoaG9zdC5nb29nbW9kdWxlKSB7XG4gICAgdHNUcmFuc2Zvcm1lcnMuYWZ0ZXIhLnB1c2goZ29vZ21vZHVsZS5jb21tb25Kc1RvR29vZ21vZHVsZVRyYW5zZm9ybWVyKFxuICAgICAgICBob3N0LCBtb2R1bGVzTWFuaWZlc3QsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuXG4gIC8vIFdyYXAgdGhlIHdyaXRlRmlsZSBjYWxsYmFjayB0byBob29rIHdyaXRpbmcgb2YgdGhlIGR0cyBmaWxlLlxuICBjb25zdCB3cml0ZUZpbGVJbXBsOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayA9XG4gICAgICAoZmlsZU5hbWUsIGNvbnRlbnQsIHdyaXRlQnl0ZU9yZGVyTWFyaywgb25FcnJvciwgc291cmNlRmlsZXMpID0+IHtcbiAgICAgICAgYXNzZXJ0QWJzb2x1dGUoZmlsZU5hbWUpO1xuICAgICAgICBpZiAoaG9zdC5hZGREdHNDbHV0ekFsaWFzZXMgJiYgaXNEdHNGaWxlTmFtZShmaWxlTmFtZSkgJiYgc291cmNlRmlsZXMpIHtcbiAgICAgICAgICAvLyBPbmx5IGJ1bmRsZSBlbWl0cyBwYXNzIG1vcmUgdGhhbiBvbmUgc291cmNlIGZpbGUgZm9yIC5kLnRzIHdyaXRlcy4gQnVuZGxlIGVtaXRzIGhvd2V2ZXJcbiAgICAgICAgICAvLyBhcmUgbm90IHN1cHBvcnRlZCBieSB0c2lja2xlLCBhcyB3ZSBjYW5ub3QgYW5ub3RhdGUgdGhlbSBmb3IgQ2xvc3VyZSBpbiBhbnkgbWVhbmluZ2Z1bFxuICAgICAgICAgIC8vIHdheSBhbnl3YXkuXG4gICAgICAgICAgaWYgKCFzb3VyY2VGaWxlcyB8fCBzb3VyY2VGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGV4YWN0bHkgb25lIHNvdXJjZSBmaWxlIGZvciAuZC50cyBlbWl0LCBnb3QgJHtcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWxlcy5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNvdXJjZSA9IHNvdXJjZUZpbGVzWzBdO1xuICAgICAgICAgIGNvbnRlbnQgPSBhZGRDbHV0ekFsaWFzZXMoY29udGVudCwgb3JpZ2luYWxTb3VyY2UsIHR5cGVDaGVja2VyLCBob3N0LCB0c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlRmlsZShmaWxlTmFtZSwgY29udGVudCwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcyk7XG4gICAgICB9O1xuXG4gIGNvbnN0IHtkaWFnbm9zdGljczogdHNEaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc30gPSBwcm9ncmFtLmVtaXQoXG4gICAgICB0YXJnZXRTb3VyY2VGaWxlLCB3cml0ZUZpbGVJbXBsLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgdHNUcmFuc2Zvcm1lcnMpO1xuXG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlcyA9IHRhcmdldFNvdXJjZUZpbGUgPyBbdGFyZ2V0U291cmNlRmlsZV0gOiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCk7XG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICBjb25zdCBpc0R0cyA9IGlzRHRzRmlsZU5hbWUoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICBpZiAoaXNEdHMgJiYgaG9zdC5zaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmcoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7b3V0cHV0LCBkaWFnbm9zdGljc30gPSBnZW5lcmF0ZUV4dGVybnMoXG4gICAgICAgICAgdHlwZUNoZWNrZXIsIHNvdXJjZUZpbGUsIGhvc3QsIGhvc3QubW9kdWxlUmVzb2x1dGlvbkhvc3QsIHByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCkpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBleHRlcm5zW3NvdXJjZUZpbGUuZmlsZU5hbWVdID0gb3V0cHV0O1xuICAgICAgfVxuICAgICAgaWYgKGRpYWdub3N0aWNzKSB7XG4gICAgICAgIHRzaWNrbGVEaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdub3N0aWNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWxsIGRpYWdub3N0aWNzIChpbmNsdWRpbmcgd2FybmluZ3MpIGFyZSB0cmVhdGVkIGFzIGVycm9ycy5cbiAgLy8gSWYgdGhlIGhvc3QgZGVjaWRlcyB0byBpZ25vcmUgd2FybmluZ3MsIGp1c3QgZGlzY2FyZCB0aGVtLlxuICAvLyBXYXJuaW5ncyBpbmNsdWRlIHN0dWZmIGxpa2UgXCJkb24ndCB1c2UgQHR5cGUgaW4geW91ciBqc2RvY1wiOyB0c2lja2xlXG4gIC8vIHdhcm5zIGFuZCB0aGVuIGZpeGVzIHVwIHRoZSBjb2RlIHRvIGJlIENsb3N1cmUtY29tcGF0aWJsZSBhbnl3YXkuXG4gIHRzaWNrbGVEaWFnbm9zdGljcyA9IHRzaWNrbGVEaWFnbm9zdGljcy5maWx0ZXIoXG4gICAgICBkID0+IGQuY2F0ZWdvcnkgPT09IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvciB8fFxuICAgICAgICAgICFob3N0LnNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aChkLmZpbGUhLmZpbGVOYW1lKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2R1bGVzTWFuaWZlc3QsXG4gICAgZW1pdFNraXBwZWQsXG4gICAgZW1pdHRlZEZpbGVzOiBlbWl0dGVkRmlsZXMgfHwgW10sXG4gICAgZGlhZ25vc3RpY3M6IFsuLi50c0RpYWdub3N0aWNzLCAuLi50c2lja2xlRGlhZ25vc3RpY3NdLFxuICAgIGV4dGVybnNcbiAgfTtcbn1cblxuLyoqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbnVtYmVyIHN1aXRhYmxlIGZvciB1c2UgaW4gc29ydCgpLiAqL1xuZnVuY3Rpb24gc3RyaW5nQ29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBBIHRzaWNrbGUgcHJvZHVjZWQgZGVjbGFyYXRpb24gZmlsZSBtaWdodCBiZSBjb25zdW1lZCBiZSByZWZlcmVuY2VkIGJ5IENsdXR6XG4gKiBwcm9kdWNlZCAuZC50cyBmaWxlcywgd2hpY2ggdXNlIHN5bWJvbCBuYW1lcyBiYXNlZCBvbiBDbG9zdXJlJ3MgaW50ZXJuYWxcbiAqIG5hbWluZyBjb252ZW50aW9ucywgc28gd2UgbmVlZCB0byBwcm92aWRlIGFsaWFzZXMgZm9yIGFsbCB0aGUgZXhwb3J0ZWQgc3ltYm9sc1xuICogaW4gdGhlIENsdXR6IG5hbWluZyBjb252ZW50aW9uLlxuICovXG5mdW5jdGlvbiBhZGRDbHV0ekFsaWFzZXMoXG4gICAgZHRzRmlsZUNvbnRlbnQ6IHN0cmluZywgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LCBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2R1bGVTeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlU3ltYm9sICYmIHR5cGVDaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpO1xuICBpZiAoIW1vZHVsZUV4cG9ydHMpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyAuZC50cyBmaWxlcyBjYW4gYmUgdHJhbnNmb3JtZWQsIHRvbywgc28gd2UgbmVlZCB0byBjb21wYXJlIHRoZSBvcmlnaW5hbCBub2RlIGJlbG93LlxuICBjb25zdCBvcmlnU291cmNlRmlsZSA9IHRzLmdldE9yaWdpbmFsTm9kZShzb3VyY2VGaWxlKTtcbiAgLy8gSW4gb3JkZXIgdG8gd3JpdGUgYWxpYXNlcywgdGhlIGV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4gIC8vIHRoZSBtb2R1bGUgc2NvcGUuIFRoYXQgaXMgbm90IGFsd2F5cyB0aGUgY2FzZTpcbiAgLy9cbiAgLy8gZXhwb3J0XG4gIC8vIDEpIGV4cG9ydCBjb25zdCBYOyAgICAgICAgICAgLy8gd29ya3NcbiAgLy9cbiAgLy8gcmVleHBvcnRcbiAgLy8gMikgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7ICAvLyBkb2Vzbid0XG4gIC8vXG4gIC8vIGltcG9ydGVkIHJlZXhwb3J0XG4gIC8vIDMpIGltcG9ydCB7WH0gZnJvbSAnLi9mb28nOyAgLy8gd29ya3NcbiAgLy8gICAgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7XG4gIC8vXG4gIC8vIGdldEV4cG9ydHNPZk1vZHVsZSByZXR1cm5zIGFsbCB0aHJlZSB0eXBlcywgYnV0IHdlIG5lZWQgdG8gc2VwYXJhdGUgMikuXG4gIC8vIEZvciBub3cgd2UgJ2ZpeCcgMikgYnkgc2ltcGx5IG5vdCBlbWl0dGluZyBhIGNsdXR6IGFsaWFzLCBzaW5jZSBjbHV0elxuICAvLyBpbnRlcm9wIGlzIHVzZWQgaW4gbWlub3JpdHkgb2Ygc2NlbmFyaW9zLlxuICAvL1xuICAvLyBUT0RPKHJhZG9raXJvdik6IGF0dGVtcHQgdG8gYWRkIGFwcHJvcHJpYXRlIGltcG9ydHMgZm9yIDIpIHNvIHRoYXRcbiAgLy8gY3VycmVudGx5IGZpbmRpbmcgb3V0IGxvY2FsIGFwcGVhcnMgZXZlbiBoYXJkZXIgdGhhbiBmaXhpbmcgZXhwb3J0cy5cbiAgY29uc3QgbG9jYWxFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy5maWx0ZXIoZSA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgYmUgY29uc2VydmF0aXZlIGFuZCBkb24ndCBlbWl0IHRoZSBhbGlhc2VzLlxuICAgIC8vIEkgZG9uJ3Qga25vdyBob3cgY2FuIHRoaXMgaGFwcGVuLCB3ZSBoYXZlIG5vIHRlc3RzIHRoYXQgZXhjZXJjaXNlIGl0LlxuICAgIGlmICghZS5kZWNsYXJhdGlvbnMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNraXAgZGVmYXVsdCBleHBvcnRzLCB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAvLyBkZWZhdWx0IGlzIGEga2V5d29yZCBpbiB0eXBlc2NyaXB0LCBzbyB0aGUgbmFtZSBvZiB0aGUgZXhwb3J0IGJlaW5nXG4gICAgLy8gZGVmYXVsdCBtZWFucyB0aGF0IGl0J3MgYSBkZWZhdWx0IGV4cG9ydC5cbiAgICBpZiAoZS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSB0aGUgZGVjbGFyYXRpb24gbG9jYXRpb24gdG8gZGV0ZXJtaW5lIHNlcGFyYXRlIGNhc2VzIGFib3ZlLlxuICAgIGZvciAoY29uc3QgZCBvZiBlLmRlY2xhcmF0aW9ucykge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgZXhwb3J0ICouIFRlY2huaWNhbGx5LCBpdCBpcyBvdXRzaWRlIHRoZVxuICAgICAgLy8gdGhyZWUgY2FzZXMgb3V0bGluZWQsIGJ1dCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgcmV3cml0dGVuIGl0IHRvIGFcbiAgICAgIC8vIHJlZXhwb3J0IG9yIGFuIGltcG9ydGVkIHJlZXhwb3J0LiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgdGhlXG4gICAgICAvLyByZXdyaXRpbmcgYWxzbyBoYXMgbWFkZSBpdCBiZWhhdmUgZGlmZmVyZW50IGZyb20gZXhwbGljaXQgbmFtZWQgZXhwb3J0XG4gICAgICAvLyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgZGVjbGFyYXRpb24gYXBwZWFycyB0byBwb2ludCBhdCB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGxvY2F0aW9uIG5vdCB0aGUgcmVleHBvcnQgbG9jYXRpb24uICBTaW5jZSB3ZSBjYW4ndCBmaWd1cmUgb3V0IHdoZXRoZXJcbiAgICAgIC8vIHRoZXJlIGlzIGEgbG9jYWwgaW1wb3J0IGhlcmUsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoZC5nZXRTb3VyY2VGaWxlKCkgIT09IG9yaWdTb3VyY2VGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQGludGVybmFsIG1hcmtlZCBBUElzIGFyZSBub3QgZXhwb3J0ZWQsIHNvIG11c3Qgbm90IGdldCBhbGlhc2VzLlxuICAgICAgLy8gVGhpcyB1c2VzIGFuIGludGVybmFsIFRTIEFQSSwgYXNzdW1pbmcgdGhhdCBhY2Nlc3NpbmcgdGhpcyB3aWxsIGJlIG1vcmUgc3RhYmxlIGNvbXBhcmVkIHRvXG4gICAgICAvLyBpbXBsZW1lbnRpbmcgb3VyIG93biB2ZXJzaW9uLlxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbiAgICAgIGlmIChvcHRpb25zLnN0cmlwSW50ZXJuYWwgJiYgKHRzIGFzIGFueSkuaXNJbnRlcm5hbERlY2xhcmF0aW9uKGQsIG9yaWdTb3VyY2VGaWxlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHMuaXNFeHBvcnRTcGVjaWZpZXIoZCkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHB1cmUgZXhwb3J0IChjYXNlIDEpIHRodXMgc2FmZSB0byBlbWl0IGNsdXR6IGFsaWFzLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGQgaXMgdXNlbGVzcyB0byBzZXBhcmF0ZSByZWV4cG9ydCBhbmQgaW1wb3J0LXJlZXhwb3J0XG4gICAgICAvLyBiZWNhdXNlIHRoZXkgYm90aCBwb2ludCB0byB0aGUgcmVleHBvcnRpbmcgZmlsZSBhbmQgbm90IHRvIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gb25lLiAgSG93ZXZlciwgdGhlcmUgaXMgYW5vdGhlciB0cyBBUEkgdGhhdCBjYW4gZG8gYSBkZWVwZXIgcmVzb2x1dGlvbi5cbiAgICAgIGNvbnN0IGxvY2FsU3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0RXhwb3J0U3BlY2lmaWVyTG9jYWxUYXJnZXRTeW1ib2woZCk7XG4gICAgICAvLyBJIGRvbid0IGtub3cgaG93IGNhbiB0aGlzIGhhcHBlbiwgYnV0IGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBgZGVjbGFyYXRpb25zYCBpcyB1bmRlZmluZWQgZm9yIGJ1aWx0aW4gc3ltYm9scywgc3VjaCBhcyBgdW5rbm93bmAuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBJbiBjYXNlIG9mIG5vIGltcG9ydCB3ZSBlbmRlZCB1cCBpbiBhIGRlY2xhcmF0aW9uIGluIGZvby50cywgd2hpbGUgaW5cbiAgICAgIC8vIGNhc2Ugb2YgaGF2aW5nIGFuIGltcG9ydCBsb2NhbEQgaXMgc3RpbGwgaW4gdGhlIHJlZXhwb3JpbmcgZmlsZS5cbiAgICAgIGZvciAoY29uc3QgbG9jYWxEIG9mIGxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAobG9jYWxELmdldFNvdXJjZUZpbGUoKSAhPT0gb3JpZ1NvdXJjZUZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBpZiAoIWxvY2FsRXhwb3J0cy5sZW5ndGgpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyBUeXBlU2NyaXB0IDIuOCBhbmQgVHlwZVNjcmlwdCAyLjkgZGlmZmVyIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVcbiAgLy8gbW9kdWxlIHN5bWJvbHMgY29tZSBvdXQsIHNvIHNvcnQgaGVyZSB0byBtYWtlIHRoZSB0ZXN0cyBzdGFibGUuXG4gIGxvY2FsRXhwb3J0cy5zb3J0KChhLCBiKSA9PiBzdHJpbmdDb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IGNsdXR6TW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csICckJyk7XG5cbiAgLy8gQ2x1dHogbWlnaHQgcmVmZXIgdG8gdGhlIG5hbWUgaW4gdHdvIGRpZmZlcmVudCBmb3JtcyAoc3RlbW1pbmcgZnJvbSBnb29nLnByb3ZpZGUgYW5kXG4gIC8vIGdvb2cubW9kdWxlIHJlc3BlY3RpdmVseSkuXG4gIC8vIDEpIGdsb2JhbCBpbiBjbHV0ejogICDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRjb250ZW50cyRwYXRoJHRvJG1vZHVsZV9TeW1ib2wuLi5cbiAgLy8gMikgbG9jYWwgaW4gYSBtb2R1bGU6IOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkcGF0aCR0byRtb2R1bGUuU3ltYm9sIC4uXG4gIC8vIFNlZSBleGFtcGxlcyBhdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY2x1dHovdHJlZS9tYXN0ZXIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2phdmFzY3JpcHQvY2x1dHpcblxuICAvLyBDYXNlICgxKSBmcm9tIGFib3ZlLlxuICBsZXQgZ2xvYmFsU3ltYm9scyA9ICcnO1xuICAvLyBDYXNlICgyKSBmcm9tIGFib3ZlLlxuICBsZXQgbmVzdGVkU3ltYm9scyA9ICcnO1xuICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBsb2NhbEV4cG9ydHMpIHtcbiAgICBsZXQgbG9jYWxOYW1lID0gc3ltYm9sLm5hbWU7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBzeW1ib2wuZGVjbGFyYXRpb25zLmZpbmQoZCA9PiBkLmdldFNvdXJjZUZpbGUoKSA9PT0gb3JpZ1NvdXJjZUZpbGUpO1xuICAgIGlmIChkZWNsYXJhdGlvbiAmJiB0cy5pc0V4cG9ydFNwZWNpZmllcihkZWNsYXJhdGlvbikgJiYgZGVjbGFyYXRpb24ucHJvcGVydHlOYW1lKSB7XG4gICAgICAvLyBJZiBkZWNsYXJlZCBpbiBhbiBcImV4cG9ydCB7WCBhcyBZfTtcIiBleHBvcnQgc3BlY2lmaWVyLCB0aGVuIFggKHN0b3JlZCBpbiBwcm9wZXJ0eU5hbWUpIGlzXG4gICAgICAvLyB0aGUgbG9jYWwgbmFtZSB0aGF0IHJlc29sdmVzIHdpdGhpbiB0aGUgbW9kdWxlLCB3aGVyZWFzIFkgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGV4cG9ydHMsXG4gICAgICAvLyBpLmUuIHRoZSBuYW1lIHVzZWQgdG8gYWRkcmVzcyB0aGUgc3ltYm9sIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLlxuICAgICAgLy8gVXNlIHRoZSBsb2NhbE5hbWUgZm9yIHRoZSBleHBvcnQgdGhlbiwgYnV0IHB1Ymxpc2ggdW5kZXIgdGhlIGV4dGVybmFsIG5hbWUuXG4gICAgICBsb2NhbE5hbWUgPSBkZWNsYXJhdGlvbi5wcm9wZXJ0eU5hbWUudGV4dDtcbiAgICB9XG4gICAgZ2xvYmFsU3ltYm9scyArPVxuICAgICAgICBgXFx0XFx0ZXhwb3J0IHske2xvY2FsTmFtZX0gYXMgbW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke3N5bWJvbC5uYW1lfX1cXG5gO1xuICAgIG5lc3RlZFN5bWJvbHMgKz1cbiAgICAgICAgYFxcdFxcdGV4cG9ydCB7bW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke3N5bWJvbC5uYW1lfSBhcyAke3N5bWJvbC5uYW1lfX1cXG5gO1xuICB9XG5cbiAgZHRzRmlsZUNvbnRlbnQgKz0gJ2RlY2xhcmUgZ2xvYmFsIHtcXG4nO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0bmFtZXNwYWNlIOCyoF/gsqAuY2x1dHoge1xcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGdsb2JhbFN5bWJvbHM7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHR9XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdG5hbWVzcGFjZSDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRleHBvcnRzJCR7Y2x1dHpNb2R1bGVOYW1lfSB7XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gbmVzdGVkU3ltYm9scztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdH1cXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSAnfVxcbic7XG5cbiAgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xufVxuXG5mdW5jdGlvbiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LFxuICAgIGRlbGVnYXRlRmFjdG9yeTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+KTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IGRlbGVnYXRlRmFjdG9yeShjb250ZXh0KTtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGlmIChob3N0LnNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhzb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWxlZ2F0ZShzb3VyY2VGaWxlKTtcbiAgICB9O1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBR2pDLHlEQUE2QztJQUM3QyxpR0FBZ0Y7SUFDaEYsdURBQWlGO0lBQ2pGLG1FQUFtRDtJQUNuRCxpREFBMEM7SUFDMUMsbUdBQXVGO0lBQ3ZGLHFEQUEyQztJQUMzQyxxRUFBMkU7SUFDM0UsbUVBQW1EO0lBQ25ELG1FQUFpRDtJQUVqRCw0REFBNEQ7SUFDNUQsdURBQStDO0lBQXZDLHlDQUFBLGdCQUFnQixDQUFBO0lBQ3hCLHVDQUF1QztJQUN2QywrQ0FBOEM7SUFBdEMsd0NBQUEsbUJBQW1CLENBQUE7SUFDM0IsaUVBQTREO0lBQTNDLDZDQUFBLGVBQWUsQ0FBQTtJQW1DaEMsU0FBZ0IsZ0JBQWdCLENBQUMsV0FBeUI7UUFDeEQsTUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUM7UUFDakQsTUFBTSxlQUFlLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDNUMsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFO2dCQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FB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QyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsVUFBeUIsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELE9BQU8sVUFBVSxDQUFDO2lCQUNuQjtnQkFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBbm5vdGF0b3JIb3N0fSBmcm9tICcuL2Fubm90YXRvcl9ob3N0JztcbmltcG9ydCB7YXNzZXJ0QWJzb2x1dGV9IGZyb20gJy4vY2xpX3N1cHBvcnQnO1xuaW1wb3J0IHtkZWNvcmF0b3JEb3dubGV2ZWxUcmFuc2Zvcm1lcn0gZnJvbSAnLi9kZWNvcmF0b3JfZG93bmxldmVsX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7dHJhbnNmb3JtRGVjb3JhdG9yc091dHB1dEZvckNsb3N1cmVQcm9wZXJ0eVJlbmFtaW5nfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtlbnVtVHJhbnNmb3JtZXJ9IGZyb20gJy4vZW51bV90cmFuc2Zvcm1lcic7XG5pbXBvcnQge2dlbmVyYXRlRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmltcG9ydCB7dHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3Rvcnl9IGZyb20gJy4vZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXInO1xuaW1wb3J0ICogYXMgZ29vZ21vZHVsZSBmcm9tICcuL2dvb2dtb2R1bGUnO1xuaW1wb3J0IHtqc2RvY1RyYW5zZm9ybWVyLCByZW1vdmVUeXBlQXNzZXJ0aW9uc30gZnJvbSAnLi9qc2RvY190cmFuc2Zvcm1lcic7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcbmltcG9ydCB7aXNEdHNGaWxlTmFtZX0gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLy8gRXhwb3J0ZWQgZm9yIHVzZXJzIGFzIGEgZGVmYXVsdCBpbXBsIG9mIHBhdGhUb01vZHVsZU5hbWUuXG5leHBvcnQge3BhdGhUb01vZHVsZU5hbWV9IGZyb20gJy4vY2xpX3N1cHBvcnQnO1xuLy8gUmV0YWluZWQgaGVyZSBmb3IgQVBJIGNvbXBhdGliaWxpdHkuXG5leHBvcnQge2dldEdlbmVyYXRlZEV4dGVybnN9IGZyb20gJy4vZXh0ZXJucyc7XG5leHBvcnQge0ZpbGVNYXAsIE1vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUc2lja2xlSG9zdCBleHRlbmRzIGdvb2dtb2R1bGUuR29vZ01vZHVsZVByb2Nlc3Nvckhvc3QsIEFubm90YXRvckhvc3Qge1xuICAvKipcbiAgICogV2hldGhlciB0byBkb3dubGV2ZWwgZGVjb3JhdG9yc1xuICAgKi9cbiAgdHJhbnNmb3JtRGVjb3JhdG9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udmVycyB0eXBlcyB0byBjbG9zdXJlXG4gICAqL1xuICB0cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGFsaWFzZXMgdG8gdGhlIC5kLnRzIGZpbGVzIHRvIGFkZCB0aGUgZXhwb3J0cyB0byB0aGVcbiAgICog4LKgX+CyoC5jbHV0eiBuYW1lc3BhY2UuXG4gICAqL1xuICBhZGREdHNDbHV0ekFsaWFzZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0c2lja2xlIGFuZCBkZWNvcmF0b3IgZG93bmxldmVsIHByb2Nlc3Npbmcgd2lsbCBiZSBza2lwcGVkIGZvclxuICAgKiB0aGF0IGZpbGUuXG4gICAqL1xuICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3NpbmcoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRzaWNrbGUgdHJlYXRzIHdhcm5pbmdzIGFzIGVycm9ycywgaWYgdHJ1ZSwgaWdub3JlIHdhcm5pbmdzLiAgVGhpcyBtaWdodCBiZVxuICAgKiB1c2VmdWwgZm9yIGUuZy4gdGhpcmQgcGFydHkgY29kZS5cbiAgICovXG4gIHNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aChmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBjb252ZXJ0IENvbW1vbkpTIHJlcXVpcmUoKSBpbXBvcnRzIHRvIGdvb2cubW9kdWxlKCkgYW5kIGdvb2cucmVxdWlyZSgpIGNhbGxzLiAqL1xuICBnb29nbW9kdWxlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFbWl0UmVzdWx0cyhlbWl0UmVzdWx0czogRW1pdFJlc3VsdFtdKTogRW1pdFJlc3VsdCB7XG4gIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgbGV0IGVtaXRTa2lwcGVkID0gdHJ1ZTtcbiAgY29uc3QgZW1pdHRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleHRlcm5zOiB7W2ZpbGVOYW1lOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gIGNvbnN0IG1vZHVsZXNNYW5pZmVzdCA9IG5ldyBNb2R1bGVzTWFuaWZlc3QoKTtcbiAgZm9yIChjb25zdCBlciBvZiBlbWl0UmVzdWx0cykge1xuICAgIGRpYWdub3N0aWNzLnB1c2goLi4uZXIuZGlhZ25vc3RpY3MpO1xuICAgIGVtaXRTa2lwcGVkID0gZW1pdFNraXBwZWQgfHwgZXIuZW1pdFNraXBwZWQ7XG4gICAgaWYgKGVyLmVtaXR0ZWRGaWxlcykge1xuICAgICAgZW1pdHRlZEZpbGVzLnB1c2goLi4uZXIuZW1pdHRlZEZpbGVzKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihleHRlcm5zLCBlci5leHRlcm5zKTtcbiAgICBtb2R1bGVzTWFuaWZlc3QuYWRkTWFuaWZlc3QoZXIubW9kdWxlc01hbmlmZXN0KTtcbiAgfVxuICByZXR1cm4ge2RpYWdub3N0aWNzLCBlbWl0U2tpcHBlZCwgZW1pdHRlZEZpbGVzLCBleHRlcm5zLCBtb2R1bGVzTWFuaWZlc3R9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZXN1bHQgZXh0ZW5kcyB0cy5FbWl0UmVzdWx0IHtcbiAgLy8gVGhlIG1hbmlmZXN0IG9mIEpTIG1vZHVsZXMgb3V0cHV0IGJ5IHRoZSBjb21waWxlci5cbiAgbW9kdWxlc01hbmlmZXN0OiBNb2R1bGVzTWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBleHRlcm5zLmpzIGZpbGVzIHByb2R1Y2VkIGJ5IHRzaWNrbGUsIGlmIGFueS4gbW9kdWxlIElEcyBhcmUgcmVsYXRpdmUgcGF0aHMgZnJvbVxuICAgKiBmaWxlTmFtZVRvTW9kdWxlSWQuXG4gICAqL1xuICBleHRlcm5zOiB7W21vZHVsZUlkOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRUcmFuc2Zvcm1lcnMge1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBiZWZvcmUgVHNpY2tsZSAuanMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBiZWZvcmVUc2lja2xlPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydiZWZvcmUnXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYmVmb3JlIGJ1aWx0LWluIC5qcyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGJlZm9yZVRzPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydiZWZvcmUnXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYWZ0ZXIgYnVpbHQtaW4gLmpzIHRyYW5zZm9ybWF0aW9ucy4gKi9cbiAgYWZ0ZXJUcz86IHRzLkN1c3RvbVRyYW5zZm9ybWVyc1snYWZ0ZXInXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYWZ0ZXIgYnVpbHQtaW4gLmQudHMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBhZnRlckRlY2xhcmF0aW9ucz86IHRzLkN1c3RvbVRyYW5zZm9ybWVyc1snYWZ0ZXJEZWNsYXJhdGlvbnMnXTtcbn1cblxuXG4vKiogQGRlcHJlY2F0ZWQgRXhwb3NlZCBmb3IgYmFja3dhcmQgY29tcGF0IHdpdGggQW5ndWxhci4gIFVzZSBlbWl0KCkgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2l0aFRzaWNrbGUoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHRzSG9zdDogdHMuQ29tcGlsZXJIb3N0LCB0c09wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgd3JpdGVGaWxlPzogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sXG4gICAgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgcmV0dXJuIGVtaXQoXG4gICAgICBwcm9ncmFtLCBob3N0LCB3cml0ZUZpbGUgfHwgdHNIb3N0LndyaXRlRmlsZS5iaW5kKHRzSG9zdCksIHRhcmdldFNvdXJjZUZpbGUsXG4gICAgICBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgY3VzdG9tVHJhbnNmb3JtZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXQoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHdyaXRlRmlsZTogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgdGFyZ2V0U291cmNlRmlsZT86IHRzLlNvdXJjZUZpbGUsIGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW4sXG4gICAgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sIGN1c3RvbVRyYW5zZm9ybWVyczogRW1pdFRyYW5zZm9ybWVycyA9IHt9KTogRW1pdFJlc3VsdCB7XG4gIGZvciAoY29uc3Qgc2Ygb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgYXNzZXJ0QWJzb2x1dGUoc2YuZmlsZU5hbWUpO1xuICB9XG5cbiAgbGV0IHRzaWNrbGVEaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0c09wdGlvbnMgPSBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpO1xuICBjb25zdCB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzOiBBcnJheTx0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4+ID0gW107XG4gIGlmIChob3N0LnRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlKSB7XG4gICAgLy8gT25seSBhZGQgQHN1cHByZXNzIHtjaGVja1R5cGVzfSBjb21tZW50cyB3aGVuIGFsc28gYWRkaW5nIHR5cGUgYW5ub3RhdGlvbnMuXG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICB0cmFuc2Zvcm1GaWxlb3ZlcnZpZXdDb21tZW50RmFjdG9yeSh0c09wdGlvbnMsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAganNkb2NUcmFuc2Zvcm1lcihob3N0LCB0c09wdGlvbnMsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZW51bVRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuICBpZiAoaG9zdC50cmFuc2Zvcm1EZWNvcmF0b3JzKSB7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKGRlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuICBjb25zdCBtb2R1bGVzTWFuaWZlc3QgPSBuZXcgTW9kdWxlc01hbmlmZXN0KCk7XG4gIGNvbnN0IHRzVHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7XG4gICAgYmVmb3JlOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzaWNrbGUgfHwgW10pLFxuICAgICAgLi4uKHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMgfHwgW10pLm1hcCh0ZiA9PiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKGhvc3QsIHRmKSksXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzIHx8IFtdKSxcbiAgICBdLFxuICAgIGFmdGVyOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyVHMgfHwgW10pLFxuICAgIF0sXG4gICAgYWZ0ZXJEZWNsYXJhdGlvbnM6IGN1c3RvbVRyYW5zZm9ybWVycy5hZnRlckRlY2xhcmF0aW9ucyxcbiAgfTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBTZWUgY29tbWVudCBvbiByZW1vdGVUeXBlQXNzZXJ0aW9ucy5cbiAgICB0c1RyYW5zZm9ybWVycy5iZWZvcmUhLnB1c2gocmVtb3ZlVHlwZUFzc2VydGlvbnMoKSk7XG4gIH1cbiAgaWYgKGhvc3QuZ29vZ21vZHVsZSkge1xuICAgIHRzVHJhbnNmb3JtZXJzLmFmdGVyIS5wdXNoKGdvb2dtb2R1bGUuY29tbW9uSnNUb0dvb2dtb2R1bGVUcmFuc2Zvcm1lcihcbiAgICAgICAgaG9zdCwgbW9kdWxlc01hbmlmZXN0LCB0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNUcmFuc2Zvcm1lcnMuYWZ0ZXIhLnB1c2goXG4gICAgICAgIHRyYW5zZm9ybURlY29yYXRvcnNPdXRwdXRGb3JDbG9zdXJlUHJvcGVydHlSZW5hbWluZyh0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuXG4gIC8vIFdyYXAgdGhlIHdyaXRlRmlsZSBjYWxsYmFjayB0byBob29rIHdyaXRpbmcgb2YgdGhlIGR0cyBmaWxlLlxuICBjb25zdCB3cml0ZUZpbGVJbXBsOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayA9XG4gICAgICAoZmlsZU5hbWUsIGNvbnRlbnQsIHdyaXRlQnl0ZU9yZGVyTWFyaywgb25FcnJvciwgc291cmNlRmlsZXMpID0+IHtcbiAgICAgICAgYXNzZXJ0QWJzb2x1dGUoZmlsZU5hbWUpO1xuICAgICAgICBpZiAoaG9zdC5hZGREdHNDbHV0ekFsaWFzZXMgJiYgaXNEdHNGaWxlTmFtZShmaWxlTmFtZSkgJiYgc291cmNlRmlsZXMpIHtcbiAgICAgICAgICAvLyBPbmx5IGJ1bmRsZSBlbWl0cyBwYXNzIG1vcmUgdGhhbiBvbmUgc291cmNlIGZpbGUgZm9yIC5kLnRzIHdyaXRlcy4gQnVuZGxlIGVtaXRzIGhvd2V2ZXJcbiAgICAgICAgICAvLyBhcmUgbm90IHN1cHBvcnRlZCBieSB0c2lja2xlLCBhcyB3ZSBjYW5ub3QgYW5ub3RhdGUgdGhlbSBmb3IgQ2xvc3VyZSBpbiBhbnkgbWVhbmluZ2Z1bFxuICAgICAgICAgIC8vIHdheSBhbnl3YXkuXG4gICAgICAgICAgaWYgKCFzb3VyY2VGaWxlcyB8fCBzb3VyY2VGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGV4YWN0bHkgb25lIHNvdXJjZSBmaWxlIGZvciAuZC50cyBlbWl0LCBnb3QgJHtcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWxlcy5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNvdXJjZSA9IHNvdXJjZUZpbGVzWzBdO1xuICAgICAgICAgIGNvbnRlbnQgPSBhZGRDbHV0ekFsaWFzZXMoY29udGVudCwgb3JpZ2luYWxTb3VyY2UsIHR5cGVDaGVja2VyLCBob3N0LCB0c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlRmlsZShmaWxlTmFtZSwgY29udGVudCwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcyk7XG4gICAgICB9O1xuXG4gIGNvbnN0IHtkaWFnbm9zdGljczogdHNEaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc30gPSBwcm9ncmFtLmVtaXQoXG4gICAgICB0YXJnZXRTb3VyY2VGaWxlLCB3cml0ZUZpbGVJbXBsLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgdHNUcmFuc2Zvcm1lcnMpO1xuXG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlcyA9IHRhcmdldFNvdXJjZUZpbGUgPyBbdGFyZ2V0U291cmNlRmlsZV0gOiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCk7XG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICBjb25zdCBpc0R0cyA9IGlzRHRzRmlsZU5hbWUoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICBpZiAoaXNEdHMgJiYgaG9zdC5zaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmcoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7b3V0cHV0LCBkaWFnbm9zdGljc30gPSBnZW5lcmF0ZUV4dGVybnMoXG4gICAgICAgICAgdHlwZUNoZWNrZXIsIHNvdXJjZUZpbGUsIGhvc3QsIGhvc3QubW9kdWxlUmVzb2x1dGlvbkhvc3QsIHByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCkpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBleHRlcm5zW3NvdXJjZUZpbGUuZmlsZU5hbWVdID0gb3V0cHV0O1xuICAgICAgfVxuICAgICAgaWYgKGRpYWdub3N0aWNzKSB7XG4gICAgICAgIHRzaWNrbGVEaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdub3N0aWNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWxsIGRpYWdub3N0aWNzIChpbmNsdWRpbmcgd2FybmluZ3MpIGFyZSB0cmVhdGVkIGFzIGVycm9ycy5cbiAgLy8gSWYgdGhlIGhvc3QgZGVjaWRlcyB0byBpZ25vcmUgd2FybmluZ3MsIGp1c3QgZGlzY2FyZCB0aGVtLlxuICAvLyBXYXJuaW5ncyBpbmNsdWRlIHN0dWZmIGxpa2UgXCJkb24ndCB1c2UgQHR5cGUgaW4geW91ciBqc2RvY1wiOyB0c2lja2xlXG4gIC8vIHdhcm5zIGFuZCB0aGVuIGZpeGVzIHVwIHRoZSBjb2RlIHRvIGJlIENsb3N1cmUtY29tcGF0aWJsZSBhbnl3YXkuXG4gIHRzaWNrbGVEaWFnbm9zdGljcyA9IHRzaWNrbGVEaWFnbm9zdGljcy5maWx0ZXIoXG4gICAgICBkID0+IGQuY2F0ZWdvcnkgPT09IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvciB8fFxuICAgICAgICAgICFob3N0LnNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aChkLmZpbGUhLmZpbGVOYW1lKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2R1bGVzTWFuaWZlc3QsXG4gICAgZW1pdFNraXBwZWQsXG4gICAgZW1pdHRlZEZpbGVzOiBlbWl0dGVkRmlsZXMgfHwgW10sXG4gICAgZGlhZ25vc3RpY3M6IFsuLi50c0RpYWdub3N0aWNzLCAuLi50c2lja2xlRGlhZ25vc3RpY3NdLFxuICAgIGV4dGVybnNcbiAgfTtcbn1cblxuLyoqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbnVtYmVyIHN1aXRhYmxlIGZvciB1c2UgaW4gc29ydCgpLiAqL1xuZnVuY3Rpb24gc3RyaW5nQ29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBBIHRzaWNrbGUgcHJvZHVjZWQgZGVjbGFyYXRpb24gZmlsZSBtaWdodCBiZSBjb25zdW1lZCBiZSByZWZlcmVuY2VkIGJ5IENsdXR6XG4gKiBwcm9kdWNlZCAuZC50cyBmaWxlcywgd2hpY2ggdXNlIHN5bWJvbCBuYW1lcyBiYXNlZCBvbiBDbG9zdXJlJ3MgaW50ZXJuYWxcbiAqIG5hbWluZyBjb252ZW50aW9ucywgc28gd2UgbmVlZCB0byBwcm92aWRlIGFsaWFzZXMgZm9yIGFsbCB0aGUgZXhwb3J0ZWQgc3ltYm9sc1xuICogaW4gdGhlIENsdXR6IG5hbWluZyBjb252ZW50aW9uLlxuICovXG5mdW5jdGlvbiBhZGRDbHV0ekFsaWFzZXMoXG4gICAgZHRzRmlsZUNvbnRlbnQ6IHN0cmluZywgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LCBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2R1bGVTeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlU3ltYm9sICYmIHR5cGVDaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpO1xuICBpZiAoIW1vZHVsZUV4cG9ydHMpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyAuZC50cyBmaWxlcyBjYW4gYmUgdHJhbnNmb3JtZWQsIHRvbywgc28gd2UgbmVlZCB0byBjb21wYXJlIHRoZSBvcmlnaW5hbCBub2RlIGJlbG93LlxuICBjb25zdCBvcmlnU291cmNlRmlsZSA9IHRzLmdldE9yaWdpbmFsTm9kZShzb3VyY2VGaWxlKTtcbiAgLy8gSW4gb3JkZXIgdG8gd3JpdGUgYWxpYXNlcywgdGhlIGV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4gIC8vIHRoZSBtb2R1bGUgc2NvcGUuIFRoYXQgaXMgbm90IGFsd2F5cyB0aGUgY2FzZTpcbiAgLy9cbiAgLy8gZXhwb3J0XG4gIC8vIDEpIGV4cG9ydCBjb25zdCBYOyAgICAgICAgICAgLy8gd29ya3NcbiAgLy9cbiAgLy8gcmVleHBvcnRcbiAgLy8gMikgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7ICAvLyBkb2Vzbid0XG4gIC8vXG4gIC8vIGltcG9ydGVkIHJlZXhwb3J0XG4gIC8vIDMpIGltcG9ydCB7WH0gZnJvbSAnLi9mb28nOyAgLy8gd29ya3NcbiAgLy8gICAgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7XG4gIC8vXG4gIC8vIGdldEV4cG9ydHNPZk1vZHVsZSByZXR1cm5zIGFsbCB0aHJlZSB0eXBlcywgYnV0IHdlIG5lZWQgdG8gc2VwYXJhdGUgMikuXG4gIC8vIEZvciBub3cgd2UgJ2ZpeCcgMikgYnkgc2ltcGx5IG5vdCBlbWl0dGluZyBhIGNsdXR6IGFsaWFzLCBzaW5jZSBjbHV0elxuICAvLyBpbnRlcm9wIGlzIHVzZWQgaW4gbWlub3JpdHkgb2Ygc2NlbmFyaW9zLlxuICAvL1xuICAvLyBUT0RPKHJhZG9raXJvdik6IGF0dGVtcHQgdG8gYWRkIGFwcHJvcHJpYXRlIGltcG9ydHMgZm9yIDIpIHNvIHRoYXRcbiAgLy8gY3VycmVudGx5IGZpbmRpbmcgb3V0IGxvY2FsIGFwcGVhcnMgZXZlbiBoYXJkZXIgdGhhbiBmaXhpbmcgZXhwb3J0cy5cbiAgY29uc3QgbG9jYWxFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy5maWx0ZXIoZSA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgYmUgY29uc2VydmF0aXZlIGFuZCBkb24ndCBlbWl0IHRoZSBhbGlhc2VzLlxuICAgIC8vIEkgZG9uJ3Qga25vdyBob3cgY2FuIHRoaXMgaGFwcGVuLCB3ZSBoYXZlIG5vIHRlc3RzIHRoYXQgZXhjZXJjaXNlIGl0LlxuICAgIGlmICghZS5kZWNsYXJhdGlvbnMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNraXAgZGVmYXVsdCBleHBvcnRzLCB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAvLyBkZWZhdWx0IGlzIGEga2V5d29yZCBpbiB0eXBlc2NyaXB0LCBzbyB0aGUgbmFtZSBvZiB0aGUgZXhwb3J0IGJlaW5nXG4gICAgLy8gZGVmYXVsdCBtZWFucyB0aGF0IGl0J3MgYSBkZWZhdWx0IGV4cG9ydC5cbiAgICBpZiAoZS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSB0aGUgZGVjbGFyYXRpb24gbG9jYXRpb24gdG8gZGV0ZXJtaW5lIHNlcGFyYXRlIGNhc2VzIGFib3ZlLlxuICAgIGZvciAoY29uc3QgZCBvZiBlLmRlY2xhcmF0aW9ucykge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgZXhwb3J0ICouIFRlY2huaWNhbGx5LCBpdCBpcyBvdXRzaWRlIHRoZVxuICAgICAgLy8gdGhyZWUgY2FzZXMgb3V0bGluZWQsIGJ1dCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgcmV3cml0dGVuIGl0IHRvIGFcbiAgICAgIC8vIHJlZXhwb3J0IG9yIGFuIGltcG9ydGVkIHJlZXhwb3J0LiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgdGhlXG4gICAgICAvLyByZXdyaXRpbmcgYWxzbyBoYXMgbWFkZSBpdCBiZWhhdmUgZGlmZmVyZW50IGZyb20gZXhwbGljaXQgbmFtZWQgZXhwb3J0XG4gICAgICAvLyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgZGVjbGFyYXRpb24gYXBwZWFycyB0byBwb2ludCBhdCB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGxvY2F0aW9uIG5vdCB0aGUgcmVleHBvcnQgbG9jYXRpb24uICBTaW5jZSB3ZSBjYW4ndCBmaWd1cmUgb3V0IHdoZXRoZXJcbiAgICAgIC8vIHRoZXJlIGlzIGEgbG9jYWwgaW1wb3J0IGhlcmUsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoZC5nZXRTb3VyY2VGaWxlKCkgIT09IG9yaWdTb3VyY2VGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQGludGVybmFsIG1hcmtlZCBBUElzIGFyZSBub3QgZXhwb3J0ZWQsIHNvIG11c3Qgbm90IGdldCBhbGlhc2VzLlxuICAgICAgLy8gVGhpcyB1c2VzIGFuIGludGVybmFsIFRTIEFQSSwgYXNzdW1pbmcgdGhhdCBhY2Nlc3NpbmcgdGhpcyB3aWxsIGJlIG1vcmUgc3RhYmxlIGNvbXBhcmVkIHRvXG4gICAgICAvLyBpbXBsZW1lbnRpbmcgb3VyIG93biB2ZXJzaW9uLlxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbiAgICAgIGlmIChvcHRpb25zLnN0cmlwSW50ZXJuYWwgJiYgKHRzIGFzIGFueSkuaXNJbnRlcm5hbERlY2xhcmF0aW9uKGQsIG9yaWdTb3VyY2VGaWxlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHMuaXNFeHBvcnRTcGVjaWZpZXIoZCkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHB1cmUgZXhwb3J0IChjYXNlIDEpIHRodXMgc2FmZSB0byBlbWl0IGNsdXR6IGFsaWFzLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGQgaXMgdXNlbGVzcyB0byBzZXBhcmF0ZSByZWV4cG9ydCBhbmQgaW1wb3J0LXJlZXhwb3J0XG4gICAgICAvLyBiZWNhdXNlIHRoZXkgYm90aCBwb2ludCB0byB0aGUgcmVleHBvcnRpbmcgZmlsZSBhbmQgbm90IHRvIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gb25lLiAgSG93ZXZlciwgdGhlcmUgaXMgYW5vdGhlciB0cyBBUEkgdGhhdCBjYW4gZG8gYSBkZWVwZXIgcmVzb2x1dGlvbi5cbiAgICAgIGNvbnN0IGxvY2FsU3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0RXhwb3J0U3BlY2lmaWVyTG9jYWxUYXJnZXRTeW1ib2woZCk7XG4gICAgICAvLyBJIGRvbid0IGtub3cgaG93IGNhbiB0aGlzIGhhcHBlbiwgYnV0IGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBgZGVjbGFyYXRpb25zYCBpcyB1bmRlZmluZWQgZm9yIGJ1aWx0aW4gc3ltYm9scywgc3VjaCBhcyBgdW5rbm93bmAuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBJbiBjYXNlIG9mIG5vIGltcG9ydCB3ZSBlbmRlZCB1cCBpbiBhIGRlY2xhcmF0aW9uIGluIGZvby50cywgd2hpbGUgaW5cbiAgICAgIC8vIGNhc2Ugb2YgaGF2aW5nIGFuIGltcG9ydCBsb2NhbEQgaXMgc3RpbGwgaW4gdGhlIHJlZXhwb3JpbmcgZmlsZS5cbiAgICAgIGZvciAoY29uc3QgbG9jYWxEIG9mIGxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAobG9jYWxELmdldFNvdXJjZUZpbGUoKSAhPT0gb3JpZ1NvdXJjZUZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBpZiAoIWxvY2FsRXhwb3J0cy5sZW5ndGgpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyBUeXBlU2NyaXB0IDIuOCBhbmQgVHlwZVNjcmlwdCAyLjkgZGlmZmVyIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVcbiAgLy8gbW9kdWxlIHN5bWJvbHMgY29tZSBvdXQsIHNvIHNvcnQgaGVyZSB0byBtYWtlIHRoZSB0ZXN0cyBzdGFibGUuXG4gIGxvY2FsRXhwb3J0cy5zb3J0KChhLCBiKSA9PiBzdHJpbmdDb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IGNsdXR6TW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csICckJyk7XG5cbiAgLy8gQ2x1dHogbWlnaHQgcmVmZXIgdG8gdGhlIG5hbWUgaW4gdHdvIGRpZmZlcmVudCBmb3JtcyAoc3RlbW1pbmcgZnJvbSBnb29nLnByb3ZpZGUgYW5kXG4gIC8vIGdvb2cubW9kdWxlIHJlc3BlY3RpdmVseSkuXG4gIC8vIDEpIGdsb2JhbCBpbiBjbHV0ejogICDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRjb250ZW50cyRwYXRoJHRvJG1vZHVsZV9TeW1ib2wuLi5cbiAgLy8gMikgbG9jYWwgaW4gYSBtb2R1bGU6IOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkcGF0aCR0byRtb2R1bGUuU3ltYm9sIC4uXG4gIC8vIFNlZSBleGFtcGxlcyBhdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY2x1dHovdHJlZS9tYXN0ZXIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2phdmFzY3JpcHQvY2x1dHpcblxuICAvLyBDYXNlICgxKSBmcm9tIGFib3ZlLlxuICBsZXQgZ2xvYmFsU3ltYm9scyA9ICcnO1xuICAvLyBDYXNlICgyKSBmcm9tIGFib3ZlLlxuICBsZXQgbmVzdGVkU3ltYm9scyA9ICcnO1xuICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBsb2NhbEV4cG9ydHMpIHtcbiAgICBsZXQgbG9jYWxOYW1lID0gc3ltYm9sLm5hbWU7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBzeW1ib2wuZGVjbGFyYXRpb25zLmZpbmQoZCA9PiBkLmdldFNvdXJjZUZpbGUoKSA9PT0gb3JpZ1NvdXJjZUZpbGUpO1xuICAgIGlmIChkZWNsYXJhdGlvbiAmJiB0cy5pc0V4cG9ydFNwZWNpZmllcihkZWNsYXJhdGlvbikgJiYgZGVjbGFyYXRpb24ucHJvcGVydHlOYW1lKSB7XG4gICAgICAvLyBJZiBkZWNsYXJlZCBpbiBhbiBcImV4cG9ydCB7WCBhcyBZfTtcIiBleHBvcnQgc3BlY2lmaWVyLCB0aGVuIFggKHN0b3JlZCBpbiBwcm9wZXJ0eU5hbWUpIGlzXG4gICAgICAvLyB0aGUgbG9jYWwgbmFtZSB0aGF0IHJlc29sdmVzIHdpdGhpbiB0aGUgbW9kdWxlLCB3aGVyZWFzIFkgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGV4cG9ydHMsXG4gICAgICAvLyBpLmUuIHRoZSBuYW1lIHVzZWQgdG8gYWRkcmVzcyB0aGUgc3ltYm9sIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLlxuICAgICAgLy8gVXNlIHRoZSBsb2NhbE5hbWUgZm9yIHRoZSBleHBvcnQgdGhlbiwgYnV0IHB1Ymxpc2ggdW5kZXIgdGhlIGV4dGVybmFsIG5hbWUuXG4gICAgICBsb2NhbE5hbWUgPSBkZWNsYXJhdGlvbi5wcm9wZXJ0eU5hbWUudGV4dDtcbiAgICB9XG4gICAgY29uc3QgbWFuZ2xlZE5hbWUgPSBgbW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke3N5bWJvbC5uYW1lfWA7XG4gICAgZ2xvYmFsU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHske2xvY2FsTmFtZX0gYXMgJHttYW5nbGVkTmFtZX19XFxuYDtcbiAgICAvLyBUT0RPKG1wcm9ic3QpOiBPbmNlIHRzaWNrbGUgaXMgb24gVFMzLjcsIHRoZSB0d28gbGluZXMgYmVsb3cgY2FuIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAvLyBcImV4cG9ydCB7bG9jYWxOYW1lfTtcIi4gSG93ZXZlciBpbiBUUzMuNSwgbG9jYWxOYW1lIHJlc29sdmVzIHdpdGhpbiB0aGUgbW9kdWxlLCBzb1xuICAgIC8vIGV4cG9ydGluZyB7bG9jYWxOYW1lfSBjYXVzZXMgYSBjaXJjdWxhciBkZWZpbml0aW9uIGVycm9yLiBUaGUgd29ya2Fyb3VuZCBpcyB0byBpbXBvcnQgdGhlXG4gICAgLy8gbWFuZ2xlZCBuYW1lLlxuICAgIG5lc3RlZFN5bWJvbHMgKz0gYFxcdFxcdGltcG9ydCAke2xvY2FsTmFtZX0kY2x1dHogPSDgsqBf4LKgLmNsdXR6LiR7bWFuZ2xlZE5hbWV9O1xcbmA7XG4gICAgbmVzdGVkU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHske2xvY2FsTmFtZX0kY2x1dHogYXMgJHtzeW1ib2wubmFtZX19O1xcbmA7XG4gIH1cblxuICBkdHNGaWxlQ29udGVudCArPSAnZGVjbGFyZSBnbG9iYWwge1xcbic7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHRuYW1lc3BhY2Ug4LKgX+CyoC5jbHV0eiB7XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gZ2xvYmFsU3ltYm9scztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdH1cXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0bmFtZXNwYWNlIOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkJHtjbHV0ek1vZHVsZU5hbWV9IHtcXG5gO1xuICAvLyBUT0RPKG1hcnRpbnByb2JzdCk6IFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzM1Mzg1LCByZW1vdmUgb25jZSBmaXhlZFxuICBkdHNGaWxlQ29udGVudCArPSBgXFx0XFx0Y29uc3QgY2x1dHokd29ya2Fyb3VuZCR0aXNzdWUkMzUzODU6IG51bWJlcjtcXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSBuZXN0ZWRTeW1ib2xzO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0fVxcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9ICd9XFxuJztcblxuICByZXR1cm4gZHRzRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNraXBUcmFuc2Zvcm1Gb3JTb3VyY2VGaWxlSWZOZWVkZWQoXG4gICAgaG9zdDogVHNpY2tsZUhvc3QsXG4gICAgZGVsZWdhdGVGYWN0b3J5OiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4pOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlbGVnYXRlID0gZGVsZWdhdGVGYWN0b3J5KGNvbnRleHQpO1xuICAgIHJldHVybiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgaWYgKGhvc3Quc2hvdWxkU2tpcFRzaWNrbGVQcm9jZXNzaW5nKHNvdXJjZUZpbGUuZmlsZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VGaWxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlbGVnYXRlKHNvdXJjZUZpbGUpO1xuICAgIH07XG4gIH07XG59XG4iXX0=

@@ -31,5 +31,14 @@ /**

/**
* Returns true if the symbol is defined in a Clutz-generated d.ts file.
* typeValueConflictHandled returns true for symbols whose type/value conflict is handled outside of
* tsickle.
*
* This covers two cases:
*
* - symbols provided by Clutz. Given that Closure has a merged type/value namespace, apparent
* type/value conflicts on the TypeScript level are actually fine.
* - builtin lib*.d.ts symbols, such as "Array", which are considered Closure-compatible. Note that
* we don't actually enforce that the types are actually compatible, but mostly just hope that
* they are due to being derived from the same HTML specs.
*/
export declare function isClutzType(symbol: ts.Symbol): boolean;
export declare function typeValueConflictHandled(symbol: ts.Symbol): boolean;
export declare function typeToDebugString(type: ts.Type): string;

@@ -36,0 +45,0 @@ export declare function symbolToDebugString(sym: ts.Symbol): string;

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

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

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

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