@mavogel/cdk-vscode-server 0.0.64 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +121 -39
- package/API.md +147 -0
- package/CLAUDE.md +46 -2
- package/README.md +63 -0
- package/examples/custom/main.ts +24 -2
- package/examples/custom-install-steps/main.ts +201 -0
- package/lib/idle-monitor/idle-monitor.js +1 -1
- package/lib/installer/installer.d.ts +7 -1
- package/lib/installer/installer.js +20 -4
- package/lib/vscode-server.d.ts +52 -0
- package/lib/vscode-server.js +4 -2
- package/node_modules/node-html-parser/CHANGELOG.md +23 -0
- package/node_modules/node-html-parser/README.md +12 -4
- package/node_modules/node-html-parser/dist/main.js +72 -8
- package/node_modules/node-html-parser/dist/nodes/html.d.ts +14 -1
- package/node_modules/node-html-parser/dist/nodes/html.js +68 -8
- package/node_modules/node-html-parser/package.json +3 -2
- package/package.json +2 -2
package/lib/vscode-server.js
CHANGED
|
@@ -584,6 +584,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
584
584
|
assetZipS3Path: props?.assetZipS3Path,
|
|
585
585
|
branchZipS3Path: props?.branchZipS3Path,
|
|
586
586
|
folderZipS3Path: props?.folderZipS3Path,
|
|
587
|
+
customInstallSteps: props?.customInstallSteps,
|
|
587
588
|
})._bind(this);
|
|
588
589
|
break;
|
|
589
590
|
case LinuxFlavorType.AMAZON_LINUX_2023:
|
|
@@ -600,6 +601,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
600
601
|
assetZipS3Path: props?.assetZipS3Path,
|
|
601
602
|
branchZipS3Path: props?.branchZipS3Path,
|
|
602
603
|
folderZipS3Path: props?.folderZipS3Path,
|
|
604
|
+
customInstallSteps: props?.customInstallSteps,
|
|
603
605
|
})._bind(this);
|
|
604
606
|
break;
|
|
605
607
|
default:
|
|
@@ -646,7 +648,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
646
648
|
}
|
|
647
649
|
exports.VSCodeServer = VSCodeServer;
|
|
648
650
|
_a = JSII_RTTI_SYMBOL_1;
|
|
649
|
-
VSCodeServer[_a] = { fqn: "@mavogel/cdk-vscode-server.VSCodeServer", version: "0.0.
|
|
651
|
+
VSCodeServer[_a] = { fqn: "@mavogel/cdk-vscode-server.VSCodeServer", version: "0.0.66" };
|
|
650
652
|
/**
|
|
651
653
|
* Tags all the resources in the construct
|
|
652
654
|
*/
|
|
@@ -688,4 +690,4 @@ class NodeTagger {
|
|
|
688
690
|
}
|
|
689
691
|
}
|
|
690
692
|
}
|
|
691
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnNjb2RlLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92c2NvZGUtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBUXFCO0FBQ3JCLDBEQUEwRDtBQUMxRCxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCw4REFBMEQ7QUFDMUQsc0ZBQWlGO0FBQ2pGLHFEQUFrRDtBQUNsRCx5Q0FBNkU7QUFDN0Usc0ZBQW1GO0FBQ25GLDBFQUFzRTtBQXdOdEU7O0dBRUc7QUFDSCxJQUFZLGVBb0JYO0FBcEJELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCx5Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILCtDQUE0QixDQUFBO0FBQzlCLENBQUMsRUFwQlcsZUFBZSwrQkFBZixlQUFlLFFBb0IxQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxxQkFVWDtBQVZELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsb0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsd0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFVaEM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBcUJ6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsV0FBVztRQUNYLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxZQUFZLElBQUksY0FBYyxDQUFDO1FBQzNELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsVUFBVSxJQUFJLFdBQVcsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sdUJBQXVCLEdBQzNCLEtBQUssRUFBRSx1QkFBdUIsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQzlELE1BQU0sdUJBQXVCLEdBQzNCLEtBQUssRUFBRSx1QkFBdUIsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLENBQUM7UUFDOUQsTUFBTSw0QkFBNEIsR0FDaEMsSUFBQSwwREFBK0MsRUFDN0MsdUJBQXVCLEVBQ3ZCLHVCQUF1QixDQUN4QixDQUFDO1FBQ0osTUFBTSw4QkFBOEIsR0FDbEMsS0FBSyxFQUFFLDhCQUE4QixJQUFJLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUU3QyxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekQscUJBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFcEUsZ0NBQWdDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLENBQUM7UUFDckMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFlBQVksQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsY0FBYyxDQUFDO1FBQzdDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUFFLHFCQUFxQixJQUFJLEtBQUssQ0FBQztRQUVwRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsMkVBQTJFO1lBQzNFLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksS0FBSyxDQUNiLCtGQUErRixDQUNoRyxDQUFDO1lBQ0osQ0FBQztZQUVELHdGQUF3RjtZQUN4RixJQUFJLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO1lBQ0osQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxJQUFJLHFCQUFxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix5RUFBeUU7WUFDekUsSUFBSSxZQUFZLElBQUksY0FBYyxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVELE1BQU0sSUFBSSxLQUFLLENBQ2IsMEZBQTBGLENBQzNGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksY0FBYyxHQUFHLEtBQUssRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksY0FBYyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLG9GQUFvRjtZQUNwRixNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO2dCQUNoRSxvQkFBb0IsRUFBRTtvQkFDcEIsY0FBYyxFQUFFLEVBQUU7b0JBQ2xCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7d0JBQ25DLFFBQVEsRUFBRSxVQUFVO3FCQUNyQixDQUFDO29CQUNGLGtCQUFrQixFQUFFLElBQUk7b0JBQ3hCLFlBQVksRUFBRSxLQUFLO29CQUNuQixpQkFBaUIsRUFBRSxVQUFVO2lCQUM5QjthQUNGLENBQUMsQ0FBQztZQUNILHlCQUFlLENBQUMsdUJBQXVCLENBQ3JDLENBQUMsTUFBTSxDQUFDLEVBQ1I7Z0JBQ0U7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUNKLDhEQUE4RDtpQkFDakU7YUFDRixFQUNELElBQUksQ0FDTCxDQUFDO1lBRUYsbUdBQW1HO1lBQ25HLE1BQU0sZUFBZSxHQUFHLGtDQUFlLENBQUMsR0FBRyxDQUFDO2dCQUMxQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7YUFDNUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVmLGNBQWMsR0FBRyxlQUFlLENBQUMsdUJBQXVCLENBQUM7UUFDM0QsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLFdBQXlDLENBQUM7UUFDOUMsSUFBSSxVQUEyQyxDQUFDO1FBRWhELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZiw0QkFBNEI7WUFDNUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQ3RELElBQUksRUFDSixhQUFhLEVBQ2I7b0JBQ0UsWUFBWSxFQUFFLFlBQVk7b0JBQzFCLFFBQVEsRUFBRSxVQUFVO2lCQUNyQixDQUNGLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sb0NBQW9DO2dCQUNwQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtvQkFDOUQsVUFBVSxFQUFFLFVBQVU7aUJBQ3ZCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsMkJBQTJCO2dCQUMzQixXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FDOUMsSUFBSSxFQUNKLGFBQWEsRUFDYixjQUFjLENBQ2YsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUNqQyw2Q0FBNkM7Z0JBQzdDLDZEQUE2RDtnQkFDN0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsd0VBQXdFO2dCQUN4RSwrRUFBK0U7Z0JBQy9FLGlGQUFpRjtnQkFDakYscUVBQXFFO2dCQUNyRSxzR0FBc0c7Z0JBQ3RHLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO29CQUNqRSxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLE1BQU0sRUFBRSxXQUFXO29CQUNuQiw2RUFBNkU7b0JBQzdFLGtCQUFrQixFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLEVBQUU7d0JBQ3BFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDM0QsZUFBZSxFQUFFOzRCQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsMENBQTBDLENBQUM7eUJBQ3ZGO3dCQUNELGNBQWMsRUFBRTs0QkFDZCwyQkFBMkIsRUFBRSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUM7Z0NBQ2xELFVBQVUsRUFBRTtvQ0FDVixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7d0NBQ3RCLE9BQU8sRUFBRTs0Q0FDUCx5QkFBeUI7NENBQ3pCLHdCQUF3Qjs0Q0FDeEIsdUJBQXVCO3lDQUN4Qjt3Q0FDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7cUNBQ2pCLENBQUM7b0NBQ0YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO3dDQUN0QixPQUFPLEVBQUU7NENBQ1AsbUJBQW1COzRDQUNuQixrQ0FBa0M7eUNBQ25DO3dDQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztxQ0FDakIsQ0FBQztpQ0FDSDs2QkFDRixDQUFDO3lCQUNIO3FCQUNGLENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUVILHlCQUFlLENBQUMsdUJBQXVCLENBQ3JDLENBQUMsV0FBVyxDQUFDLEVBQ2I7b0JBQ0U7d0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjt3QkFDdkIsTUFBTSxFQUNKLHlFQUF5RTtxQkFDNUU7b0JBQ0Q7d0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjt3QkFDdkIsTUFBTSxFQUNKLDhFQUE4RTtxQkFDakY7aUJBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ25DLE1BQU0sRUFBRSxDQUFDO1lBQ1QscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTTtpQkFDbEM7YUFDRjtZQUNELGtCQUFrQixFQUFFLElBQUk7WUFDeEIsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDLENBQUM7UUFDSCx5QkFBZSxDQUFDLHVCQUF1QixDQUNyQyxDQUFDLEdBQUcsQ0FBQyxFQUNMO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLDJDQUEyQzthQUNwRDtTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUM5RCxHQUFHO1lBQ0gsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxpQkFBaUIsRUFBRSw2QkFBNkI7U0FDakQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDJDQUFvQixDQUNuRCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCO1lBQ0UsSUFBSSxFQUFFLCtDQUErQztTQUN0RCxDQUNGLENBQUM7UUFDRix5QkFBZSxDQUFDLHVCQUF1QixDQUNyQyxDQUFDLG9CQUFvQixDQUFDLEVBQ3RCO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLHNDQUFzQzthQUMvQztTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFFRixRQUFRLENBQUMsY0FBYyxDQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQ2pFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUNoQiwrREFBK0QsQ0FDaEUsQ0FBQztRQUVGLG1GQUFtRjtRQUNuRixNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzlELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FDbkMsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFDN0MsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FDOUM7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsMEJBQTBCLEVBQUUsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDO29CQUNqRCxVQUFVLEVBQUU7d0JBQ1YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDOzRCQUN0QixHQUFHLEVBQUUsV0FBVzs0QkFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSzs0QkFDeEIsT0FBTyxFQUFFO2dDQUNQLGdCQUFnQjtnQ0FDaEIsOEJBQThCO2dDQUM5QixzQkFBc0I7Z0NBQ3RCLGdCQUFnQjtnQ0FDaEIsNkJBQTZCO2dDQUM3QixnQkFBZ0I7Z0NBQ2hCLG1DQUFtQztnQ0FDbkMsc0JBQXNCO2dDQUN0Qiw2QkFBNkI7Z0NBQzdCLHNCQUFzQjtnQ0FDdEIsYUFBYTtnQ0FDYixtQkFBbUI7Z0NBQ25CLHdDQUF3QztnQ0FDeEMsOEJBQThCO2dDQUM5QixpQ0FBaUM7Z0NBQ2pDLHNCQUFzQjtnQ0FDdEIsZUFBZTtnQ0FDZixrQkFBa0I7Z0NBQ2xCLGdDQUFnQztnQ0FDaEMsbUJBQW1CO2dDQUNuQixtQ0FBbUM7Z0NBQ25DLGFBQWE7Z0NBQ2IsZUFBZTtnQ0FDZiw0QkFBNEI7Z0NBQzVCLGdCQUFnQjtnQ0FDaEIsMkJBQTJCOzZCQUM1Qjs0QkFDRCxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUM7eUJBQ2pFLENBQUM7d0JBQ0YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDOzRCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLOzRCQUN4QixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7NEJBQ3pCLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLGFBQWEsQ0FBQzs0QkFDaEUsVUFBVSxFQUFFO2dDQUNWLFVBQVUsRUFBRTtvQ0FDVixxQkFBcUIsRUFBRSw4QkFBOEI7aUNBQ3REOzZCQUNGO3lCQUNGLENBQUM7d0JBQ0YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDOzRCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLOzRCQUN4QixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDN0IsU0FBUyxFQUFFO2dDQUNULDRCQUE0QixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLHFCQUFxQjs2QkFDeEU7eUJBQ0YsQ0FBQzt3QkFDRixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7NEJBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7NEJBQ3hCLE9BQU8sRUFBRTtnQ0FDUCxnQ0FBZ0M7Z0NBQ2hDLGlDQUFpQztnQ0FDakMsZ0NBQWdDOzZCQUNqQzs0QkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7eUJBQ2pCLENBQUM7d0JBQ0YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDOzRCQUN0QixHQUFHLEVBQUUsVUFBVTs0QkFDZixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7NEJBQ2pCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQzt3QkFDRixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7NEJBQ3RCLEdBQUcsRUFBRSxXQUFXOzRCQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLOzRCQUN4QixPQUFPLEVBQUU7Z0NBQ1AseUJBQXlCO2dDQUN6Qix3QkFBd0I7Z0NBQ3hCLHdCQUF3QjtnQ0FDeEIsbUNBQW1DO2dDQUNuQywwQkFBMEI7Z0NBQzFCLHNCQUFzQjtnQ0FDdEIsc0JBQXNCOzZCQUN2Qjs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1QsaUJBQWlCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sbUJBQW1COzZCQUMzRDt5QkFDRixDQUFDO3dCQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQzs0QkFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSzs0QkFDeEIsT0FBTyxFQUFFO2dDQUNQLG1CQUFtQjtnQ0FDbkIsbUJBQW1CO2dDQUNuQixzQkFBc0I7NkJBQ3ZCOzRCQUNELFNBQVMsRUFBRTtnQ0FDVCxpQkFBaUIsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyw0QkFBNEI7NkJBQ3BFO3lCQUNGLENBQUM7d0JBQ0YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDOzRCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLOzRCQUN4QixPQUFPLEVBQUU7Z0NBQ1AsdUJBQXVCO2dDQUN2QixrQkFBa0I7Z0NBQ2xCLG1DQUFtQzs2QkFDcEM7NEJBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO3lCQUNqQixDQUFDO3dCQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQzs0QkFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSzs0QkFDeEIsT0FBTyxFQUFFO2dDQUNQLG9DQUFvQztnQ0FDcEMscUNBQXFDO2dDQUNyQyxxQ0FBcUM7Z0NBQ3JDLG9DQUFvQztnQ0FDcEMsNkJBQTZCOzZCQUM5Qjs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1QsMEJBQTBCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sTUFBTTs2QkFDdkQ7eUJBQ0YsQ0FBQzt3QkFDRixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7NEJBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7NEJBQ3hCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQzs0QkFDeEIsU0FBUyxFQUFFLENBQUMsaUJBQWlCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDO3lCQUM3RCxDQUFDO3dCQUNGLEdBQUcsOEJBQThCO3FCQUNsQztpQkFDRixDQUFDO2FBQ0g7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsOEJBQThCLENBQy9CO2dCQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLDZCQUE2QixDQUM5QjtnQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDO2dCQUNwRSxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDO2FBQzdEO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsQ0FBQyxZQUFZLENBQUMsRUFDZDtZQUNFO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFDSiwrREFBK0Q7YUFDbEU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsMENBQTBDO2FBQ25EO1NBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUN4RCxHQUFHO1lBQ0gsWUFBWTtZQUNaLFlBQVk7WUFDWixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDN0MsNEJBQTRCLEVBQzVCO2dCQUNFLEVBQUUsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSzthQUNsQyxDQUNGO1lBQ0QsYUFBYSxFQUFFLElBQUk7WUFDbkIsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07YUFDbEM7WUFDRCx3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsWUFBWSxFQUFFO2dCQUNaO29CQUNFLFVBQVUsRUFBRSxXQUFXO29CQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTt3QkFDcEQsVUFBVSxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO3dCQUN2QyxTQUFTLEVBQUUsSUFBSTt3QkFDZixtQkFBbUIsRUFBRSxJQUFJO3FCQUMxQixDQUFDO2lCQUNIO2FBQ0Y7WUFDRCxJQUFJLEVBQUUsWUFBWTtZQUNsQixhQUFhLEVBQUUsUUFBUTtZQUN2QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7O3NCQUVkLFlBQVk7O3lCQUVULFVBQVUsZ0JBQWdCLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVTtPQUNsRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBQ0gseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ2Y7WUFDRTtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsNkNBQTZDO2FBQ3REO1NBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztRQUVGLDREQUE0RDtRQUM1RCxxRkFBcUY7UUFDckYsaUZBQWlGO1FBQ2pGLG1GQUFtRjtRQUNuRixJQUFJLEdBQTJCLENBQUM7UUFDaEMsSUFBSSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDMUIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUN2QyxNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUU7b0JBQ0o7d0JBQ0UsR0FBRyxFQUFFLE1BQU07d0JBQ1gsS0FBSyxFQUFFLEdBQUcsWUFBWSxNQUFNO3FCQUM3QjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILHlDQUF5QztZQUN6QyxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ2pELEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO2FBQ3JDLENBQUMsQ0FBQztZQUVILHlCQUFlLENBQUMsdUJBQXVCLENBQ3JDLENBQUMsR0FBRyxDQUFDLEVBQ0w7Z0JBQ0U7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsTUFBTSxFQUFFLGlHQUFpRztpQkFDMUc7YUFDRixFQUNELElBQUksQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxNQUFNLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ2hFLGVBQWUsRUFBRSxnQ0FBZ0MsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO1lBQzNFLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDbkMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsd0JBQXdCLEVBQUUsS0FBSztZQUMvQixjQUFjLEVBQUU7Z0JBQ2QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE9BQU8sRUFBRTtvQkFDUCxnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsUUFBUTtvQkFDUixRQUFRO29CQUNSLFNBQVM7b0JBQ1QsTUFBTTtvQkFDTixpQkFBaUI7b0JBQ2pCLGlCQUFpQjtvQkFDakIsaUJBQWlCO2lCQUNsQjthQUNGO1lBQ0QsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRTtTQUN2RCxDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsaUZBQWlGO1FBQ2pGLDBFQUEwRTtRQUMxRSxNQUFNLGFBQWEsR0FBRyxHQUFHO1lBQ3ZCLENBQUMsQ0FBQyxPQUFPLGdCQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSx3QkFBd0I7WUFDdkcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7UUFFeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtZQUMvQyxjQUFjLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVM7WUFDakQsUUFBUSxFQUFFLGNBQWMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtTQUMvRSxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ2hFLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN2QyxrSEFBa0g7WUFDbEgsOEZBQThGO1lBQzlGLDRDQUE0QztZQUM1QyxtRUFBbUU7WUFDbkUsT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlO1lBQ3pDLDhCQUE4QjtZQUM5QixHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7Z0JBQzNCLENBQUMsQ0FBQztvQkFDQSxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUM7b0JBQ3pCLFdBQVcsRUFBRSxXQUFXO2lCQUN6QjtnQkFDRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsZUFBZSxFQUFFO2dCQUNmLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVM7Z0JBQzNDLFdBQVcsRUFBRSxhQUFhO2dCQUMxQixtQkFBbUIsRUFBRTtvQkFDbkIsOExBQThMO29CQUM5TCxxQkFBcUIsRUFBRSxzQ0FBc0M7aUJBQzlEO2dCQUNELG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTO2dCQUN2RCxNQUFNO2FBQ1A7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsVUFBVSxFQUFFO29CQUNWLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVM7b0JBQzNDLFFBQVEsRUFBRSxLQUFLO29CQUNmLGlKQUFpSjtvQkFDakosV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO29CQUM1QyxtQkFBbUIsRUFBRTt3QkFDbkIsOExBQThMO3dCQUM5TCxxQkFBcUIsRUFBRSxzQ0FBc0M7cUJBQzlEO29CQUNELG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTO29CQUN2RCxNQUFNO2lCQUNQO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCx5QkFBZSxDQUFDLHVCQUF1QixDQUNyQyxDQUFDLFlBQVksQ0FBQyxFQUNkO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLDJEQUEyRDthQUNwRTtZQUNEO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFBRSwwREFBMEQ7YUFDbkU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQ0osaUVBQWlFO2FBQ3BFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUNKLGdHQUFnRzthQUNuRztZQUNEO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFDSixnR0FBZ0c7YUFDbkc7U0FDRixFQUNELElBQUksQ0FDTCxDQUFDO1FBRUYsNENBQTRDO1FBQzVDLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO2dCQUN6RCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDcEMsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQ2xEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsQ0FBQyxPQUFPLENBQUMsRUFDVDtnQkFDRTtvQkFDRSxFQUFFLEVBQUUsb0JBQW9CO29CQUN4QixNQUFNLEVBQUUsbURBQW1EO2lCQUM1RDthQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLDBEQUEwRDtRQUMxRCxJQUFJLFNBQWdDLENBQUM7UUFDckMsUUFBUSx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMvQixLQUFLLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDL0IsS0FBSyxlQUFlLENBQUMsU0FBUztnQkFDNUIsU0FBUyxHQUFHLHFCQUFTLENBQUMsTUFBTSxDQUFDO29CQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO29CQUNwQyxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsY0FBYyxFQUFFLGNBQWM7b0JBQzlCLGlCQUFpQixFQUFFLEtBQUssRUFBRSxpQkFBaUI7b0JBQzNDLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYTtvQkFDbkMsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWUsRUFBRSx1QkFBdUI7b0JBQ3hDLGdCQUFnQixFQUFFLFVBQVU7b0JBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTztvQkFDdkIsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjO29CQUNyQyxlQUFlLEVBQUUsS0FBSyxFQUFFLGVBQWU7b0JBQ3ZDLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZTtpQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZixNQUFNO1lBQ1IsS0FBSyxlQUFlLENBQUMsaUJBQWlCO2dCQUNwQyxTQUFTLEdBQUcscUJBQVMsQ0FBQyxlQUFlLENBQUM7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7b0JBQ3BDLFVBQVUsRUFBRSxVQUFVO29CQUN0QixjQUFjLEVBQUUsY0FBYztvQkFDOUIsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQjtvQkFDM0MsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhO29CQUNuQyxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsZUFBZSxFQUFFLHVCQUF1QjtvQkFDeEMsZ0JBQWdCLEVBQUUsVUFBVTtvQkFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPO29CQUN2QixjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWM7b0JBQ3JDLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZTtvQkFDdkMsZUFBZSxFQUFFLEtBQUssRUFBRSxlQUFlO2lCQUN4QyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNmLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2Qix1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QscUVBQXFFO1FBRXJFLDJGQUEyRjtRQUMzRiwwQ0FBMEM7UUFFMUMsNENBQTRDO1FBQzVDLElBQUksS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSwwQkFBVyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ3RELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLGtCQUFrQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsSUFBSSxFQUFFO2dCQUNuRCxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLElBQUksQ0FBQztnQkFDMUQsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixJQUFJLEtBQUs7YUFDbkQsQ0FBQyxDQUFDO1lBRUgsb0VBQW9FO1lBQ3BFLDBGQUEwRjtZQUMxRixNQUFNLE9BQU8sR0FBRyxJQUFJLHlDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFDakUsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTthQUM1QyxDQUFDLENBQUM7WUFFSCxzRUFBc0U7WUFDdEUsNkVBQTZFO1lBQzdFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNsRixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxVQUFVO1FBQ1YsTUFBTSxlQUFlLEdBQUcsVUFBVSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLGVBQWUsWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNyRSxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNoQyxXQUFXLEVBQUUscUNBQXFDO1lBQ2xELEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUMvQixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5QixXQUFXLEVBQUUsb0NBQW9DO1lBQ2pELEtBQUssRUFBRSxjQUFjO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBcnRCSCxvQ0FzdEJDOzs7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVTtJQUdkLFlBQVksSUFBK0I7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQixzRkFBc0Y7UUFDdEYsOEVBQThFO1FBQzlFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBRXZDLDBGQUEwRjtRQUMxRixNQUFNLG1CQUFtQixHQUN2QixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUMxQixRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM3QixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMzQixRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUNsQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMzQixRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5DLGlEQUFpRDtRQUNqRCxNQUFNLHNCQUFzQixHQUMxQixRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoQyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUMvQixRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ25DLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxDQUFDO29CQUNILGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixpQ0FBaUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBc3BlY3RzLFxuICBDZm5PdXRwdXQsXG4gIER1cmF0aW9uLFxuICBGbixcbiAgSUFzcGVjdCxcbiAgU3RhY2ssXG4gIFRhZ3MsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNmIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCAqIGFzIGNmbyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcm91dGU1M3RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElkbGVNb25pdG9yIH0gZnJvbSAnLi9pZGxlLW1vbml0b3IvaWRsZS1tb25pdG9yJztcbmltcG9ydCB7IElkbGVNb25pdG9yRW5hYmxlciB9IGZyb20gJy4vaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXInO1xuaW1wb3J0IHsgSW5zdGFsbGVyIH0gZnJvbSAnLi9pbnN0YWxsZXIvaW5zdGFsbGVyJztcbmltcG9ydCB7IGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yIH0gZnJvbSAnLi9tYXBwaW5ncyc7XG5pbXBvcnQgeyBBd3NNYW5hZ2VkUHJlZml4TGlzdCB9IGZyb20gJy4vcHJlZml4bGlzdC1yZXRyaWV2ZXIvcHJlZml4bGlzdC1yZXRyaWV2ZXInO1xuaW1wb3J0IHsgU2VjcmV0UmV0cmlldmVyIH0gZnJvbSAnLi9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXInO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBWU0NvZGVTZXJ2ZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlNDb2RlU2VydmVyUHJvcHMge1xuICAvKipcbiAgICogVXNlck5hbWUgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwYXJ0aWNpcGFudFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlVXNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFzc3dvcmQgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eSBhbmQgd2lsbCB0aGVuIGJlIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlUGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZTQ29kZSBTZXJ2ZXIgRUMyIGluc3RhbmNlIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBWU0NvZGVTZXJ2ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgaW5zdGFuY2Ugdm9sdW1lIHNpemUgaW4gR0JcbiAgICpcbiAgICogQGRlZmF1bHQgLSA0MFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VWb2x1bWVTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBjbGFzc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG03Z1xuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VDbGFzcz86IGVjMi5JbnN0YW5jZUNsYXNzO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBzaXplXG4gICAqXG4gICAqIEBkZWZhdWx0IC0geGxhcmdlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVNpemU/OiBlYzIuSW5zdGFuY2VTaXplO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBvcGVyYXRpbmcgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVWJ1bnR1LTI0XG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbT86IExpbnV4Rmxhdm9yVHlwZTtcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgY3B1IGFyY2hpdGVjdHVyZSBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcm1cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQ3B1QXJjaGl0ZWN0dXJlPzogTGludXhBcmNoaXRlY3R1cmVUeXBlO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgdG8gb3BlbiBpbiBWUyBDb2RlIHNlcnZlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIC9Xb3Jrc2hvcFxuICAgKi9cbiAgcmVhZG9ubHkgaG9tZUZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciB0aGUgYXBwbGljYXRpb24gdG8gYmUgYWRkZWQgdG8gTmdpbnggc2l0ZXMtYXZhaWxhYmxlIGxpc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcHBcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlckJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IGZvciB0aGUgRGV2U2VydmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gODA4MVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2U2VydmVyUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBpbnN0YW5jZSByb2xlIHBvbGljaWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW11cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFkZCB0byB0aGUgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSB7fVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZG9tYWluIG5hbWUgZm9yIHRoZSBWUyBDb2RlIHNlcnZlclxuICAgKiBXaGVuIHByb3ZpZGVkLCBjcmVhdGVzIGEgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gd2l0aCB0aGlzIGRvbWFpbiBuYW1lXG4gICAqIGFuZCBzZXRzIHVwIFJvdXRlNTMgQSByZWNvcmQgcG9pbnRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZXMgQ2xvdWRGcm9udCBkZWZhdWx0IGRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUm91dGU1MyBob3N0ZWQgem9uZSBJRCBmb3IgdGhlIGRvbWFpblxuICAgKiBSZXF1aXJlZCB3aGVuIHVzaW5nIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgYXR0ZW1wdCB0byBsb29rdXAgaG9zdGVkIHpvbmUgZnJvbSBkb21haW4gbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZGlzY292ZXIgZnJvbSBkb21haW4gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgZXhpc3RpbmcgQUNNIGNlcnRpZmljYXRlIGZvciB0aGUgZG9tYWluXG4gICAqIENlcnRpZmljYXRlIG11c3QgYmUgaW4gdXMtZWFzdC0xIHJlZ2lvbiBmb3IgQ2xvdWRGcm9udFxuICAgKiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tY3JlYXRlIGNlcnRpZmljYXRlIGlmIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBpcyB0cnVlXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQXV0by1jcmVhdGUgQUNNIGNlcnRpZmljYXRlIHdpdGggRE5TIHZhbGlkYXRpb24gaW4gdXMtZWFzdC0xIHJlZ2lvblxuICAgKiBSZXF1aXJlcyBob3N0ZWRab25lSWQgdG8gYmUgcHJvdmlkZWQgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqIENhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggY2VydGlmaWNhdGVBcm5cbiAgICogQ2VydGlmaWNhdGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgaW4gdXMtZWFzdC0xIGFzIHJlcXVpcmVkIGJ5IENsb3VkRnJvbnRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhdXRvbWF0aWMgaW5zdGFuY2Ugc3RvcCB3aGVuIGlkbGVcbiAgICogTW9uaXRvcnMgQ2xvdWRGcm9udCBtZXRyaWNzIGFuZCBzdG9wcyB0aGUgRUMyIGluc3RhbmNlIGFmdGVyIHNwZWNpZmllZCBpZGxlIHRpbWVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUF1dG9TdG9wPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWludXRlcyBvZiBpbmFjdGl2aXR5IGJlZm9yZSBzdG9wcGluZyB0aGUgaW5zdGFuY2VcbiAgICogT25seSBhcHBsaWVzIHdoZW4gZW5hYmxlQXV0b1N0b3AgaXMgdHJ1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAzMFxuICAgKi9cbiAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaW51dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGlkbGUgYWN0aXZpdHkgKGluIG1pbnV0ZXMpXG4gICAqIE9ubHkgYXBwbGllcyB3aGVuIGVuYWJsZUF1dG9TdG9wIGlzIHRydWVcbiAgICpcbiAgICogQGRlZmF1bHQgNSAtIENoZWNrIGV2ZXJ5IDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaWRsZUNoZWNrSW50ZXJ2YWxNaW51dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTa2lwIGluc3RhbmNlIHN0YXR1cyBjaGVja3MgaW4gSWRsZU1vbml0b3JcbiAgICogV2hlbiB0cnVlLCBJZGxlTW9uaXRvciB3aWxsIHN0b3AgaWRsZSBpbnN0YW5jZXMgZXZlbiBpZiBzdGF0dXMgY2hlY2tzIGhhdmVuJ3QgcGFzc2VkXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyB3aGVyZSBzdGF0dXMgY2hlY2sgaW5pdGlhbGl6YXRpb24gdGltZVxuICAgKiBleGNlZWRzIHRoZSB0ZXN0IHRpbWVvdXQgbGltaXRzXG4gICAqXG4gICAqIFdBUk5JTkc6IEZvciB0ZXN0aW5nIG9ubHkgLSBpbiBwcm9kdWN0aW9uLCB5b3Ugc2hvdWxkIHdhaXQgZm9yIHN0YXR1cyBjaGVja3NcbiAgICogdG8gcGFzcyBiZWZvcmUgc3RvcHBpbmcgaW5zdGFuY2VzIHRvIGF2b2lkIHN0b3BwaW5nIHVuaGVhbHRoeSBpbnN0YW5jZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBTdGF0dXNDaGVja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW1vdGUgZ2l0IHJlcG9zaXRvcnkgVVJMIHRvIGNsb25lIGludG8gdGhlIGhvbWUgZm9sZGVyLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSBjbG9uZWQgaW50byB0aGUgdXNlcidzIGhvbWUgZm9sZGVyIGR1cmluZyBpbnN0YW5jZSBzZXR1cC5cbiAgICogVXNlZnVsIGZvciBwcmUtcG9wdWxhdGluZyB3b3Jrc2hvcCBlbnZpcm9ubWVudHMgd2l0aCBzdGFydGVyIGNvZGUuXG4gICAqXG4gICAqIEBleGFtcGxlICdodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvbXktd29ya3Nob3AtcmVwby5naXQnXG4gICAqIEBkZWZhdWx0IC0gbm8gcmVwbyBjbG9uZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHBhdGggdG8gYSB6aXAgZmlsZSBjb250YWluaW5nIGFzc2V0cyB0byBleHRyYWN0IGludG8gdGhlIGhvbWUgZm9sZGVyLlxuICAgKlxuICAgKiBUaGUgemlwIGNvbnRlbnRzIHdpbGwgYmUgZXh0cmFjdGVkIHRvIHRoZSB1c2VyJ3MgaG9tZSBmb2xkZXIgYW5kIGNvbW1pdHRlZCB0byBnaXQuXG4gICAqIFVzZSB0aGlzIHRvIHByb3ZpZGUgd29ya3Nob3AgbWF0ZXJpYWxzLCBzYW1wbGUgZGF0YSwgb3IgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICpcbiAgICogQGV4YW1wbGUgJ215LXdvcmtzaG9wLWJ1Y2tldC9hc3NldHMvd29ya3Nob3AtbWF0ZXJpYWxzLnppcCdcbiAgICogQGRlZmF1bHQgLSBubyBhc3NldHMgZG93bmxvYWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRaaXBTM1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHBhdGggdG8gYSB6aXAgZmlsZSBjb250YWluaW5nIGdpdCBicmFuY2hlcyB0byBjcmVhdGUgaW4gdGhlIGhvbWUgZm9sZGVyIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEVhY2ggdG9wLWxldmVsIGZvbGRlciBpbiB0aGUgemlwIGJlY29tZXMgYSBzZXBhcmF0ZSBnaXQgYnJhbmNoIHdpdGggdGhhdCBmb2xkZXIncyBjb250ZW50cy5cbiAgICogSWRlYWwgZm9yIGNyZWF0aW5nIHN0ZXAtYnktc3RlcCB3b3Jrc2hvcCBicmFuY2hlcyAoZS5nLiwgc3RlcC0xLCBzdGVwLTIsIHNvbHV0aW9uKS5cbiAgICpcbiAgICogQGV4YW1wbGUgJ215LXdvcmtzaG9wLWJ1Y2tldC9icmFuY2hlcy9sYWItYnJhbmNoZXMuemlwJyAoY29udGFpbmluZyBmb2xkZXJzOiBzdGVwLTEvLCBzdGVwLTIvLCBzb2x1dGlvbi8pXG4gICAqIEBkZWZhdWx0IC0gbm8gYnJhbmNoZXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoWmlwUzNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTMyBwYXRoIHRvIGEgemlwIGZpbGUgY29udGFpbmluZyBtdWx0aXBsZSBmb2xkZXJzIHRvIGNyZWF0ZSBhcyBzZXBhcmF0ZSBnaXQgcmVwb3NpdG9yaWVzLlxuICAgKlxuICAgKiBFYWNoIHRvcC1sZXZlbCBmb2xkZXIgaW4gdGhlIHppcCBiZWNvbWVzIGEgc2VwYXJhdGUgc3ViZm9sZGVyIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LFxuICAgKiBpbml0aWFsaXplZCBhcyBpdHMgb3duIGdpdCByZXBvc2l0b3J5LiBVc2VmdWwgZm9yIG11bHRpLXByb2plY3Qgd29ya3Nob3BzLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnbXktd29ya3Nob3AtYnVja2V0L2ZvbGRlcnMvd29ya3Nob3AtcHJvamVjdHMuemlwJyAoY29udGFpbmluZyBmb2xkZXJzOiBmcm9udGVuZC8sIGJhY2tlbmQvLCBpbmZyYXN0cnVjdHVyZS8pXG4gICAqIEBkZWZhdWx0IC0gbm8gZm9sZGVycyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJaaXBTM1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZsYXZvciBvZiBsaW51eCB5b3Ugd2FudCB0byBydW4gdnNjb2RlIHNlcnZlciBvblxuICovXG5leHBvcnQgZW51bSBMaW51eEZsYXZvclR5cGUge1xuICAvKipcbiAgICogVWJ1bnR1IDIyXG4gICAqL1xuICBVQlVOVFVfMjIgPSAndWJ1bnR1MjInLFxuXG4gIC8qKlxuICAgKiBVYnVudHUgMjRcbiAgICovXG4gIFVCVU5UVV8yNCA9ICd1YnVudHUyNCcsXG5cbiAgLyoqXG4gICAqIFVidW50dSAyNVxuICAgKi9cbiAgVUJVTlRVXzI1ID0gJ3VidW50dTI1JyxcblxuICAvKipcbiAgICogQW1hem9uIExpbnV4IDIwMjNcbiAgICovXG4gIEFNQVpPTl9MSU5VWF8yMDIzID0gJ2FsMjAyMycsXG59XG5cbi8qKlxuICogVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3B1IHlvdSB3YW50IHRvIHJ1biB2c2NvZGUgc2VydmVyIG9uXG4gKi9cbmV4cG9ydCBlbnVtIExpbnV4QXJjaGl0ZWN0dXJlVHlwZSB7XG4gIC8qKlxuICAgKiBBUk0gYXJjaGl0ZWN0dXJlXG4gICAqL1xuICBBUk0gPSAnYXJtJyxcblxuICAvKipcbiAgICogQU1ENjQgYXJjaGl0ZWN0dXJlXG4gICAqL1xuICBBTUQ2NCA9ICdhbWQ2NCcsXG59XG5cbi8qKlxuICogVlNDb2RlU2VydmVyIC0gc3BpbiBpdCB1cCBpbiB1bmRlciAxMCBtaW51dGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBWU0NvZGVTZXJ2ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRvbWFpbiB0aGUgc2VydmVyIGlzIHJlYWNoYWJsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIHRvIGxvZ2luIHRvIHRoZSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRUMyIGluc3RhbmNlIHJ1bm5pbmcgVlMgQ29kZSBTZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZTogZWMyLklJbnN0YW5jZTtcblxuICAvKipcbiAgICogVGhlIElkbGVNb25pdG9yIGNvbnN0cnVjdCAob25seSBwcmVzZW50IGlmIGVuYWJsZUF1dG9TdG9wIGlzIHRydWUpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWRsZU1vbml0b3I/OiBJZGxlTW9uaXRvcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFZTQ29kZVNlcnZlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIGRlZmF1bHRzXG4gICAgY29uc3QgdnNDb2RlVXNlciA9IHByb3BzPy52c2NvZGVVc2VyID8/ICdwYXJ0aWNpcGFudCc7XG4gICAgY29uc3QgaW5zdGFuY2VOYW1lID0gcHJvcHM/Lmluc3RhbmNlTmFtZSA/PyAnVlNDb2RlU2VydmVyJztcbiAgICBjb25zdCBpbnN0YW5jZVZvbHVtZVNpemUgPSBwcm9wcz8uaW5zdGFuY2VWb2x1bWVTaXplID8/IDQwO1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9wcz8uaG9tZUZvbGRlciA/PyAnL1dvcmtzaG9wJztcbiAgICBjb25zdCBpbnN0YW5jZUNsYXNzID0gcHJvcHM/Lmluc3RhbmNlQ2xhc3MgPz8gZWMyLkluc3RhbmNlQ2xhc3MuTTdHO1xuICAgIGNvbnN0IGluc3RhbmNlU2l6ZSA9IHByb3BzPy5pbnN0YW5jZVNpemUgPz8gZWMyLkluc3RhbmNlU2l6ZS5YTEFSR0U7XG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID0gZWMyLkluc3RhbmNlVHlwZS5vZihpbnN0YW5jZUNsYXNzLCBpbnN0YW5jZVNpemUpO1xuICAgIGNvbnN0IGluc3RhbmNlT3BlcmF0aW5nU3lzdGVtID1cbiAgICAgIHByb3BzPy5pbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSA/PyBMaW51eEZsYXZvclR5cGUuVUJVTlRVXzI0O1xuICAgIGNvbnN0IGluc3RhbmNlQ3B1QXJjaGl0ZWN0dXJlID1cbiAgICAgIHByb3BzPy5pbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSA/PyBMaW51eEFyY2hpdGVjdHVyZVR5cGUuQVJNO1xuICAgIGNvbnN0IG1hY2hpbmVJbWFnZUZyb21Tc21QYXJhbWV0ZXIgPVxuICAgICAgZ2V0QW1pU1NNUGFyYW1ldGVyRm9yTGludXhBcmNoaXRlY3R1cmVBbmRGbGF2b3IoXG4gICAgICAgIGluc3RhbmNlQ3B1QXJjaGl0ZWN0dXJlLFxuICAgICAgICBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSxcbiAgICAgICk7XG4gICAgY29uc3QgYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzID1cbiAgICAgIHByb3BzPy5hZGRpdGlvbmFsSW5zdGFuY2VSb2xlUG9saWNpZXMgPz8gW107XG4gICAgY29uc3QgYWRkaXRpb25hbFRhZ3MgPSBwcm9wcz8uYWRkaXRpb25hbFRhZ3MgPz8ge307XG4gICAgY29uc3QgZGVmYXVsdFRhZ3MgPSB7IGFwcDogJ3ZzY29kZS1zZXJ2ZXInIH07XG5cbiAgICBjb25zdCBtZXJnZWRUYWdzID0geyAuLi5kZWZhdWx0VGFncywgLi4uYWRkaXRpb25hbFRhZ3MgfTtcbiAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgTm9kZVRhZ2dlcihtZXJnZWRUYWdzKSwgeyBwcmlvcml0eTogMTUwIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgZG9tYWluIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkb21haW5OYW1lID0gcHJvcHM/LmRvbWFpbk5hbWU7XG4gICAgY29uc3QgaG9zdGVkWm9uZUlkID0gcHJvcHM/Lmhvc3RlZFpvbmVJZDtcbiAgICBjb25zdCBjZXJ0aWZpY2F0ZUFybiA9IHByb3BzPy5jZXJ0aWZpY2F0ZUFybjtcbiAgICBjb25zdCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgPSBwcm9wcz8uYXV0b0NyZWF0ZUNlcnRpZmljYXRlID8/IGZhbHNlO1xuXG4gICAgaWYgKGRvbWFpbk5hbWUpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgZWl0aGVyIGNlcnRpZmljYXRlQXJuIG9yIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBpcyBwcm92aWRlZFxuICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUFybiAmJiAhYXV0b0NyZWF0ZUNlcnRpZmljYXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnV2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkLCBlaXRoZXIgY2VydGlmaWNhdGVBcm4gb3IgYXV0b0NyZWF0ZUNlcnRpZmljYXRlIG11c3QgYmUgc3BlY2lmaWVkJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCBib3RoIGNlcnRpZmljYXRlQXJuIGFuZCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgYXJlIG5vdCBwcm92aWRlZCB0b2dldGhlclxuICAgICAgaWYgKGNlcnRpZmljYXRlQXJuICYmIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBzcGVjaWZ5IGJvdGggY2VydGlmaWNhdGVBcm4gYW5kIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZS4gQ2hvb3NlIG9uZS4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGhvc3RlZFpvbmVJZCBpcyBwcm92aWRlZCB3aGVuIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBpcyB0cnVlXG4gICAgICBpZiAoYXV0b0NyZWF0ZUNlcnRpZmljYXRlICYmICFob3N0ZWRab25lSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdob3N0ZWRab25lSWQgaXMgcmVxdWlyZWQgd2hlbiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgdHJ1ZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgZG9tYWluLXJlbGF0ZWQgcHJvcHMgYXJlIG5vdCBwcm92aWRlZCB3aXRob3V0IGRvbWFpbk5hbWVcbiAgICAgIGlmIChob3N0ZWRab25lSWQgfHwgY2VydGlmaWNhdGVBcm4gfHwgYXV0b0NyZWF0ZUNlcnRpZmljYXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnaG9zdGVkWm9uZUlkLCBjZXJ0aWZpY2F0ZUFybiwgYW5kIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBjYW4gb25seSBiZSB1c2VkIHdpdGggZG9tYWluTmFtZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHZzY29kZVBhc3N3b3JkID0gcHJvcHM/LnZzY29kZVBhc3N3b3JkID8/ICcnO1xuICAgIGlmICh2c2NvZGVQYXNzd29yZCA9PSAnJykge1xuICAgICAgLy8gQ3JlYXRlIGEgc2VjcmV0IHdoaWNoIGlzIHRoZW4gaW5qZWN0IGluIHRoZSBTU00gZG9jdW1lbnQgdG8gaW5zdGFsbCB2c2NvZGUgc2VydmVyXG4gICAgICBjb25zdCBzZWNyZXQgPSBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KHRoaXMsICdwYXNzd29yZC1zZWNyZXQnLCB7XG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgcGFzc3dvcmRMZW5ndGg6IDE2LFxuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VybmFtZTogdnNDb2RlVXNlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICBbc2VjcmV0XSxcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLVNNRzQnLFxuICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAnRm9yIHRoaXMgdG1wIHZjIGNvZGUgc2VydmVyIHdlIGRvIG5vdCBuZWVkIHBhc3N3b3JkIHJvdGF0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcblxuICAgICAgLy8gSGF2ZSBhIGN1c3RvbSByZXNvdXJjZSB0byBwYXNzIHRoZSBzZWNyZXQgZGF0YSBvbj8gLT4geWVzIGJlY2F1c2Ugbm90IHJlc29sdmFibGUgb24gY29tcGlsZSB0aW1lXG4gICAgICBjb25zdCBzZWNyZXRSZXRyaWV2ZXIgPSBTZWNyZXRSZXRyaWV2ZXIubmV3KHtcbiAgICAgICAgc2VjcmV0QXJuOiBzZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgfSkuX2JpbmQodGhpcyk7XG5cbiAgICAgIHZzY29kZVBhc3N3b3JkID0gc2VjcmV0UmV0cmlldmVyLnNlY3JldFBhc3N3b3JkUGxhaW50ZXh0O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBTU0wgY2VydGlmaWNhdGUgZm9yIGN1c3RvbSBkb21haW5cbiAgICBsZXQgY2VydGlmaWNhdGU6IGFjbS5JQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGhvc3RlZFpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmUgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZG9tYWluTmFtZSkge1xuICAgICAgLy8gR2V0IG9yIGNyZWF0ZSBob3N0ZWQgem9uZVxuICAgICAgaWYgKGhvc3RlZFpvbmVJZCkge1xuICAgICAgICBob3N0ZWRab25lID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdob3N0ZWQtem9uZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdGVkWm9uZUlkOiBob3N0ZWRab25lSWQsXG4gICAgICAgICAgICB6b25lTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9va3VwIGhvc3RlZCB6b25lIGJ5IGRvbWFpbiBuYW1lXG4gICAgICAgIGhvc3RlZFpvbmUgPSByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUxvb2t1cCh0aGlzLCAnaG9zdGVkLXpvbmUnLCB7XG4gICAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjZXJ0aWZpY2F0ZVxuICAgICAgaWYgKGNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIC8vIFVzZSBleGlzdGluZyBjZXJ0aWZpY2F0ZVxuICAgICAgICBjZXJ0aWZpY2F0ZSA9IGFjbS5DZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnY2VydGlmaWNhdGUnLFxuICAgICAgICAgIGNlcnRpZmljYXRlQXJuLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChhdXRvQ3JlYXRlQ2VydGlmaWNhdGUpIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBjZXJ0aWZpY2F0ZSB3aXRoIEROUyB2YWxpZGF0aW9uXG4gICAgICAgIC8vIENsb3VkRnJvbnQgcmVxdWlyZXMgY2VydGlmaWNhdGVzIHRvIGJlIGluIHVzLWVhc3QtMSByZWdpb25cbiAgICAgICAgaWYgKCFob3N0ZWRab25lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2hvc3RlZFpvbmUgaXMgcmVxdWlyZWQgd2hlbiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgdHJ1ZScsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGU6IFVzaW5nIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIChkZXByZWNhdGVkIGJ1dCBzdGlsbCBmdW5jdGlvbmFsKVxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGNlcnRpZmljYXRlcyBpbiB1cy1lYXN0LTEgZnJvbSBhbnkgcmVnaW9uXG4gICAgICAgIC8vIFRoZSBtb2Rlcm4gYXBwcm9hY2ggcmVxdWlyZXMgbXVsdGktc3RhY2sgZGVwbG95bWVudCB3aXRoIGNyb3NzUmVnaW9uUmVmZXJlbmNlc1xuICAgICAgICAvLyB3aGljaCBpcyBtb3JlIGNvbXBsZXggZm9yIGEgY29uc3RydWN0IGxpYnJhcnkgdG8gaW1wbGVtZW50IGNsZWFubHlcbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIGlzIGRlcHJlY2F0ZWQgYnV0IHN0aWxsIHRoZSBiZXN0IG9wdGlvbiBmb3IgY3Jvc3MtcmVnaW9uIGNlcnRzXG4gICAgICAgIGNlcnRpZmljYXRlID0gbmV3IGFjbS5EbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnY2VydGlmaWNhdGUnLCB7XG4gICAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgLy8gRXhwbGljaXRseSBncmFudCB0aGUgdmFsaWRhdGlvbiBMYW1iZGEgcGVybWlzc2lvbiB0byBkZXNjcmliZSBjZXJ0aWZpY2F0ZXNcbiAgICAgICAgICBjdXN0b21SZXNvdXJjZVJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnY2VydGlmaWNhdGUtdmFsaWRhdGlvbi1yb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICAgICAgQ2VydGlmaWNhdGVWYWxpZGF0aW9uUG9saWN5OiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnYWNtOkRlc2NyaWJlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICdhY206UmVxdWVzdENlcnRpZmljYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAnYWNtOkRlbGV0ZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ3JvdXRlNTM6R2V0Q2hhbmdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgICAgW2NlcnRpZmljYXRlXSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUFDTTEnLFxuICAgICAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAgICAgJ0NlcnRpZmljYXRlIGlzIGNyZWF0ZWQgZm9yIFZTIENvZGUgc2VydmVyIHdpdGggcHJvcGVyIGRvbWFpbiB2YWxpZGF0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAgICAgJ0NlcnRpZmljYXRlIHZhbGlkYXRpb24gTGFtYmRhIG5lZWRzIHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBBQ00gYW5kIFJvdXRlNTMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGRlZmF1bHQgdnBjXG4gICAgY29uc3QgdnBjID0gbmV3IGVjMi5WcGModGhpcywgJ3ZwYycsIHtcbiAgICAgIG1heEF6czogMixcbiAgICAgIGNyZWF0ZUludGVybmV0R2F0ZXdheTogdHJ1ZSxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFt2cGNdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtVlBDNycsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIHZwYyB3ZSBkbyBub3QgbmVlZCBmbG93IGxvZ3MnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIFNlY0dyb3VwIGFzc29jaWF0ZWQgd2l0aGUgdGhlIENGIGRpc3QgcExpc3RcbiAgICBjb25zdCBzZWNHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnY2YtdG8tc2VydmVyLXNnJywge1xuICAgICAgdnBjLFxuICAgICAgZGVzY3JpcHRpb246ICdTRyBmb3IgVlNDb2RlU2VydmVyIC0gb25seSBhbGxvdyBDbG91ZEZyb250IGluZ3Jlc3MnLFxuICAgICAgc2VjdXJpdHlHcm91cE5hbWU6ICdjbG91ZGZyb250LXRvLXZzY29kZS1zZXJ2ZXInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXdzTWFuYWdlZFByZWZpeExpc3QgPSBuZXcgQXdzTWFuYWdlZFByZWZpeExpc3QoXG4gICAgICB0aGlzLFxuICAgICAgJ2NmLXByZWZpeGxpc3RJZCcsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb20uYW1hem9uYXdzLmdsb2JhbC5jbG91ZGZyb250Lm9yaWdpbi1mYWNpbmcnLFxuICAgICAgfSxcbiAgICApO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFthd3NNYW5hZ2VkUHJlZml4TGlzdF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyBwcm92aWRlciB3aWxkY2FyZHMgYXJlIGZpbmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIHNlY0dyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgZWMyLlBlZXIucHJlZml4TGlzdChhd3NNYW5hZ2VkUHJlZml4TGlzdC5wcmVmaXhMaXN0LnByZWZpeExpc3RJZCksXG4gICAgICBlYzIuUG9ydC50Y3AoODApLFxuICAgICAgJ0FsbG93IEhUVFAgZnJvbSBjb20uYW1hem9uYXdzLmdsb2JhbC5jbG91ZGZyb250Lm9yaWdpbi1mYWNpbmcnLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYW4gRUMyIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VjIGdyb3VwICsgaW5zdGFuY2UgcHJvZmlsZSBhbmQgcm9sZVxuICAgIGNvbnN0IGluc3RhbmNlUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnc2VydmVyLWluc3RhbmNlLXJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc3NtLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBWU0NvZGVJbnN0YW5jZUlubGluZVBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBzaWQ6ICdTdHNBY2Nlc3MnLFxuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06QWRkUm9sZVRvSW5zdGFuY2VQcm9maWxlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkF0dGFjaFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06Q3JlYXRlUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpDcmVhdGVTZXJ2aWNlTGlua2VkUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkRlbGV0ZVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkRlbGV0ZVJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06RGVsZXRlU2VydmljZUxpbmtlZFJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06RGV0YWNoUm9sZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpHZXRSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkdldFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06R2V0U2VydmljZUxpbmtlZFJvbGVEZWxldGlvblN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0QXR0YWNoZWRSb2xlUG9saWNpZXMnLFxuICAgICAgICAgICAgICAgICdpYW06TGlzdEluc3RhbmNlUHJvZmlsZXNGb3JSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RSb2xlUG9saWNpZXMnLFxuICAgICAgICAgICAgICAgICdpYW06TGlzdFJvbGVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RSb2xlVGFncycsXG4gICAgICAgICAgICAgICAgJ2lhbTpQdXRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpQdXRSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOlJlbW92ZVJvbGVGcm9tSW5zdGFuY2VQcm9maWxlJyxcbiAgICAgICAgICAgICAgICAnaWFtOlRhZ1JvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06VW50YWdSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOlVwZGF0ZUFzc3VtZVJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06VXBkYXRlUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpVcGRhdGVSb2xlRGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czppYW06OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cm9sZS9jZGstKmBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6aWFtOjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnJvbGUvY2RrLSpgXSxcbiAgICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgIFN0cmluZ0xpa2U6IHtcbiAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZm9ybWF0aW9uOionXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246Kjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnN0YWNrL0NES1Rvb2xraXQvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkV4ZWN1dGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIHNpZDogJ1MzQWNjZXNzJyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydzMzoqJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgc2lkOiAnRUNSQWNjZXNzJyxcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpTZXRSZXBvc2l0b3J5UG9saWN5JyxcbiAgICAgICAgICAgICAgICAnZWNyOkdldExpZmVjeWNsZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2VjcjpQdXRMaWZlY3ljbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdlY3I6UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6Q3JlYXRlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZWxldGVSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpyZXBvc2l0b3J5L2Nkay0qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcionLFxuICAgICAgICAgICAgICAgICdzc206UHV0UGFyYW1ldGVyKicsXG4gICAgICAgICAgICAgICAgJ3NzbTpEZWxldGVQYXJhbWV0ZXIqJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpwYXJhbWV0ZXIvY2RrLWJvb3RzdHJhcC8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZWMyOk1vZGlmeVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZVZvbHVtZXNNb2RpZmljYXRpb25zKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpFbmFibGVTdGFnZVRyYW5zaXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6RGlzYWJsZVN0YWdlVHJhbnNpdGlvbicsXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpTdGFydFBpcGVsaW5lRXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAnY29kZXBpcGVsaW5lOlN0b3BQaXBlbGluZUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpVcGRhdGVQaXBlbGluZScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNvZGVwaXBlbGluZToqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06Ki8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6a21zOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTprZXkvKmBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsSW5zdGFuY2VSb2xlUG9saWNpZXMsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAnQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZScsXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAnQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5JyxcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25RRGV2ZWxvcGVyQWNjZXNzJyksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnUmVhZE9ubHlBY2Nlc3MnKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgW2luc3RhbmNlUm9sZV0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAnRm9yIHRoaXMgdG1wIHJvbGUgd2UgZG8gbm90IG5lZWQgdG8gcmVzdHJpY3QgbWFuYWdlZCBwb2xpY2llcycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyB0bXAgcm9sZSB0aGUgd2lsZGNhcmRzIGFyZSBmaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCAnc2VydmVyLWluc3RhbmNlJywge1xuICAgICAgdnBjLFxuICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmZyb21Tc21QYXJhbWV0ZXIoXG4gICAgICAgIG1hY2hpbmVJbWFnZUZyb21Tc21QYXJhbWV0ZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBvczogZWMyLk9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVgsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgcmVxdWlyZUltZHN2MjogdHJ1ZSxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgfSxcbiAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczogdHJ1ZSxcbiAgICAgIGRldGFpbGVkTW9uaXRvcmluZzogdHJ1ZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogJy9kZXYvc2RhMScsXG4gICAgICAgICAgdm9sdW1lOiBlYzIuQmxvY2tEZXZpY2VWb2x1bWUuZWJzKGluc3RhbmNlVm9sdW1lU2l6ZSwge1xuICAgICAgICAgICAgdm9sdW1lVHlwZTogZWMyLkVic0RldmljZVZvbHVtZVR5cGUuR1AzLFxuICAgICAgICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlT25UZXJtaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByb2xlOiBpbnN0YW5jZVJvbGUsXG4gICAgICBzZWN1cml0eUdyb3VwOiBzZWNHcm91cCxcbiAgICAgIHVzZXJEYXRhOiBlYzIuVXNlckRhdGEuY3VzdG9tKGBcbiAgICAgICAgI2Nsb3VkLWNvbmZpZ1xuICAgICAgICAgIGhvc3RuYW1lOiAke2luc3RhbmNlTmFtZX1cbiAgICAgICAgICBydW5jbWQ6XG4gICAgICAgICAgICAtIG1rZGlyIC1wICR7aG9tZUZvbGRlcn0gJiYgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9ICR7aG9tZUZvbGRlcn1cbiAgICAgIGApLFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFt0aGlzLmluc3RhbmNlXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUVDMjknLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBpbnN0YW5jZSB3ZSBkbyBub3QgbmVlZCBhbiBhc2cnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENvbmRpdGlvbmFsbHkgYWxsb2NhdGUgRWxhc3RpYyBJUCBmb3IgYXV0by1zdG9wIHNjZW5hcmlvc1xuICAgIC8vIFdoZW4gYXV0by1zdG9wIGlzIGVuYWJsZWQsIHRoZSBpbnN0YW5jZSB3aWxsIGJlIHN0b3BwZWQgYW5kIHN0YXJ0ZWQsIHdoaWNoIGNoYW5nZXNcbiAgICAvLyB0aGUgcHVibGljIElQIGVhY2ggdGltZS4gRUlQIGVuc3VyZXMgQ2xvdWRGcm9udCBjYW4gYWx3YXlzIHJlYWNoIHRoZSBpbnN0YW5jZS5cbiAgICAvLyBXaGVuIGF1dG8tc3RvcCBpcyBkaXNhYmxlZCwgdGhlIGluc3RhbmNlIHJ1bnMgY29udGludW91c2x5IGFuZCBkb2Vzbid0IG5lZWQgRUlQLlxuICAgIGxldCBlaXA6IGVjMi5DZm5FSVAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzPy5lbmFibGVBdXRvU3RvcCkge1xuICAgICAgZWlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgJ2VsYXN0aWMtaXAnLCB7XG4gICAgICAgIGRvbWFpbjogJ3ZwYycsXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdOYW1lJyxcbiAgICAgICAgICAgIHZhbHVlOiBgJHtpbnN0YW5jZU5hbWV9LUVJUGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBc3NvY2lhdGUgRWxhc3RpYyBJUCB3aXRoIHRoZSBpbnN0YW5jZVxuICAgICAgbmV3IGVjMi5DZm5FSVBBc3NvY2lhdGlvbih0aGlzLCAnZWlwLWFzc29jaWF0aW9uJywge1xuICAgICAgICBlaXA6IGVpcC5yZWYsXG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgIH0pO1xuXG4gICAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgIFtlaXBdLFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtRUMyMycsXG4gICAgICAgICAgICByZWFzb246ICdFbGFzdGljIElQIHJlcXVpcmVkIGZvciBjb25zaXN0ZW50IHB1YmxpYyBJUCBhY3Jvc3Mgc3RvcC9zdGFydCBjeWNsZXMgd2hlbiBhdXRvLXN0b3AgaXMgZW5hYmxlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgQ0YgZGlzdHJpYnV0aW9uIChzcGVjaWFsIGlkKSBhbmQgc3BlY2lhbCBDYWNoZVBvbGljeSB0byBpbnN0YW5jZVxuICAgIGNvbnN0IGNmQ2FjaGVQb2xpY3kgPSBuZXcgY2YuQ2FjaGVQb2xpY3kodGhpcywgJ2NmLWNhY2hlLXBvbGljeScsIHtcbiAgICAgIGNhY2hlUG9saWN5TmFtZTogYGNmLWNhY2hlLXBvbGljeS12c2NvZGVzZXJ2ZXItJHtTdGFjay5vZih0aGlzKS5zdGFja05hbWV9YCxcbiAgICAgIGNvbW1lbnQ6ICdDYWNoZSBwb2xpY3kgZm9yIFZTQ29kZVNlcnZlcicsXG4gICAgICBtaW5UdGw6IER1cmF0aW9uLnNlY29uZHMoMSksXG4gICAgICBtYXhUdGw6IER1cmF0aW9uLnNlY29uZHMoMzE1MzYwMDApLFxuICAgICAgZGVmYXVsdFR0bDogRHVyYXRpb24uc2Vjb25kcyg4NjQwMCksXG4gICAgICBjb29raWVCZWhhdmlvcjogY2YuQ2FjaGVDb29raWVCZWhhdmlvci5hbGwoKSxcbiAgICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nR3ppcDogZmFsc2UsXG4gICAgICBoZWFkZXJCZWhhdmlvcjoge1xuICAgICAgICBiZWhhdmlvcjogJ3doaXRlbGlzdCcsXG4gICAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgICAnQWNjZXB0LUNoYXJzZXQnLFxuICAgICAgICAgICdBdXRob3JpemF0aW9uJyxcbiAgICAgICAgICAnT3JpZ2luJyxcbiAgICAgICAgICAnQWNjZXB0JyxcbiAgICAgICAgICAnUmVmZXJlcicsXG4gICAgICAgICAgJ0hvc3QnLFxuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgICAgICdBY2NlcHQtRGF0ZXRpbWUnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IGNmLkNhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5hbGwoKSxcbiAgICB9KTtcblxuICAgIC8vIERldGVybWluZSBDbG91ZEZyb250IG9yaWdpbiBETlMgbmFtZSBiYXNlZCBvbiBhdXRvLXN0b3AgY29uZmlndXJhdGlvblxuICAgIC8vIC0gSWYgYXV0by1zdG9wIGVuYWJsZWQ6IFVzZSBFbGFzdGljIElQIEROUyAocGVyc2lzdHMgYWNyb3NzIHN0b3Avc3RhcnQgY3ljbGVzKVxuICAgIC8vIC0gSWYgYXV0by1zdG9wIGRpc2FibGVkOiBVc2UgaW5zdGFuY2UgcHVibGljIEROUyAoaW5zdGFuY2UgbmV2ZXIgc3RvcHMpXG4gICAgY29uc3Qgb3JpZ2luRG5zTmFtZSA9IGVpcFxuICAgICAgPyBgZWMyLSR7Rm4uam9pbignLScsIEZuLnNwbGl0KCcuJywgZWlwLmF0dHJQdWJsaWNJcCkpfS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uY29tcHV0ZS5hbWF6b25hd3MuY29tYFxuICAgICAgOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZTtcblxuICAgIGNvbnN0IG9yaWdpbiA9IG5ldyBjZm8uSHR0cE9yaWdpbihvcmlnaW5EbnNOYW1lLCB7XG4gICAgICBwcm90b2NvbFBvbGljeTogY2YuT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUF9PTkxZLFxuICAgICAgb3JpZ2luSWQ6IGBDbG91ZGZyb250LSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS0ke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX1gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IGNmLkRpc3RyaWJ1dGlvbih0aGlzLCAnY2YtZGlzdHJpYnV0aW9uJywge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjZi5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIC8vIE5PVEU6ICdEaXN0cmlidXRpb25zIHRoYXQgdXNlIHRoZSBkZWZhdWx0IENsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlIG9yIHVzZSAndmlwJyBmb3IgdGhlICdTc2xTdXBwb3J0TWV0aG9kJ1xuICAgICAgLy8gYXJlIG5vbi1jb21wbGlhbnQgd2l0aCB0aGlzIHJ1bGUsIGFzIHRoZSBtaW5pbXVtIHNlY3VyaXR5IHBvbGljeSBpcyBzZXQgdG8gVExTdjEgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgdGhlIHNwZWNpZmllZCAnTWluaW11bVByb3RvY29sVmVyc2lvbidcbiAgICAgIC8vIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IGNmLlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgIGNvbW1lbnQ6ICdEaXN0cmlidXRpb24gZm9yIFZTQ29kZVNlcnZlcicsXG4gICAgICBwcmljZUNsYXNzOiBjZi5QcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTCxcbiAgICAgIC8vIEN1c3RvbSBkb21haW4gY29uZmlndXJhdGlvblxuICAgICAgLi4uKGRvbWFpbk5hbWUgJiYgY2VydGlmaWNhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgZG9tYWluTmFtZXM6IFtkb21haW5OYW1lXSxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZTogY2VydGlmaWNhdGUsXG4gICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNmLkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTCxcbiAgICAgICAgY2FjaGVQb2xpY3k6IGNmQ2FjaGVQb2xpY3ksXG4gICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHtcbiAgICAgICAgICAvLyBNYW5hZ2VkLUFsbFZpZXdlciAtIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sIzp+OnRleHQ9V2hlbiUyMHVzaW5nJTIwQVdTLDQ3ZTQlMkRiOTg5JTJENTQ5MmVhZmEwN2QzXG4gICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeUlkOiAnMjE2YWRlZjYtNWM3Zi00N2U0LWI5ODktNTQ5MmVhZmEwN2QzJyxcbiAgICAgICAgfSxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNmLlZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IHtcbiAgICAgICAgJy9wcm94eS8qJzoge1xuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBjZi5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgICAgY29tcHJlc3M6IGZhbHNlLFxuICAgICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sI21hbmFnZWQtY2FjaGUtcG9saWN5LWNhY2hpbmctZGlzYWJsZWRcbiAgICAgICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB7XG4gICAgICAgICAgICAvLyBNYW5hZ2VkLUFsbFZpZXdlciAtIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sIzp+OnRleHQ9V2hlbiUyMHVzaW5nJTIwQVdTLDQ3ZTQlMkRiOTg5JTJENTQ5MmVhZmEwN2QzXG4gICAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5SWQ6ICcyMTZhZGVmNi01YzdmLTQ3ZTQtYjk4OS01NDkyZWFmYTA3ZDMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNmLlZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtkaXN0cmlidXRpb25dLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSMScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCBnZW8gcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjInLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgd2FmIGludGVncmF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjMnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIGFjY2VzcyBsb2dnaW5nIGVuYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgbGltaXQgU1NMIHByb3RvY29scyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHQgdmlld2VyIGNlcnQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSNScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgbGltaXQgU1NMIHByb3RvY29scyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHQgdmlld2VyIGNlcnQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBSb3V0ZTUzIEEgcmVjb3JkIGZvciBjdXN0b20gZG9tYWluXG4gICAgaWYgKGRvbWFpbk5hbWUgJiYgaG9zdGVkWm9uZSkge1xuICAgICAgY29uc3QgYVJlY29yZCA9IG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ2RvbWFpbi1yZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyByb3V0ZTUzdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KGRpc3RyaWJ1dGlvbiksXG4gICAgICAgICksXG4gICAgICB9KTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICBbYVJlY29yZF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1SNTMtMScsXG4gICAgICAgICAgICByZWFzb246ICdBIHJlY29yZCBjcmVhdGVkIGZvciBWUyBDb2RlIHNlcnZlciBjdXN0b20gZG9tYWluJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBVc2UgYSBjdXN0b20gcmVzb3VyY2UgbGFtYmRhIHRvIHJ1biB0aGUgU1NNIGRvY3VtZW50IG9uIHRoZSBpbnN0YW5jZVxuICAgIC8vIFN0b3JlIHRoZSBpbnN0YWxsZXIgcmVmZXJlbmNlIGZvciBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICBsZXQgaW5zdGFsbGVyOiBJbnN0YWxsZXIgfCB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSkge1xuICAgICAgY2FzZSBMaW51eEZsYXZvclR5cGUuVUJVTlRVXzIyOlxuICAgICAgY2FzZSBMaW51eEZsYXZvclR5cGUuVUJVTlRVXzI0OlxuICAgICAgY2FzZSBMaW51eEZsYXZvclR5cGUuVUJVTlRVXzI1OlxuICAgICAgICBpbnN0YWxsZXIgPSBJbnN0YWxsZXIudWJ1bnR1KHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgICAgdnNDb2RlVXNlcjogdnNDb2RlVXNlcixcbiAgICAgICAgICB2c0NvZGVQYXNzd29yZDogdnNjb2RlUGFzc3dvcmQsXG4gICAgICAgICAgZGV2U2VydmVyQmFzZVBhdGg6IHByb3BzPy5kZXZTZXJ2ZXJCYXNlUGF0aCxcbiAgICAgICAgICBkZXZTZXJ2ZXJQb3J0OiBwcm9wcz8uZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICBob21lRm9sZGVyOiBob21lRm9sZGVyLFxuICAgICAgICAgIGxpbnV4Rmxhdm9yVHlwZTogaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0sXG4gICAgICAgICAgY3VzdG9tRG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgICByZXBvVXJsOiBwcm9wcz8ucmVwb1VybCxcbiAgICAgICAgICBhc3NldFppcFMzUGF0aDogcHJvcHM/LmFzc2V0WmlwUzNQYXRoLFxuICAgICAgICAgIGJyYW5jaFppcFMzUGF0aDogcHJvcHM/LmJyYW5jaFppcFMzUGF0aCxcbiAgICAgICAgICBmb2xkZXJaaXBTM1BhdGg6IHByb3BzPy5mb2xkZXJaaXBTM1BhdGgsXG4gICAgICAgIH0pLl9iaW5kKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLkFNQVpPTl9MSU5VWF8yMDIzOlxuICAgICAgICBpbnN0YWxsZXIgPSBJbnN0YWxsZXIuYW1hem9uTGludXgyMDIzKHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgICAgdnNDb2RlVXNlcjogdnNDb2RlVXNlcixcbiAgICAgICAgICB2c0NvZGVQYXNzd29yZDogdnNjb2RlUGFzc3dvcmQsXG4gICAgICAgICAgZGV2U2VydmVyQmFzZVBhdGg6IHByb3BzPy5kZXZTZXJ2ZXJCYXNlUGF0aCxcbiAgICAgICAgICBkZXZTZXJ2ZXJQb3J0OiBwcm9wcz8uZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICBob21lRm9sZGVyOiBob21lRm9sZGVyLFxuICAgICAgICAgIGxpbnV4Rmxhdm9yVHlwZTogaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0sXG4gICAgICAgICAgY3VzdG9tRG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgICByZXBvVXJsOiBwcm9wcz8ucmVwb1VybCxcbiAgICAgICAgICBhc3NldFppcFMzUGF0aDogcHJvcHM/LmFzc2V0WmlwUzNQYXRoLFxuICAgICAgICAgIGJyYW5jaFppcFMzUGF0aDogcHJvcHM/LmJyYW5jaFppcFMzUGF0aCxcbiAgICAgICAgICBmb2xkZXJaaXBTM1BhdGg6IHByb3BzPy5mb2xkZXJaaXBTM1BhdGgsXG4gICAgICAgIH0pLl9iaW5kKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgTGludXggZmxhdm9yOiAke2luc3RhbmNlT3BlcmF0aW5nU3lzdGVtfWApO1xuICAgIH1cblxuICAgIGlmICghaW5zdGFsbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3RhbGxlciB3YXMgbm90IGNyZWF0ZWQgLSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4nKTtcbiAgICB9XG4gICAgLy8gc28gd2UgcGFzcyB0aGUgb3V0ZXIgc2NvcGUgb2YgdGhpcyBjb25zdHJ1Y3QgdGhyb3VnaCB0aGUgaW5zdGFsbGVyXG5cbiAgICAvLyBOT1RFOiBtYXliZSBoYXZlIGEgaGVhbGhjaGVjayBDRk4gY3VzdG9tIHJlc291cmNlIHRvIHNlZSBpZiB0aGUgdnNjb2RlIHNlcnZlciBpcyBoZWFsdGh5XG4gICAgLy8gYXRtIHRoaXMgaXMgYWNoaWV2ZWQgYnkgdGhlIGludGVnIHRlc3RzXG5cbiAgICAvLyBDcmVhdGUgaWRsZSBtb25pdG9yIGZvciBhdXRvLXN0b3AgZmVhdHVyZVxuICAgIGlmIChwcm9wcz8uZW5hYmxlQXV0b1N0b3ApIHtcbiAgICAgIHRoaXMuaWRsZU1vbml0b3IgPSBuZXcgSWRsZU1vbml0b3IodGhpcywgJ0lkbGVNb25pdG9yJywge1xuICAgICAgICBpbnN0YW5jZTogdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgZGlzdHJpYnV0aW9uOiBkaXN0cmlidXRpb24sXG4gICAgICAgIGlkbGVUaW1lb3V0TWludXRlczogcHJvcHM/LmlkbGVUaW1lb3V0TWludXRlcyA/PyAzMCxcbiAgICAgICAgY2hlY2tJbnRlcnZhbE1pbnV0ZXM6IHByb3BzPy5pZGxlQ2hlY2tJbnRlcnZhbE1pbnV0ZXMgPz8gNSxcbiAgICAgICAgc2tpcFN0YXR1c0NoZWNrczogcHJvcHM/LnNraXBTdGF0dXNDaGVja3MgPz8gZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gRW5hYmxlIHRoZSBJZGxlTW9uaXRvciBzY2hlZHVsZSBvbmx5IGFmdGVyIGluc3RhbGxhdGlvbiBjb21wbGV0ZXNcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIG1vbml0b3IgZnJvbSBzdG9wcGluZyB0aGUgaW5zdGFuY2UgZHVyaW5nIFZTIENvZGUgU2VydmVyIGluc3RhbGxhdGlvblxuICAgICAgY29uc3QgZW5hYmxlciA9IG5ldyBJZGxlTW9uaXRvckVuYWJsZXIodGhpcywgJ0lkbGVNb25pdG9yRW5hYmxlcicsIHtcbiAgICAgICAgc2NoZWR1bGVSdWxlOiB0aGlzLmlkbGVNb25pdG9yLnNjaGVkdWxlUnVsZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDcmVhdGUgZXhwbGljaXQgZGVwZW5kZW5jeTogZW5hYmxlciBkZXBlbmRzIG9uIGluc3RhbGxlciBjb21wbGV0aW9uXG4gICAgICAvLyBUaGUgaW5zdGFsbGVyIGNyZWF0ZXMgYSBjdXN0b20gcmVzb3VyY2UgbmFtZWQgJ1NTTUluc3RhbGxlckN1c3RvbVJlc291cmNlJ1xuICAgICAgY29uc3QgaW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2UgPSB0aGlzLm5vZGUuZmluZENoaWxkKCdTU01JbnN0YWxsZXJDdXN0b21SZXNvdXJjZScpO1xuICAgICAgZW5hYmxlci5ub2RlLmFkZERlcGVuZGVuY3koaW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8vIE91dHB1dHNcbiAgICBjb25zdCBmaW5hbERvbWFpbk5hbWUgPSBkb21haW5OYW1lIHx8IGRpc3RyaWJ1dGlvbi5kb21haW5OYW1lO1xuICAgIHRoaXMuZG9tYWluTmFtZSA9IGBodHRwczovLyR7ZmluYWxEb21haW5OYW1lfS8/Zm9sZGVyPSR7aG9tZUZvbGRlcn1gO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ2RvbWFpbk5hbWUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkb21haW4gbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uJyxcbiAgICAgIHZhbHVlOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3N3b3JkID0gdnNjb2RlUGFzc3dvcmQ7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAncGFzc3dvcmQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXNzd29yZCBmb3IgdGhlIFZTQ29kZSBzZXJ2ZXInLFxuICAgICAgdmFsdWU6IHZzY29kZVBhc3N3b3JkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGFncyBhbGwgdGhlIHJlc291cmNlcyBpbiB0aGUgY29uc3RydWN0XG4gKi9cbmNsYXNzIE5vZGVUYWdnZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnRhZ3MgPSB0YWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIC8vIE9ubHkgdGFnIEwxIGNvbnN0cnVjdHMgKENmblJlc291cmNlKSBhbmQgTDIgY29uc3RydWN0cyB0aGF0IHJlcHJlc2VudCBBV1MgcmVzb3VyY2VzXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBieSBhdm9pZGluZyB0YWdnaW5nIG9mIGludGVybWVkaWF0ZSBjb25zdHJ1Y3RzXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgQ0RLIEwxIGNvbnN0cnVjdCAoc3RhcnRzIHdpdGggJ0NmbicpIG9yIGtub3duIHRhZ2dhYmxlIEwyIGNvbnN0cnVjdHNcbiAgICBjb25zdCBpc1RhZ2dhYmxlQ29uc3RydWN0ID1cbiAgICAgIG5vZGVUeXBlLnN0YXJ0c1dpdGgoJ0NmbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnSW5zdGFuY2UnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ1ZwYycpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnU3VibmV0JykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdTZWN1cml0eUdyb3VwJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdWb2x1bWUnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Rpc3RyaWJ1dGlvbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnTG9hZEJhbGFuY2VyJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdUYXJnZXRHcm91cCcpO1xuXG4gICAgLy8gU2tpcCBjb25zdHJ1Y3RzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIGlzc3Vlc1xuICAgIGNvbnN0IGlzUHJvYmxlbWF0aWNDb25zdHJ1Y3QgPVxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0NlcnRpZmljYXRlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdIb3N0ZWRab25lJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdDdXN0b21SZXNvdXJjZScpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnUHJvdmlkZXInKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Z1bmN0aW9uJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdSb2xlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdQb2xpY3knKTtcblxuICAgIGlmIChpc1RhZ2dhYmxlQ29uc3RydWN0ICYmICFpc1Byb2JsZW1hdGljQ29uc3RydWN0KSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFRhZ3Mub2Yobm9kZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0YWdnaW5nIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
693
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnNjb2RlLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92c2NvZGUtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBUXFCO0FBQ3JCLDBEQUEwRDtBQUMxRCxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCw4REFBMEQ7QUFDMUQsc0ZBQWlGO0FBQ2pGLHFEQUFrRDtBQUNsRCx5Q0FBNkU7QUFDN0Usc0ZBQW1GO0FBQ25GLDBFQUFzRTtBQStRdEU7O0dBRUc7QUFDSCxJQUFZLGVBb0JYO0FBcEJELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCx5Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILCtDQUE0QixDQUFBO0FBQzlCLENBQUMsRUFwQlcsZUFBZSwrQkFBZixlQUFlLFFBb0IxQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxxQkFVWDtBQVZELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsb0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsd0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFVaEM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBcUJ6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsV0FBVztRQUNYLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxZQUFZLElB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LENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5DLGlEQUFpRDtRQUNqRCxNQUFNLHNCQUFzQixHQUMxQixRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoQyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUMvQixRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ25DLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxDQUFDO29CQUNILGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixpQ0FBaUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBc3BlY3RzLFxuICBDZm5PdXRwdXQsXG4gIER1cmF0aW9uLFxuICBGbixcbiAgSUFzcGVjdCxcbiAgU3RhY2ssXG4gIFRhZ3MsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNmIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCAqIGFzIGNmbyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcm91dGU1M3RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElkbGVNb25pdG9yIH0gZnJvbSAnLi9pZGxlLW1vbml0b3IvaWRsZS1tb25pdG9yJztcbmltcG9ydCB7IElkbGVNb25pdG9yRW5hYmxlciB9IGZyb20gJy4vaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXInO1xuaW1wb3J0IHsgSW5zdGFsbGVyIH0gZnJvbSAnLi9pbnN0YWxsZXIvaW5zdGFsbGVyJztcbmltcG9ydCB7IGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yIH0gZnJvbSAnLi9tYXBwaW5ncyc7XG5pbXBvcnQgeyBBd3NNYW5hZ2VkUHJlZml4TGlzdCB9IGZyb20gJy4vcHJlZml4bGlzdC1yZXRyaWV2ZXIvcHJlZml4bGlzdC1yZXRyaWV2ZXInO1xuaW1wb3J0IHsgU2VjcmV0UmV0cmlldmVyIH0gZnJvbSAnLi9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXInO1xuXG4vKipcbiAqIEN1c3RvbSBpbnN0YWxsYXRpb24gc3RlcCBmb3IgU1NNIGRvY3VtZW50XG4gKiBBbGxvd3MgdXNlcnMgdG8gZXh0ZW5kIHRoZSBpbnN0YWxsZXIgd2l0aCBhZGRpdGlvbmFsIHNoZWxsIGNvbW1hbmRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSW5zdGFsbFN0ZXAge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHN0ZXBcbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBTU00gZG9jdW1lbnRcbiAgICpcbiAgICogQGV4YW1wbGUgJ0luc3RhbGxDdXN0b21Ub29sJ1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaGVsbCBjb21tYW5kcyB0byBydW4gZm9yIHRoaXMgc3RlcFxuICAgKiBFYWNoIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiBzZXF1ZW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZSBbJyMhL2Jpbi9iYXNoJywgJ2VjaG8gXCJJbnN0YWxsaW5nIGN1c3RvbSB0b29sXCInLCAnYXB0LWdldCBpbnN0YWxsIC15IG15LXRvb2wnXVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBWU0NvZGVTZXJ2ZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlNDb2RlU2VydmVyUHJvcHMge1xuICAvKipcbiAgICogVXNlck5hbWUgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwYXJ0aWNpcGFudFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlVXNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFzc3dvcmQgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eSBhbmQgd2lsbCB0aGVuIGJlIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlUGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZTQ29kZSBTZXJ2ZXIgRUMyIGluc3RhbmNlIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBWU0NvZGVTZXJ2ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgaW5zdGFuY2Ugdm9sdW1lIHNpemUgaW4gR0JcbiAgICpcbiAgICogQGRlZmF1bHQgLSA0MFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VWb2x1bWVTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBjbGFzc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG03Z1xuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VDbGFzcz86IGVjMi5JbnN0YW5jZUNsYXNzO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBzaXplXG4gICAqXG4gICAqIEBkZWZhdWx0IC0geGxhcmdlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVNpemU/OiBlYzIuSW5zdGFuY2VTaXplO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBvcGVyYXRpbmcgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVWJ1bnR1LTI0XG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbT86IExpbnV4Rmxhdm9yVHlwZTtcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgY3B1IGFyY2hpdGVjdHVyZSBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcm1cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQ3B1QXJjaGl0ZWN0dXJlPzogTGludXhBcmNoaXRlY3R1cmVUeXBlO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgdG8gb3BlbiBpbiBWUyBDb2RlIHNlcnZlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIC9Xb3Jrc2hvcFxuICAgKi9cbiAgcmVhZG9ubHkgaG9tZUZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciB0aGUgYXBwbGljYXRpb24gdG8gYmUgYWRkZWQgdG8gTmdpbnggc2l0ZXMtYXZhaWxhYmxlIGxpc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcHBcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlckJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IGZvciB0aGUgRGV2U2VydmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gODA4MVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2U2VydmVyUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBpbnN0YW5jZSByb2xlIHBvbGljaWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW11cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFkZCB0byB0aGUgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSB7fVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZG9tYWluIG5hbWUgZm9yIHRoZSBWUyBDb2RlIHNlcnZlclxuICAgKiBXaGVuIHByb3ZpZGVkLCBjcmVhdGVzIGEgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gd2l0aCB0aGlzIGRvbWFpbiBuYW1lXG4gICAqIGFuZCBzZXRzIHVwIFJvdXRlNTMgQSByZWNvcmQgcG9pbnRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZXMgQ2xvdWRGcm9udCBkZWZhdWx0IGRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUm91dGU1MyBob3N0ZWQgem9uZSBJRCBmb3IgdGhlIGRvbWFpblxuICAgKiBSZXF1aXJlZCB3aGVuIHVzaW5nIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgYXR0ZW1wdCB0byBsb29rdXAgaG9zdGVkIHpvbmUgZnJvbSBkb21haW4gbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZGlzY292ZXIgZnJvbSBkb21haW4gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgZXhpc3RpbmcgQUNNIGNlcnRpZmljYXRlIGZvciB0aGUgZG9tYWluXG4gICAqIENlcnRpZmljYXRlIG11c3QgYmUgaW4gdXMtZWFzdC0xIHJlZ2lvbiBmb3IgQ2xvdWRGcm9udFxuICAgKiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tY3JlYXRlIGNlcnRpZmljYXRlIGlmIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBpcyB0cnVlXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQXV0by1jcmVhdGUgQUNNIGNlcnRpZmljYXRlIHdpdGggRE5TIHZhbGlkYXRpb24gaW4gdXMtZWFzdC0xIHJlZ2lvblxuICAgKiBSZXF1aXJlcyBob3N0ZWRab25lSWQgdG8gYmUgcHJvdmlkZWQgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqIENhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggY2VydGlmaWNhdGVBcm5cbiAgICogQ2VydGlmaWNhdGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgaW4gdXMtZWFzdC0xIGFzIHJlcXVpcmVkIGJ5IENsb3VkRnJvbnRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhdXRvbWF0aWMgaW5zdGFuY2Ugc3RvcCB3aGVuIGlkbGVcbiAgICogTW9uaXRvcnMgQ2xvdWRGcm9udCBtZXRyaWNzIGFuZCBzdG9wcyB0aGUgRUMyIGluc3RhbmNlIGFmdGVyIHNwZWNpZmllZCBpZGxlIHRpbWVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUF1dG9TdG9wPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWludXRlcyBvZiBpbmFjdGl2aXR5IGJlZm9yZSBzdG9wcGluZyB0aGUgaW5zdGFuY2VcbiAgICogT25seSBhcHBsaWVzIHdoZW4gZW5hYmxlQXV0b1N0b3AgaXMgdHJ1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAzMFxuICAgKi9cbiAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaW51dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGlkbGUgYWN0aXZpdHkgKGluIG1pbnV0ZXMpXG4gICAqIE9ubHkgYXBwbGllcyB3aGVuIGVuYWJsZUF1dG9TdG9wIGlzIHRydWVcbiAgICpcbiAgICogQGRlZmF1bHQgNSAtIENoZWNrIGV2ZXJ5IDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaWRsZUNoZWNrSW50ZXJ2YWxNaW51dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTa2lwIGluc3RhbmNlIHN0YXR1cyBjaGVja3MgaW4gSWRsZU1vbml0b3JcbiAgICogV2hlbiB0cnVlLCBJZGxlTW9uaXRvciB3aWxsIHN0b3AgaWRsZSBpbnN0YW5jZXMgZXZlbiBpZiBzdGF0dXMgY2hlY2tzIGhhdmVuJ3QgcGFzc2VkXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyB3aGVyZSBzdGF0dXMgY2hlY2sgaW5pdGlhbGl6YXRpb24gdGltZVxuICAgKiBleGNlZWRzIHRoZSB0ZXN0IHRpbWVvdXQgbGltaXRzXG4gICAqXG4gICAqIFdBUk5JTkc6IEZvciB0ZXN0aW5nIG9ubHkgLSBpbiBwcm9kdWN0aW9uLCB5b3Ugc2hvdWxkIHdhaXQgZm9yIHN0YXR1cyBjaGVja3NcbiAgICogdG8gcGFzcyBiZWZvcmUgc3RvcHBpbmcgaW5zdGFuY2VzIHRvIGF2b2lkIHN0b3BwaW5nIHVuaGVhbHRoeSBpbnN0YW5jZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBTdGF0dXNDaGVja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW1vdGUgZ2l0IHJlcG9zaXRvcnkgVVJMIHRvIGNsb25lIGludG8gdGhlIGhvbWUgZm9sZGVyLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSBjbG9uZWQgaW50byB0aGUgdXNlcidzIGhvbWUgZm9sZGVyIGR1cmluZyBpbnN0YW5jZSBzZXR1cC5cbiAgICogVXNlZnVsIGZvciBwcmUtcG9wdWxhdGluZyB3b3Jrc2hvcCBlbnZpcm9ubWVudHMgd2l0aCBzdGFydGVyIGNvZGUuXG4gICAqXG4gICAqIEBleGFtcGxlICdodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvbXktd29ya3Nob3AtcmVwby5naXQnXG4gICAqIEBkZWZhdWx0IC0gbm8gcmVwbyBjbG9uZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHBhdGggdG8gYSB6aXAgZmlsZSBjb250YWluaW5nIGFzc2V0cyB0byBleHRyYWN0IGludG8gdGhlIGhvbWUgZm9sZGVyLlxuICAgKlxuICAgKiBUaGUgemlwIGNvbnRlbnRzIHdpbGwgYmUgZXh0cmFjdGVkIHRvIHRoZSB1c2VyJ3MgaG9tZSBmb2xkZXIgYW5kIGNvbW1pdHRlZCB0byBnaXQuXG4gICAqIFVzZSB0aGlzIHRvIHByb3ZpZGUgd29ya3Nob3AgbWF0ZXJpYWxzLCBzYW1wbGUgZGF0YSwgb3IgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICpcbiAgICogQGV4YW1wbGUgJ215LXdvcmtzaG9wLWJ1Y2tldC9hc3NldHMvd29ya3Nob3AtbWF0ZXJpYWxzLnppcCdcbiAgICogQGRlZmF1bHQgLSBubyBhc3NldHMgZG93bmxvYWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRaaXBTM1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHBhdGggdG8gYSB6aXAgZmlsZSBjb250YWluaW5nIGdpdCBicmFuY2hlcyB0byBjcmVhdGUgaW4gdGhlIGhvbWUgZm9sZGVyIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEVhY2ggdG9wLWxldmVsIGZvbGRlciBpbiB0aGUgemlwIGJlY29tZXMgYSBzZXBhcmF0ZSBnaXQgYnJhbmNoIHdpdGggdGhhdCBmb2xkZXIncyBjb250ZW50cy5cbiAgICogSWRlYWwgZm9yIGNyZWF0aW5nIHN0ZXAtYnktc3RlcCB3b3Jrc2hvcCBicmFuY2hlcyAoZS5nLiwgc3RlcC0xLCBzdGVwLTIsIHNvbHV0aW9uKS5cbiAgICpcbiAgICogQGV4YW1wbGUgJ215LXdvcmtzaG9wLWJ1Y2tldC9icmFuY2hlcy9sYWItYnJhbmNoZXMuemlwJyAoY29udGFpbmluZyBmb2xkZXJzOiBzdGVwLTEvLCBzdGVwLTIvLCBzb2x1dGlvbi8pXG4gICAqIEBkZWZhdWx0IC0gbm8gYnJhbmNoZXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoWmlwUzNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTMyBwYXRoIHRvIGEgemlwIGZpbGUgY29udGFpbmluZyBtdWx0aXBsZSBmb2xkZXJzIHRvIGNyZWF0ZSBhcyBzZXBhcmF0ZSBnaXQgcmVwb3NpdG9yaWVzLlxuICAgKlxuICAgKiBFYWNoIHRvcC1sZXZlbCBmb2xkZXIgaW4gdGhlIHppcCBiZWNvbWVzIGEgc2VwYXJhdGUgc3ViZm9sZGVyIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LFxuICAgKiBpbml0aWFsaXplZCBhcyBpdHMgb3duIGdpdCByZXBvc2l0b3J5LiBVc2VmdWwgZm9yIG11bHRpLXByb2plY3Qgd29ya3Nob3BzLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnbXktd29ya3Nob3AtYnVja2V0L2ZvbGRlcnMvd29ya3Nob3AtcHJvamVjdHMuemlwJyAoY29udGFpbmluZyBmb2xkZXJzOiBmcm9udGVuZC8sIGJhY2tlbmQvLCBpbmZyYXN0cnVjdHVyZS8pXG4gICAqIEBkZWZhdWx0IC0gbm8gZm9sZGVycyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJaaXBTM1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpbnN0YWxsYXRpb24gc3RlcHMgdG8gZXh0ZW5kIHRoZSBTU00gZG9jdW1lbnRcbiAgICpcbiAgICogQWxsb3dzIHlvdSB0byBhZGQgYWRkaXRpb25hbCBzaGVsbCBjb21tYW5kcyB0aGF0IHJ1biBhZnRlciB0aGUgc3RhbmRhcmQgaW5zdGFsbGF0aW9uIHN0ZXBzLlxuICAgKiBVc2VmdWwgZm9yIGluc3RhbGxpbmcgd29ya3Nob3Atc3BlY2lmaWMgdG9vbHMsIGNvbmZpZ3VyaW5nIGN1c3RvbSBlbnZpcm9ubWVudHMsIG9yIHJ1bm5pbmdcbiAgICogc2V0dXAgc2NyaXB0cy5cbiAgICpcbiAgICogRWFjaCBzdGVwIHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHByb3ZpZGVkLCBhZnRlciBhbGwgc3RhbmRhcmQgaW5zdGFsbGF0aW9uIHN0ZXBzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjdXN0b21JbnN0YWxsU3RlcHM6IFtcbiAgICogICB7XG4gICAqICAgICBuYW1lOiAnSW5zdGFsbEN1c3RvbVRvb2wnLFxuICAgKiAgICAgY29tbWFuZHM6IFtcbiAgICogICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICogICAgICAgJ2VjaG8gXCJJbnN0YWxsaW5nIG15IGN1c3RvbSB0b29sXCInLFxuICAgKiAgICAgICAnY3VybCAtTyBodHRwczovL2V4YW1wbGUuY29tL3Rvb2wuc2gnLFxuICAgKiAgICAgICAnYmFzaCB0b29sLnNoJyxcbiAgICogICAgIF0sXG4gICAqICAgfSxcbiAgICogICB7XG4gICAqICAgICBuYW1lOiAnQ29uZmlndXJlV29ya3Nob3BFbnYnLFxuICAgKiAgICAgY29tbWFuZHM6IFtcbiAgICogICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICogICAgICAgJ2VjaG8gXCJleHBvcnQgTVlfVkFSPXZhbHVlXCIgPj4gL2hvbWUvcGFydGljaXBhbnQvLmJhc2hyYycsXG4gICAqICAgICBdLFxuICAgKiAgIH0sXG4gICAqIF1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjdXN0b20gaW5zdGFsbGF0aW9uIHN0ZXBzXG4gICAqL1xuICByZWFkb25seSBjdXN0b21JbnN0YWxsU3RlcHM/OiBDdXN0b21JbnN0YWxsU3RlcFtdO1xufVxuXG4vKipcbiAqIFRoZSBmbGF2b3Igb2YgbGludXggeW91IHdhbnQgdG8gcnVuIHZzY29kZSBzZXJ2ZXIgb25cbiAqL1xuZXhwb3J0IGVudW0gTGludXhGbGF2b3JUeXBlIHtcbiAgLyoqXG4gICAqIFVidW50dSAyMlxuICAgKi9cbiAgVUJVTlRVXzIyID0gJ3VidW50dTIyJyxcblxuICAvKipcbiAgICogVWJ1bnR1IDI0XG4gICAqL1xuICBVQlVOVFVfMjQgPSAndWJ1bnR1MjQnLFxuXG4gIC8qKlxuICAgKiBVYnVudHUgMjVcbiAgICovXG4gIFVCVU5UVV8yNSA9ICd1YnVudHUyNScsXG5cbiAgLyoqXG4gICAqIEFtYXpvbiBMaW51eCAyMDIzXG4gICAqL1xuICBBTUFaT05fTElOVVhfMjAyMyA9ICdhbDIwMjMnLFxufVxuXG4vKipcbiAqIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGNwdSB5b3Ugd2FudCB0byBydW4gdnNjb2RlIHNlcnZlciBvblxuICovXG5leHBvcnQgZW51bSBMaW51eEFyY2hpdGVjdHVyZVR5cGUge1xuICAvKipcbiAgICogQVJNIGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgQVJNID0gJ2FybScsXG5cbiAgLyoqXG4gICAqIEFNRDY0IGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgQU1ENjQgPSAnYW1kNjQnLFxufVxuXG4vKipcbiAqIFZTQ29kZVNlcnZlciAtIHNwaW4gaXQgdXAgaW4gdW5kZXIgMTAgbWludXRlc1xuICovXG5leHBvcnQgY2xhc3MgVlNDb2RlU2VydmVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb21haW4gdGhlIHNlcnZlciBpcyByZWFjaGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCB0byBsb2dpbiB0byB0aGUgc2VydmVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEVDMiBpbnN0YW5jZSBydW5uaW5nIFZTIENvZGUgU2VydmVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JSW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBJZGxlTW9uaXRvciBjb25zdHJ1Y3QgKG9ubHkgcHJlc2VudCBpZiBlbmFibGVBdXRvU3RvcCBpcyB0cnVlKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkbGVNb25pdG9yPzogSWRsZU1vbml0b3I7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWU0NvZGVTZXJ2ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBkZWZhdWx0c1xuICAgIGNvbnN0IHZzQ29kZVVzZXIgPSBwcm9wcz8udnNjb2RlVXNlciA/PyAncGFydGljaXBhbnQnO1xuICAgIGNvbnN0IGluc3RhbmNlTmFtZSA9IHByb3BzPy5pbnN0YW5jZU5hbWUgPz8gJ1ZTQ29kZVNlcnZlcic7XG4gICAgY29uc3QgaW5zdGFuY2VWb2x1bWVTaXplID0gcHJvcHM/Lmluc3RhbmNlVm9sdW1lU2l6ZSA/PyA0MDtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvcHM/LmhvbWVGb2xkZXIgPz8gJy9Xb3Jrc2hvcCc7XG4gICAgY29uc3QgaW5zdGFuY2VDbGFzcyA9IHByb3BzPy5pbnN0YW5jZUNsYXNzID8/IGVjMi5JbnN0YW5jZUNsYXNzLk03RztcbiAgICBjb25zdCBpbnN0YW5jZVNpemUgPSBwcm9wcz8uaW5zdGFuY2VTaXplID8/IGVjMi5JbnN0YW5jZVNpemUuWExBUkdFO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IGVjMi5JbnN0YW5jZVR5cGUub2YoaW5zdGFuY2VDbGFzcywgaW5zdGFuY2VTaXplKTtcbiAgICBjb25zdCBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0gPz8gTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yNDtcbiAgICBjb25zdCBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VDcHVBcmNoaXRlY3R1cmUgPz8gTGludXhBcmNoaXRlY3R1cmVUeXBlLkFSTTtcbiAgICBjb25zdCBtYWNoaW5lSW1hZ2VGcm9tU3NtUGFyYW1ldGVyID1cbiAgICAgIGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yKFxuICAgICAgICBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSxcbiAgICAgICAgaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0sXG4gICAgICApO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcyA9XG4gICAgICBwcm9wcz8uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzID8/IFtdO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxUYWdzID0gcHJvcHM/LmFkZGl0aW9uYWxUYWdzID8/IHt9O1xuICAgIGNvbnN0IGRlZmF1bHRUYWdzID0geyBhcHA6ICd2c2NvZGUtc2VydmVyJyB9O1xuXG4gICAgY29uc3QgbWVyZ2VkVGFncyA9IHsgLi4uZGVmYXVsdFRhZ3MsIC4uLmFkZGl0aW9uYWxUYWdzIH07XG4gICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IE5vZGVUYWdnZXIobWVyZ2VkVGFncyksIHsgcHJpb3JpdHk6IDE1MCB9KTtcblxuICAgIC8vIFZhbGlkYXRlIGRvbWFpbiBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHByb3BzPy5kb21haW5OYW1lO1xuICAgIGNvbnN0IGhvc3RlZFpvbmVJZCA9IHByb3BzPy5ob3N0ZWRab25lSWQ7XG4gICAgY29uc3QgY2VydGlmaWNhdGVBcm4gPSBwcm9wcz8uY2VydGlmaWNhdGVBcm47XG4gICAgY29uc3QgYXV0b0NyZWF0ZUNlcnRpZmljYXRlID0gcHJvcHM/LmF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSA/PyBmYWxzZTtcblxuICAgIGlmIChkb21haW5OYW1lKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGVpdGhlciBjZXJ0aWZpY2F0ZUFybiBvciBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgcHJvdmlkZWRcbiAgICAgIGlmICghY2VydGlmaWNhdGVBcm4gJiYgIWF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1doZW4gZG9tYWluTmFtZSBpcyBwcm92aWRlZCwgZWl0aGVyIGNlcnRpZmljYXRlQXJuIG9yIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBtdXN0IGJlIHNwZWNpZmllZCcsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYm90aCBjZXJ0aWZpY2F0ZUFybiBhbmQgYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGFyZSBub3QgcHJvdmlkZWQgdG9nZXRoZXJcbiAgICAgIGlmIChjZXJ0aWZpY2F0ZUFybiAmJiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDYW5ub3Qgc3BlY2lmeSBib3RoIGNlcnRpZmljYXRlQXJuIGFuZCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUuIENob29zZSBvbmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCBob3N0ZWRab25lSWQgaXMgcHJvdmlkZWQgd2hlbiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgdHJ1ZVxuICAgICAgaWYgKGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSAmJiAhaG9zdGVkWm9uZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnaG9zdGVkWm9uZUlkIGlzIHJlcXVpcmVkIHdoZW4gYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGlzIHRydWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGRvbWFpbi1yZWxhdGVkIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgd2l0aG91dCBkb21haW5OYW1lXG4gICAgICBpZiAoaG9zdGVkWm9uZUlkIHx8IGNlcnRpZmljYXRlQXJuIHx8IGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2hvc3RlZFpvbmVJZCwgY2VydGlmaWNhdGVBcm4sIGFuZCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGRvbWFpbk5hbWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB2c2NvZGVQYXNzd29yZCA9IHByb3BzPy52c2NvZGVQYXNzd29yZCA/PyAnJztcbiAgICBpZiAodnNjb2RlUGFzc3dvcmQgPT0gJycpIHtcbiAgICAgIC8vIENyZWF0ZSBhIHNlY3JldCB3aGljaCBpcyB0aGVuIGluamVjdCBpbiB0aGUgU1NNIGRvY3VtZW50IHRvIGluc3RhbGwgdnNjb2RlIHNlcnZlclxuICAgICAgY29uc3Qgc2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAncGFzc3dvcmQtc2VjcmV0Jywge1xuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHBhc3N3b3JkTGVuZ3RoOiAxNixcbiAgICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdXNlcm5hbWU6IHZzQ29kZVVzZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgICAgW3NlY3JldF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1TTUc0JyxcbiAgICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCB2YyBjb2RlIHNlcnZlciB3ZSBkbyBub3QgbmVlZCBwYXNzd29yZCByb3RhdGlvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEhhdmUgYSBjdXN0b20gcmVzb3VyY2UgdG8gcGFzcyB0aGUgc2VjcmV0IGRhdGEgb24/IC0+IHllcyBiZWNhdXNlIG5vdCByZXNvbHZhYmxlIG9uIGNvbXBpbGUgdGltZVxuICAgICAgY29uc3Qgc2VjcmV0UmV0cmlldmVyID0gU2VjcmV0UmV0cmlldmVyLm5ldyh7XG4gICAgICAgIHNlY3JldEFybjogc2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0pLl9iaW5kKHRoaXMpO1xuXG4gICAgICB2c2NvZGVQYXNzd29yZCA9IHNlY3JldFJldHJpZXZlci5zZWNyZXRQYXNzd29yZFBsYWludGV4dDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgU1NMIGNlcnRpZmljYXRlIGZvciBjdXN0b20gZG9tYWluXG4gICAgbGV0IGNlcnRpZmljYXRlOiBhY20uSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGRvbWFpbk5hbWUpIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgaG9zdGVkIHpvbmVcbiAgICAgIGlmIChob3N0ZWRab25lSWQpIHtcbiAgICAgICAgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnaG9zdGVkLXpvbmUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3RlZFpvbmVJZDogaG9zdGVkWm9uZUlkLFxuICAgICAgICAgICAgem9uZU5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2t1cCBob3N0ZWQgem9uZSBieSBkb21haW4gbmFtZVxuICAgICAgICBob3N0ZWRab25lID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAodGhpcywgJ2hvc3RlZC16b25lJywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgY2VydGlmaWNhdGVcbiAgICAgIGlmIChjZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICAvLyBVc2UgZXhpc3RpbmcgY2VydGlmaWNhdGVcbiAgICAgICAgY2VydGlmaWNhdGUgPSBhY20uQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ2NlcnRpZmljYXRlJyxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoYXV0b0NyZWF0ZUNlcnRpZmljYXRlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgY2VydGlmaWNhdGUgd2l0aCBETlMgdmFsaWRhdGlvblxuICAgICAgICAvLyBDbG91ZEZyb250IHJlcXVpcmVzIGNlcnRpZmljYXRlcyB0byBiZSBpbiB1cy1lYXN0LTEgcmVnaW9uXG4gICAgICAgIGlmICghaG9zdGVkWm9uZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdob3N0ZWRab25lIGlzIHJlcXVpcmVkIHdoZW4gYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGlzIHRydWUnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RlOiBVc2luZyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSAoZGVwcmVjYXRlZCBidXQgc3RpbGwgZnVuY3Rpb25hbClcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZXMgaW4gdXMtZWFzdC0xIGZyb20gYW55IHJlZ2lvblxuICAgICAgICAvLyBUaGUgbW9kZXJuIGFwcHJvYWNoIHJlcXVpcmVzIG11bHRpLXN0YWNrIGRlcGxveW1lbnQgd2l0aCBjcm9zc1JlZ2lvblJlZmVyZW5jZXNcbiAgICAgICAgLy8gd2hpY2ggaXMgbW9yZSBjb21wbGV4IGZvciBhIGNvbnN0cnVjdCBsaWJyYXJ5IHRvIGltcGxlbWVudCBjbGVhbmx5XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBpcyBkZXByZWNhdGVkIGJ1dCBzdGlsbCB0aGUgYmVzdCBvcHRpb24gZm9yIGNyb3NzLXJlZ2lvbiBjZXJ0c1xuICAgICAgICBjZXJ0aWZpY2F0ZSA9IG5ldyBhY20uRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ2NlcnRpZmljYXRlJywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgICAgIC8vIEV4cGxpY2l0bHkgZ3JhbnQgdGhlIHZhbGlkYXRpb24gTGFtYmRhIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgY2VydGlmaWNhdGVzXG4gICAgICAgICAgY3VzdG9tUmVzb3VyY2VSb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ2NlcnRpZmljYXRlLXZhbGlkYXRpb24tcm9sZScsIHtcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgICAgIENlcnRpZmljYXRlVmFsaWRhdGlvblBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ2FjbTpEZXNjcmliZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAnYWNtOlJlcXVlc3RDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2FjbTpEZWxldGVDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICdyb3V0ZTUzOkdldENoYW5nZScsXG4gICAgICAgICAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzJyxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICAgIFtjZXJ0aWZpY2F0ZV0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1BQ00xJyxcbiAgICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAgICdDZXJ0aWZpY2F0ZSBpcyBjcmVhdGVkIGZvciBWUyBDb2RlIHNlcnZlciB3aXRoIHByb3BlciBkb21haW4gdmFsaWRhdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAgICdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIExhbWJkYSBuZWVkcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgQUNNIGFuZCBSb3V0ZTUzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkZWZhdWx0IHZwY1xuICAgIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHRoaXMsICd2cGMnLCB7XG4gICAgICBtYXhBenM6IDIsXG4gICAgICBjcmVhdGVJbnRlcm5ldEdhdGV3YXk6IHRydWUsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHVibGljJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbdnBjXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLVZQQzcnLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCB2cGMgd2UgZG8gbm90IG5lZWQgZmxvdyBsb2dzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBTZWNHcm91cCBhc3NvY2lhdGVkIHdpdGhlIHRoZSBDRiBkaXN0IHBMaXN0XG4gICAgY29uc3Qgc2VjR3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ2NmLXRvLXNlcnZlci1zZycsIHtcbiAgICAgIHZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU0cgZm9yIFZTQ29kZVNlcnZlciAtIG9ubHkgYWxsb3cgQ2xvdWRGcm9udCBpbmdyZXNzJyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiAnY2xvdWRmcm9udC10by12c2NvZGUtc2VydmVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF3c01hbmFnZWRQcmVmaXhMaXN0ID0gbmV3IEF3c01hbmFnZWRQcmVmaXhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgICdjZi1wcmVmaXhsaXN0SWQnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbYXdzTWFuYWdlZFByZWZpeExpc3RdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgcHJvdmlkZXIgd2lsZGNhcmRzIGFyZSBmaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBzZWNHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIGVjMi5QZWVyLnByZWZpeExpc3QoYXdzTWFuYWdlZFByZWZpeExpc3QucHJlZml4TGlzdC5wcmVmaXhMaXN0SWQpLFxuICAgICAgZWMyLlBvcnQudGNwKDgwKSxcbiAgICAgICdBbGxvdyBIVFRQIGZyb20gY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGFuIEVDMiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlYyBncm91cCArIGluc3RhbmNlIHByb2ZpbGUgYW5kIHJvbGVcbiAgICBjb25zdCBpbnN0YW5jZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ3NlcnZlci1pbnN0YW5jZS1yb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3NzbS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgVlNDb2RlSW5zdGFuY2VJbmxpbmVQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgc2lkOiAnU3RzQWNjZXNzJyxcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkFkZFJvbGVUb0luc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpBdHRhY2hSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkNyZWF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06Q3JlYXRlU2VydmljZUxpbmtlZFJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06RGVsZXRlUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUGVybWlzc2lvbnNCb3VuZGFyeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkRlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkRldGFjaFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06R2V0Um9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpHZXRSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkdldFNlcnZpY2VMaW5rZWRSb2xlRGVsZXRpb25TdGF0dXMnLFxuICAgICAgICAgICAgICAgICdpYW06TGlzdEF0dGFjaGVkUm9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RJbnN0YW5jZVByb2ZpbGVzRm9yUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RSb2xlcycsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVRhZ3MnLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBlcm1pc3Npb25zQm91bmRhcnknLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpSZW1vdmVSb2xlRnJvbUluc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpUYWdSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOlVudGFnUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpVcGRhdGVBc3N1bWVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOlVwZGF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06VXBkYXRlUm9sZURlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6aWFtOjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnJvbGUvY2RrLSpgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmlhbTo6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpyb2xlL2Nkay0qYF0sXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaWtlOiB7XG4gICAgICAgICAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydjbG91ZGZvcm1hdGlvbjoqJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpzdGFjay9DREtUb29sa2l0LypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBzaWQ6ICdTM0FjY2VzcycsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnczM6KiddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIHNpZDogJ0VDUkFjY2VzcycsXG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdlY3I6U2V0UmVwb3NpdG9yeVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRMaWZlY3ljbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdlY3I6UHV0TGlmZWN5Y2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNyZWF0ZVJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICdlY3I6RGVsZXRlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmVjcjoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cmVwb3NpdG9yeS9jZGstKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXIqJyxcbiAgICAgICAgICAgICAgICAnc3NtOlB1dFBhcmFtZXRlcionLFxuICAgICAgICAgICAgICAgICdzc206RGVsZXRlUGFyYW1ldGVyKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2VjMjpNb2RpZnlWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVWb2x1bWVzTW9kaWZpY2F0aW9ucyonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6RW5hYmxlU3RhZ2VUcmFuc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY29kZXBpcGVsaW5lOkRpc2FibGVTdGFnZVRyYW5zaXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6U3RhcnRQaXBlbGluZUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpTdG9wUGlwZWxpbmVFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6VXBkYXRlUGlwZWxpbmUnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjb2RlcGlwZWxpbmU6Kjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OiovKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmttczoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06a2V5LypgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnLFxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0Nsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeScsXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uUURldmVsb3BlckFjY2VzcycpLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ1JlYWRPbmx5QWNjZXNzJyksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtpbnN0YW5jZVJvbGVdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCByb2xlIHdlIGRvIG5vdCBuZWVkIHRvIHJlc3RyaWN0IG1hbmFnZWQgcG9saWNpZXMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIHJvbGUgdGhlIHdpbGRjYXJkcyBhcmUgZmluZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgJ3NlcnZlci1pbnN0YW5jZScsIHtcbiAgICAgIHZwYyxcbiAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgIGluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogZWMyLk1hY2hpbmVJbWFnZS5mcm9tU3NtUGFyYW1ldGVyKFxuICAgICAgICBtYWNoaW5lSW1hZ2VGcm9tU3NtUGFyYW1ldGVyLFxuICAgICAgICB7XG4gICAgICAgICAgb3M6IGVjMi5PcGVyYXRpbmdTeXN0ZW1UeXBlLkxJTlVYLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIHJlcXVpcmVJbWRzdjI6IHRydWUsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgIH0sXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6IHRydWUsXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6ICcvZGV2L3NkYTEnLFxuICAgICAgICAgIHZvbHVtZTogZWMyLkJsb2NrRGV2aWNlVm9sdW1lLmVicyhpbnN0YW5jZVZvbHVtZVNpemUsIHtcbiAgICAgICAgICAgIHZvbHVtZVR5cGU6IGVjMi5FYnNEZXZpY2VWb2x1bWVUeXBlLkdQMyxcbiAgICAgICAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU9uVGVybWluYXRpb246IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcm9sZTogaW5zdGFuY2VSb2xlLFxuICAgICAgc2VjdXJpdHlHcm91cDogc2VjR3JvdXAsXG4gICAgICB1c2VyRGF0YTogZWMyLlVzZXJEYXRhLmN1c3RvbShgXG4gICAgICAgICNjbG91ZC1jb25maWdcbiAgICAgICAgICBob3N0bmFtZTogJHtpbnN0YW5jZU5hbWV9XG4gICAgICAgICAgcnVuY21kOlxuICAgICAgICAgICAgLSBta2RpciAtcCAke2hvbWVGb2xkZXJ9ICYmIGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAke2hvbWVGb2xkZXJ9XG4gICAgICBgKSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbdGhpcy5pbnN0YW5jZV0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1FQzI5JyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyB0bXAgaW5zdGFuY2Ugd2UgZG8gbm90IG5lZWQgYW4gYXNnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBDb25kaXRpb25hbGx5IGFsbG9jYXRlIEVsYXN0aWMgSVAgZm9yIGF1dG8tc3RvcCBzY2VuYXJpb3NcbiAgICAvLyBXaGVuIGF1dG8tc3RvcCBpcyBlbmFibGVkLCB0aGUgaW5zdGFuY2Ugd2lsbCBiZSBzdG9wcGVkIGFuZCBzdGFydGVkLCB3aGljaCBjaGFuZ2VzXG4gICAgLy8gdGhlIHB1YmxpYyBJUCBlYWNoIHRpbWUuIEVJUCBlbnN1cmVzIENsb3VkRnJvbnQgY2FuIGFsd2F5cyByZWFjaCB0aGUgaW5zdGFuY2UuXG4gICAgLy8gV2hlbiBhdXRvLXN0b3AgaXMgZGlzYWJsZWQsIHRoZSBpbnN0YW5jZSBydW5zIGNvbnRpbnVvdXNseSBhbmQgZG9lc24ndCBuZWVkIEVJUC5cbiAgICBsZXQgZWlwOiBlYzIuQ2ZuRUlQIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcz8uZW5hYmxlQXV0b1N0b3ApIHtcbiAgICAgIGVpcCA9IG5ldyBlYzIuQ2ZuRUlQKHRoaXMsICdlbGFzdGljLWlwJywge1xuICAgICAgICBkb21haW46ICd2cGMnLFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnTmFtZScsXG4gICAgICAgICAgICB2YWx1ZTogYCR7aW5zdGFuY2VOYW1lfS1FSVBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgLy8gQXNzb2NpYXRlIEVsYXN0aWMgSVAgd2l0aCB0aGUgaW5zdGFuY2VcbiAgICAgIG5ldyBlYzIuQ2ZuRUlQQXNzb2NpYXRpb24odGhpcywgJ2VpcC1hc3NvY2lhdGlvbicsIHtcbiAgICAgICAgZWlwOiBlaXAucmVmLFxuICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICB9KTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICBbZWlwXSxcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUVDMjMnLFxuICAgICAgICAgICAgcmVhc29uOiAnRWxhc3RpYyBJUCByZXF1aXJlZCBmb3IgY29uc2lzdGVudCBwdWJsaWMgSVAgYWNyb3NzIHN0b3Avc3RhcnQgY3ljbGVzIHdoZW4gYXV0by1zdG9wIGlzIGVuYWJsZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIENGIGRpc3RyaWJ1dGlvbiAoc3BlY2lhbCBpZCkgYW5kIHNwZWNpYWwgQ2FjaGVQb2xpY3kgdG8gaW5zdGFuY2VcbiAgICBjb25zdCBjZkNhY2hlUG9saWN5ID0gbmV3IGNmLkNhY2hlUG9saWN5KHRoaXMsICdjZi1jYWNoZS1wb2xpY3knLCB7XG4gICAgICBjYWNoZVBvbGljeU5hbWU6IGBjZi1jYWNoZS1wb2xpY3ktdnNjb2Rlc2VydmVyLSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfWAsXG4gICAgICBjb21tZW50OiAnQ2FjaGUgcG9saWN5IGZvciBWU0NvZGVTZXJ2ZXInLFxuICAgICAgbWluVHRsOiBEdXJhdGlvbi5zZWNvbmRzKDEpLFxuICAgICAgbWF4VHRsOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKSxcbiAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLnNlY29uZHMoODY0MDApLFxuICAgICAgY29va2llQmVoYXZpb3I6IGNmLkNhY2hlQ29va2llQmVoYXZpb3IuYWxsKCksXG4gICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IGZhbHNlLFxuICAgICAgaGVhZGVyQmVoYXZpb3I6IHtcbiAgICAgICAgYmVoYXZpb3I6ICd3aGl0ZWxpc3QnLFxuICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JyxcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgJ09yaWdpbicsXG4gICAgICAgICAgJ0FjY2VwdCcsXG4gICAgICAgICAgJ1JlZmVyZXInLFxuICAgICAgICAgICdIb3N0JyxcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgICAgICAgICAnQWNjZXB0LURhdGV0aW1lJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBjZi5DYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgfSk7XG5cbiAgICAvLyBEZXRlcm1pbmUgQ2xvdWRGcm9udCBvcmlnaW4gRE5TIG5hbWUgYmFzZWQgb24gYXV0by1zdG9wIGNvbmZpZ3VyYXRpb25cbiAgICAvLyAtIElmIGF1dG8tc3RvcCBlbmFibGVkOiBVc2UgRWxhc3RpYyBJUCBETlMgKHBlcnNpc3RzIGFjcm9zcyBzdG9wL3N0YXJ0IGN5Y2xlcylcbiAgICAvLyAtIElmIGF1dG8tc3RvcCBkaXNhYmxlZDogVXNlIGluc3RhbmNlIHB1YmxpYyBETlMgKGluc3RhbmNlIG5ldmVyIHN0b3BzKVxuICAgIGNvbnN0IG9yaWdpbkRuc05hbWUgPSBlaXBcbiAgICAgID8gYGVjMi0ke0ZuLmpvaW4oJy0nLCBGbi5zcGxpdCgnLicsIGVpcC5hdHRyUHVibGljSXApKX0uJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmNvbXB1dGUuYW1hem9uYXdzLmNvbWBcbiAgICAgIDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0Ruc05hbWU7XG5cbiAgICBjb25zdCBvcmlnaW4gPSBuZXcgY2ZvLkh0dHBPcmlnaW4ob3JpZ2luRG5zTmFtZSwge1xuICAgICAgcHJvdG9jb2xQb2xpY3k6IGNmLk9yaWdpblByb3RvY29sUG9saWN5LkhUVFBfT05MWSxcbiAgICAgIG9yaWdpbklkOiBgQ2xvdWRmcm9udC0ke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tJHtTdGFjay5vZih0aGlzKS5zdGFja05hbWV9YCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IG5ldyBjZi5EaXN0cmlidXRpb24odGhpcywgJ2NmLWRpc3RyaWJ1dGlvbicsIHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBodHRwVmVyc2lvbjogY2YuSHR0cFZlcnNpb24uSFRUUDJfQU5EXzMsXG4gICAgICAvLyBOT1RFOiAnRGlzdHJpYnV0aW9ucyB0aGF0IHVzZSB0aGUgZGVmYXVsdCBDbG91ZEZyb250IHZpZXdlciBjZXJ0aWZpY2F0ZSBvciB1c2UgJ3ZpcCcgZm9yIHRoZSAnU3NsU3VwcG9ydE1ldGhvZCdcbiAgICAgIC8vIGFyZSBub24tY29tcGxpYW50IHdpdGggdGhpcyBydWxlLCBhcyB0aGUgbWluaW11bSBzZWN1cml0eSBwb2xpY3kgaXMgc2V0IHRvIFRMU3YxIHJlZ2FyZGxlc3NcbiAgICAgIC8vIG9mIHRoZSBzcGVjaWZpZWQgJ01pbmltdW1Qcm90b2NvbFZlcnNpb24nXG4gICAgICAvLyBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBjZi5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjEsXG4gICAgICBjb21tZW50OiAnRGlzdHJpYnV0aW9uIGZvciBWU0NvZGVTZXJ2ZXInLFxuICAgICAgcHJpY2VDbGFzczogY2YuUHJpY2VDbGFzcy5QUklDRV9DTEFTU19BTEwsXG4gICAgICAvLyBDdXN0b20gZG9tYWluIGNvbmZpZ3VyYXRpb25cbiAgICAgIC4uLihkb21haW5OYW1lICYmIGNlcnRpZmljYXRlXG4gICAgICAgID8ge1xuICAgICAgICAgIGRvbWFpbk5hbWVzOiBbZG9tYWluTmFtZV0sXG4gICAgICAgICAgY2VydGlmaWNhdGU6IGNlcnRpZmljYXRlLFxuICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBjZi5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgIGNhY2hlUG9saWN5OiBjZkNhY2hlUG9saWN5LFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB7XG4gICAgICAgICAgLy8gTWFuYWdlZC1BbGxWaWV3ZXIgLSBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCM6fjp0ZXh0PVdoZW4lMjB1c2luZyUyMEFXUyw0N2U0JTJEYjk4OSUyRDU0OTJlYWZhMDdkM1xuICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogJzIxNmFkZWY2LTVjN2YtNDdlNC1iOTg5LTU0OTJlYWZhMDdkMycsXG4gICAgICAgIH0sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjZi5WaWV3ZXJQcm90b2NvbFBvbGljeS5BTExPV19BTEwsXG4gICAgICAgIG9yaWdpbixcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiB7XG4gICAgICAgICcvcHJveHkvKic6IHtcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogY2YuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCNtYW5hZ2VkLWNhY2hlLXBvbGljeS1jYWNoaW5nLWRpc2FibGVkXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IGNmLkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeToge1xuICAgICAgICAgICAgLy8gTWFuYWdlZC1BbGxWaWV3ZXIgLSBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCM6fjp0ZXh0PVdoZW4lMjB1c2luZyUyMEFXUyw0N2U0JTJEYjk4OSUyRDU0OTJlYWZhMDdkM1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeUlkOiAnMjE2YWRlZjYtNWM3Zi00N2U0LWI5ODktNTQ5MmVhZmEwN2QzJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjZi5WaWV3ZXJQcm90b2NvbFBvbGljeS5BTExPV19BTEwsXG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbZGlzdHJpYnV0aW9uXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjEnLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgZ2VvIHJlc3RyaWN0aW9ucycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlIyJyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIHdhZiBpbnRlZ3JhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlIzJyxcbiAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCBhY2Nlc3MgbG9nZ2luZyBlbmFibGVkJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjQnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIGxpbWl0IFNTTCBwcm90b2NvbHMgYXMgd2UgdXNlIHRoZSBkZWZhdWx0IHZpZXdlciBjZXJ0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjUnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIGxpbWl0IFNTTCBwcm90b2NvbHMgYXMgd2UgdXNlIHRoZSBkZWZhdWx0IHZpZXdlciBjZXJ0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgUm91dGU1MyBBIHJlY29yZCBmb3IgY3VzdG9tIGRvbWFpblxuICAgIGlmIChkb21haW5OYW1lICYmIGhvc3RlZFpvbmUpIHtcbiAgICAgIGNvbnN0IGFSZWNvcmQgPSBuZXcgcm91dGU1My5BUmVjb3JkKHRoaXMsICdkb21haW4tcmVjb3JkJywge1xuICAgICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgcm91dGU1M3RhcmdldHMuQ2xvdWRGcm9udFRhcmdldChkaXN0cmlidXRpb24pLFxuICAgICAgICApLFxuICAgICAgfSk7XG5cbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgICAgW2FSZWNvcmRdLFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtUjUzLTEnLFxuICAgICAgICAgICAgcmVhc29uOiAnQSByZWNvcmQgY3JlYXRlZCBmb3IgVlMgQ29kZSBzZXJ2ZXIgY3VzdG9tIGRvbWFpbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVXNlIGEgY3VzdG9tIHJlc291cmNlIGxhbWJkYSB0byBydW4gdGhlIFNTTSBkb2N1bWVudCBvbiB0aGUgaW5zdGFuY2VcbiAgICAvLyBTdG9yZSB0aGUgaW5zdGFsbGVyIHJlZmVyZW5jZSBmb3IgZGVwZW5kZW5jeSBtYW5hZ2VtZW50XG4gICAgbGV0IGluc3RhbGxlcjogSW5zdGFsbGVyIHwgdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAoaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0pIHtcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yMjpcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yNDpcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yNTpcbiAgICAgICAgaW5zdGFsbGVyID0gSW5zdGFsbGVyLnVidW50dSh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkLFxuICAgICAgICAgIHZzQ29kZVVzZXI6IHZzQ29kZVVzZXIsXG4gICAgICAgICAgdnNDb2RlUGFzc3dvcmQ6IHZzY29kZVBhc3N3b3JkLFxuICAgICAgICAgIGRldlNlcnZlckJhc2VQYXRoOiBwcm9wcz8uZGV2U2VydmVyQmFzZVBhdGgsXG4gICAgICAgICAgZGV2U2VydmVyUG9ydDogcHJvcHM/LmRldlNlcnZlclBvcnQsXG4gICAgICAgICAgaG9tZUZvbGRlcjogaG9tZUZvbGRlcixcbiAgICAgICAgICBsaW51eEZsYXZvclR5cGU6IGluc3RhbmNlT3BlcmF0aW5nU3lzdGVtLFxuICAgICAgICAgIGN1c3RvbURvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgcmVwb1VybDogcHJvcHM/LnJlcG9VcmwsXG4gICAgICAgICAgYXNzZXRaaXBTM1BhdGg6IHByb3BzPy5hc3NldFppcFMzUGF0aCxcbiAgICAgICAgICBicmFuY2haaXBTM1BhdGg6IHByb3BzPy5icmFuY2haaXBTM1BhdGgsXG4gICAgICAgICAgZm9sZGVyWmlwUzNQYXRoOiBwcm9wcz8uZm9sZGVyWmlwUzNQYXRoLFxuICAgICAgICAgIGN1c3RvbUluc3RhbGxTdGVwczogcHJvcHM/LmN1c3RvbUluc3RhbGxTdGVwcyxcbiAgICAgICAgfSkuX2JpbmQodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMaW51eEZsYXZvclR5cGUuQU1BWk9OX0xJTlVYXzIwMjM6XG4gICAgICAgIGluc3RhbGxlciA9IEluc3RhbGxlci5hbWF6b25MaW51eDIwMjMoe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICB2c0NvZGVVc2VyOiB2c0NvZGVVc2VyLFxuICAgICAgICAgIHZzQ29kZVBhc3N3b3JkOiB2c2NvZGVQYXNzd29yZCxcbiAgICAgICAgICBkZXZTZXJ2ZXJCYXNlUGF0aDogcHJvcHM/LmRldlNlcnZlckJhc2VQYXRoLFxuICAgICAgICAgIGRldlNlcnZlclBvcnQ6IHByb3BzPy5kZXZTZXJ2ZXJQb3J0LFxuICAgICAgICAgIGhvbWVGb2xkZXI6IGhvbWVGb2xkZXIsXG4gICAgICAgICAgbGludXhGbGF2b3JUeXBlOiBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSxcbiAgICAgICAgICBjdXN0b21Eb21haW5OYW1lOiBkb21haW5OYW1lLFxuICAgICAgICAgIHJlcG9Vcmw6IHByb3BzPy5yZXBvVXJsLFxuICAgICAgICAgIGFzc2V0WmlwUzNQYXRoOiBwcm9wcz8uYXNzZXRaaXBTM1BhdGgsXG4gICAgICAgICAgYnJhbmNoWmlwUzNQYXRoOiBwcm9wcz8uYnJhbmNoWmlwUzNQYXRoLFxuICAgICAgICAgIGZvbGRlclppcFMzUGF0aDogcHJvcHM/LmZvbGRlclppcFMzUGF0aCxcbiAgICAgICAgICBjdXN0b21JbnN0YWxsU3RlcHM6IHByb3BzPy5jdXN0b21JbnN0YWxsU3RlcHMsXG4gICAgICAgIH0pLl9iaW5kKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgTGludXggZmxhdm9yOiAke2luc3RhbmNlT3BlcmF0aW5nU3lzdGVtfWApO1xuICAgIH1cblxuICAgIGlmICghaW5zdGFsbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3RhbGxlciB3YXMgbm90IGNyZWF0ZWQgLSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4nKTtcbiAgICB9XG4gICAgLy8gc28gd2UgcGFzcyB0aGUgb3V0ZXIgc2NvcGUgb2YgdGhpcyBjb25zdHJ1Y3QgdGhyb3VnaCB0aGUgaW5zdGFsbGVyXG5cbiAgICAvLyBOT1RFOiBtYXliZSBoYXZlIGEgaGVhbGhjaGVjayBDRk4gY3VzdG9tIHJlc291cmNlIHRvIHNlZSBpZiB0aGUgdnNjb2RlIHNlcnZlciBpcyBoZWFsdGh5XG4gICAgLy8gYXRtIHRoaXMgaXMgYWNoaWV2ZWQgYnkgdGhlIGludGVnIHRlc3RzXG5cbiAgICAvLyBDcmVhdGUgaWRsZSBtb25pdG9yIGZvciBhdXRvLXN0b3AgZmVhdHVyZVxuICAgIGlmIChwcm9wcz8uZW5hYmxlQXV0b1N0b3ApIHtcbiAgICAgIHRoaXMuaWRsZU1vbml0b3IgPSBuZXcgSWRsZU1vbml0b3IodGhpcywgJ0lkbGVNb25pdG9yJywge1xuICAgICAgICBpbnN0YW5jZTogdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgZGlzdHJpYnV0aW9uOiBkaXN0cmlidXRpb24sXG4gICAgICAgIGlkbGVUaW1lb3V0TWludXRlczogcHJvcHM/LmlkbGVUaW1lb3V0TWludXRlcyA/PyAzMCxcbiAgICAgICAgY2hlY2tJbnRlcnZhbE1pbnV0ZXM6IHByb3BzPy5pZGxlQ2hlY2tJbnRlcnZhbE1pbnV0ZXMgPz8gNSxcbiAgICAgICAgc2tpcFN0YXR1c0NoZWNrczogcHJvcHM/LnNraXBTdGF0dXNDaGVja3MgPz8gZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gRW5hYmxlIHRoZSBJZGxlTW9uaXRvciBzY2hlZHVsZSBvbmx5IGFmdGVyIGluc3RhbGxhdGlvbiBjb21wbGV0ZXNcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIG1vbml0b3IgZnJvbSBzdG9wcGluZyB0aGUgaW5zdGFuY2UgZHVyaW5nIFZTIENvZGUgU2VydmVyIGluc3RhbGxhdGlvblxuICAgICAgY29uc3QgZW5hYmxlciA9IG5ldyBJZGxlTW9uaXRvckVuYWJsZXIodGhpcywgJ0lkbGVNb25pdG9yRW5hYmxlcicsIHtcbiAgICAgICAgc2NoZWR1bGVSdWxlOiB0aGlzLmlkbGVNb25pdG9yLnNjaGVkdWxlUnVsZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDcmVhdGUgZXhwbGljaXQgZGVwZW5kZW5jeTogZW5hYmxlciBkZXBlbmRzIG9uIGluc3RhbGxlciBjb21wbGV0aW9uXG4gICAgICAvLyBUaGUgaW5zdGFsbGVyIGNyZWF0ZXMgYSBjdXN0b20gcmVzb3VyY2UgbmFtZWQgJ1NTTUluc3RhbGxlckN1c3RvbVJlc291cmNlJ1xuICAgICAgY29uc3QgaW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2UgPSB0aGlzLm5vZGUuZmluZENoaWxkKCdTU01JbnN0YWxsZXJDdXN0b21SZXNvdXJjZScpO1xuICAgICAgZW5hYmxlci5ub2RlLmFkZERlcGVuZGVuY3koaW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8vIE91dHB1dHNcbiAgICBjb25zdCBmaW5hbERvbWFpbk5hbWUgPSBkb21haW5OYW1lIHx8IGRpc3RyaWJ1dGlvbi5kb21haW5OYW1lO1xuICAgIHRoaXMuZG9tYWluTmFtZSA9IGBodHRwczovLyR7ZmluYWxEb21haW5OYW1lfS8/Zm9sZGVyPSR7aG9tZUZvbGRlcn1gO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ2RvbWFpbk5hbWUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkb21haW4gbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uJyxcbiAgICAgIHZhbHVlOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3N3b3JkID0gdnNjb2RlUGFzc3dvcmQ7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAncGFzc3dvcmQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXNzd29yZCBmb3IgdGhlIFZTQ29kZSBzZXJ2ZXInLFxuICAgICAgdmFsdWU6IHZzY29kZVBhc3N3b3JkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGFncyBhbGwgdGhlIHJlc291cmNlcyBpbiB0aGUgY29uc3RydWN0XG4gKi9cbmNsYXNzIE5vZGVUYWdnZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnRhZ3MgPSB0YWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIC8vIE9ubHkgdGFnIEwxIGNvbnN0cnVjdHMgKENmblJlc291cmNlKSBhbmQgTDIgY29uc3RydWN0cyB0aGF0IHJlcHJlc2VudCBBV1MgcmVzb3VyY2VzXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBieSBhdm9pZGluZyB0YWdnaW5nIG9mIGludGVybWVkaWF0ZSBjb25zdHJ1Y3RzXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgQ0RLIEwxIGNvbnN0cnVjdCAoc3RhcnRzIHdpdGggJ0NmbicpIG9yIGtub3duIHRhZ2dhYmxlIEwyIGNvbnN0cnVjdHNcbiAgICBjb25zdCBpc1RhZ2dhYmxlQ29uc3RydWN0ID1cbiAgICAgIG5vZGVUeXBlLnN0YXJ0c1dpdGgoJ0NmbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnSW5zdGFuY2UnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ1ZwYycpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnU3VibmV0JykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdTZWN1cml0eUdyb3VwJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdWb2x1bWUnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Rpc3RyaWJ1dGlvbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnTG9hZEJhbGFuY2VyJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdUYXJnZXRHcm91cCcpO1xuXG4gICAgLy8gU2tpcCBjb25zdHJ1Y3RzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIGlzc3Vlc1xuICAgIGNvbnN0IGlzUHJvYmxlbWF0aWNDb25zdHJ1Y3QgPVxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0NlcnRpZmljYXRlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdIb3N0ZWRab25lJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdDdXN0b21SZXNvdXJjZScpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnUHJvdmlkZXInKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Z1bmN0aW9uJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdSb2xlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdQb2xpY3knKTtcblxuICAgIGlmIChpc1RhZ2dhYmxlQ29uc3RydWN0ICYmICFpc1Byb2JsZW1hdGljQ29uc3RydWN0KSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFRhZ3Mub2Yobm9kZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0YWdnaW5nIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [7.1.0](https://github.com/taoqf/node-fast-html-parser/compare/v7.0.2...v7.1.0) (2026-03-03)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add option closeAllOnClosing ([44c900a](https://github.com/taoqf/node-fast-html-parser/commit/44c900acc01b8923eb9e45c7b13d6bd148a8e9cd)), closes [#294](https://github.com/taoqf/node-fast-html-parser/issues/294)
|
|
11
|
+
* add preserveTagNesting option to maintain invalid HTML nesting [#295](https://github.com/taoqf/node-fast-html-parser/issues/295) ([d604652](https://github.com/taoqf/node-fast-html-parser/commit/d604652cc7c963118ba16ec6bda1f4e01fb81c9e))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* add missing dev dependency: yarn ([8679d32](https://github.com/taoqf/node-fast-html-parser/commit/8679d3231e6dc1c93f99921d16b728aa9a578ce5))
|
|
17
|
+
|
|
18
|
+
### [7.0.2](https://github.com/taoqf/node-fast-html-parser/compare/v7.0.1...v7.0.2) (2026-01-07)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* [#227](https://github.com/taoqf/node-fast-html-parser/issues/227) ([51528c4](https://github.com/taoqf/node-fast-html-parser/commit/51528c41ef2648d6c4dc1aecd14ee9d2b0083c4f))
|
|
24
|
+
* [#294](https://github.com/taoqf/node-fast-html-parser/issues/294) Closing tag is missing but valid HTML is still not parseable ([950865f](https://github.com/taoqf/node-fast-html-parser/commit/950865fab5f4df7853b36712869b71c90f4d3a1b))
|
|
25
|
+
* add missing dev dependency: yarn ([6d73ea3](https://github.com/taoqf/node-fast-html-parser/commit/6d73ea37c48f4170c35907869ba410c5122a9a1f))
|
|
26
|
+
* test valid.js ([a81fc46](https://github.com/taoqf/node-fast-html-parser/commit/a81fc46fab2507615b0362150d62568a6f52ee4e))
|
|
27
|
+
|
|
5
28
|
### [7.0.1](https://github.com/taoqf/node-fast-html-parser/compare/v7.0.0...v7.0.1) (2024-12-26)
|
|
6
29
|
|
|
7
30
|
|
|
@@ -43,6 +43,7 @@ import { parse } from 'node-html-parser';
|
|
|
43
43
|
|
|
44
44
|
const root = parse('<ul id="list"><li>Hello World</li></ul>');
|
|
45
45
|
|
|
46
|
+
// parse() adds a wrapper node, so the input data's first node is the root's first child node
|
|
46
47
|
console.log(root.firstChild.structure);
|
|
47
48
|
// ul#list
|
|
48
49
|
// li
|
|
@@ -74,7 +75,7 @@ var root = HTMLParser.parse('<ul id="list"><li>Hello World</li></ul>');
|
|
|
74
75
|
|
|
75
76
|
### parse(data[, options])
|
|
76
77
|
|
|
77
|
-
Parse the data provided, and return the root of the generated DOM.
|
|
78
|
+
Parse the data provided, wrap the result in a new node, and return the root of the generated DOM.
|
|
78
79
|
|
|
79
80
|
- **data**, data to parse
|
|
80
81
|
- **options**, parse options
|
|
@@ -85,6 +86,7 @@ Parse the data provided, and return the root of the generated DOM.
|
|
|
85
86
|
comment: false, // retrieve comments (hurts performance slightly)
|
|
86
87
|
fixNestedATags: false, // fix invalid nested <a> HTML tags
|
|
87
88
|
parseNoneClosedTags: false, // close none closed HTML tags instead of removing them
|
|
89
|
+
preserveTagNesting: false, // preserve invalid HTML nesting instead of auto-closing tags (e.g. <p><p>bar</p></p>)
|
|
88
90
|
voidTag: {
|
|
89
91
|
tags: ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'], // optional and case insensitive, default value is ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']
|
|
90
92
|
closingSlash: true // optional, default false. void tag serialisation, add a final slash <br/>
|
|
@@ -94,7 +96,8 @@ Parse the data provided, and return the root of the generated DOM.
|
|
|
94
96
|
noscript: true, // keep text content when parsing
|
|
95
97
|
style: true, // keep text content when parsing
|
|
96
98
|
pre: true // keep text content when parsing
|
|
97
|
-
}
|
|
99
|
+
},
|
|
100
|
+
closeAllOnClosing: false // Close all non-closed tags when containing element closes
|
|
98
101
|
}
|
|
99
102
|
```
|
|
100
103
|
|
|
@@ -112,6 +115,7 @@ class HTMLElement{
|
|
|
112
115
|
this removeWhitespace()
|
|
113
116
|
Node[] querySelectorAll(string selector)
|
|
114
117
|
Node querySelector(string selector)
|
|
118
|
+
boolean matches(string selector)
|
|
115
119
|
HTMLElement[] getElementsByTagName(string tagName)
|
|
116
120
|
Node closest(string selector)
|
|
117
121
|
Node appendChild(Node node)
|
|
@@ -206,6 +210,10 @@ Note: Full range of CSS3 selectors supported since v3.0.0.
|
|
|
206
210
|
|
|
207
211
|
Query CSS Selector to find matching node. `null` if not found.
|
|
208
212
|
|
|
213
|
+
### matches(selector)
|
|
214
|
+
|
|
215
|
+
Tests whether the node matches a given CSS selector.
|
|
216
|
+
|
|
209
217
|
### getElementsByTagName(tagName)
|
|
210
218
|
|
|
211
219
|
Get all elements with the specified tagName.
|
|
@@ -349,11 +357,11 @@ Get all child elements, so all child nodes of type HTMLELement.
|
|
|
349
357
|
|
|
350
358
|
### firstChild
|
|
351
359
|
|
|
352
|
-
Get first child node
|
|
360
|
+
Get first child node of the wrapper node added by `parse()`. `undefined` if the node has no children.
|
|
353
361
|
|
|
354
362
|
### lastChild
|
|
355
363
|
|
|
356
|
-
Get last child node
|
|
364
|
+
Get last child node of the wrapper node added by `parse()`. `undefined` if the node has no children.
|
|
357
365
|
|
|
358
366
|
### firstElementChild
|
|
359
367
|
|
|
@@ -503,7 +503,7 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
503
503
|
_this.nodeType = type_3.default.ELEMENT_NODE;
|
|
504
504
|
_this.rawTagName = tagName;
|
|
505
505
|
_this.rawAttrs = rawAttrs || '';
|
|
506
|
-
_this.
|
|
506
|
+
_this._id = keyAttrs.id || '';
|
|
507
507
|
_this.childNodes = [];
|
|
508
508
|
_this._parseOptions = _parseOptions;
|
|
509
509
|
_this.classList = new DOMTokenList(keyAttrs.class ? keyAttrs.class.split(/\s+/) : [], function (classList) { return _this.setAttribute('class', classList.toString()); } // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
@@ -590,6 +590,16 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
590
590
|
enumerable: false,
|
|
591
591
|
configurable: true
|
|
592
592
|
});
|
|
593
|
+
Object.defineProperty(HTMLElement.prototype, "id", {
|
|
594
|
+
get: function () {
|
|
595
|
+
return this._id;
|
|
596
|
+
},
|
|
597
|
+
set: function (newid) {
|
|
598
|
+
this.setAttribute('id', newid);
|
|
599
|
+
},
|
|
600
|
+
enumerable: false,
|
|
601
|
+
configurable: true
|
|
602
|
+
});
|
|
593
603
|
Object.defineProperty(HTMLElement.prototype, "rawText", {
|
|
594
604
|
/**
|
|
595
605
|
* Get escpaed (as-it) text value of current node and its children.
|
|
@@ -786,7 +796,7 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
786
796
|
res.push(' '.repeat(indention) + str);
|
|
787
797
|
}
|
|
788
798
|
function dfs(node) {
|
|
789
|
-
var idStr = node.
|
|
799
|
+
var idStr = node._id ? "#".concat(node._id) : '';
|
|
790
800
|
var classStr = node.classList.length ? ".".concat(node.classList.value.join('.')) : ''; // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call
|
|
791
801
|
write("".concat(node.rawTagName).concat(idStr).concat(classStr));
|
|
792
802
|
indention++;
|
|
@@ -861,6 +871,17 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
861
871
|
adapter: matcher_1.default,
|
|
862
872
|
});
|
|
863
873
|
};
|
|
874
|
+
/**
|
|
875
|
+
* Tests whether the node matches a given CSS selector.
|
|
876
|
+
* @param {string} selector Simplified CSS selector
|
|
877
|
+
* @return {boolean}
|
|
878
|
+
*/
|
|
879
|
+
HTMLElement.prototype.matches = function (selector) {
|
|
880
|
+
return (0, css_select_1.is)(this, selector, {
|
|
881
|
+
xmlMode: true,
|
|
882
|
+
adapter: matcher_1.default,
|
|
883
|
+
});
|
|
884
|
+
};
|
|
864
885
|
/**
|
|
865
886
|
* find elements by their tagName
|
|
866
887
|
* @param {string} tagName the tagName of the elements to select
|
|
@@ -923,7 +944,7 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
923
944
|
continue;
|
|
924
945
|
}
|
|
925
946
|
if (child.nodeType === type_3.default.ELEMENT_NODE) {
|
|
926
|
-
if (child.
|
|
947
|
+
if (child._id === id) {
|
|
927
948
|
return child;
|
|
928
949
|
}
|
|
929
950
|
// if children are existing push the current status to the stack and keep searching for elements in the level below
|
|
@@ -1073,9 +1094,9 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1073
1094
|
return "".concat(name, "=").concat(val);
|
|
1074
1095
|
})
|
|
1075
1096
|
.join(' ');
|
|
1076
|
-
// Update this.
|
|
1097
|
+
// Update this._id
|
|
1077
1098
|
if (key === 'id') {
|
|
1078
|
-
this.
|
|
1099
|
+
this._id = '';
|
|
1079
1100
|
}
|
|
1080
1101
|
return this;
|
|
1081
1102
|
};
|
|
@@ -1121,9 +1142,9 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1121
1142
|
return "".concat(name, "=").concat(val);
|
|
1122
1143
|
})
|
|
1123
1144
|
.join(' ');
|
|
1124
|
-
// Update this.
|
|
1145
|
+
// Update this._id
|
|
1125
1146
|
if (key === 'id') {
|
|
1126
|
-
this.
|
|
1147
|
+
this._id = value;
|
|
1127
1148
|
}
|
|
1128
1149
|
return this;
|
|
1129
1150
|
};
|
|
@@ -1150,6 +1171,10 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1150
1171
|
return "".concat(name, "=").concat(_this.quoteAttribute(String(val)));
|
|
1151
1172
|
})
|
|
1152
1173
|
.join(' ');
|
|
1174
|
+
// Update this._id
|
|
1175
|
+
if ('id' in attributes) {
|
|
1176
|
+
this._id = attributes['id'];
|
|
1177
|
+
}
|
|
1153
1178
|
return this;
|
|
1154
1179
|
};
|
|
1155
1180
|
HTMLElement.prototype.insertAdjacentHTML = function (where, html) {
|
|
@@ -1421,6 +1446,9 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1421
1446
|
th: { tr: true, table: true, TR: true, TABLE: true },
|
|
1422
1447
|
TH: { tr: true, table: true, TR: true, TABLE: true },
|
|
1423
1448
|
};
|
|
1449
|
+
var kElementsClosedByClosingExcept = {
|
|
1450
|
+
p: { a: true, audio: true, del: true, ins: true, map: true, noscript: true, video: true },
|
|
1451
|
+
};
|
|
1424
1452
|
var frameflag = 'documentfragmentcontainer';
|
|
1425
1453
|
/**
|
|
1426
1454
|
* Parses HTML and returns a root element
|
|
@@ -1501,7 +1529,7 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1501
1529
|
attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val;
|
|
1502
1530
|
}
|
|
1503
1531
|
var parentTagName = currentParent.rawTagName;
|
|
1504
|
-
if (!closingSlash && kElementsClosedByOpening[parentTagName]) {
|
|
1532
|
+
if (!closingSlash && !options.preserveTagNesting && kElementsClosedByOpening[parentTagName]) {
|
|
1505
1533
|
if (kElementsClosedByOpening[parentTagName][tagName]) {
|
|
1506
1534
|
stack.pop();
|
|
1507
1535
|
currentParent = (0, back_1.default)(stack);
|
|
@@ -1566,6 +1594,42 @@ define("nodes/html", ["require", "exports", "css-select", "he", "back", "matcher
|
|
|
1566
1594
|
continue;
|
|
1567
1595
|
}
|
|
1568
1596
|
}
|
|
1597
|
+
var openTag = currentParent.rawTagName ?
|
|
1598
|
+
currentParent.rawTagName.toLowerCase() :
|
|
1599
|
+
'';
|
|
1600
|
+
if (kElementsClosedByClosingExcept[openTag]) {
|
|
1601
|
+
var closingTag = tagName.toLowerCase();
|
|
1602
|
+
if (stack.length > 1) {
|
|
1603
|
+
var possibleContainer = stack[stack.length - 2];
|
|
1604
|
+
if (possibleContainer &&
|
|
1605
|
+
possibleContainer.rawTagName &&
|
|
1606
|
+
possibleContainer.rawTagName.toLowerCase() === closingTag &&
|
|
1607
|
+
!kElementsClosedByClosingExcept[openTag][closingTag]) {
|
|
1608
|
+
// Update range end for closed tag
|
|
1609
|
+
currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];
|
|
1610
|
+
stack.pop();
|
|
1611
|
+
currentParent = (0, back_1.default)(stack);
|
|
1612
|
+
continue;
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
if (options.closeAllByClosing === true) {
|
|
1617
|
+
// If tag was opened, close all nested tags
|
|
1618
|
+
var i = void 0;
|
|
1619
|
+
for (i = stack.length - 2; i >= 0; i--) {
|
|
1620
|
+
if (stack[i].rawTagName === tagName)
|
|
1621
|
+
break;
|
|
1622
|
+
}
|
|
1623
|
+
if (i >= 0) {
|
|
1624
|
+
while (stack.length > i) {
|
|
1625
|
+
// Update range end for closed tag
|
|
1626
|
+
currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];
|
|
1627
|
+
stack.pop();
|
|
1628
|
+
currentParent = (0, back_1.default)(stack);
|
|
1629
|
+
}
|
|
1630
|
+
continue;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1569
1633
|
// Use aggressive strategy to handle unmatching markups.
|
|
1570
1634
|
break;
|
|
1571
1635
|
}
|