cdk-serverless 2.22.4 → 3.0.0
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/README.md +64 -0
- package/docs/constructs/assets/highlight.css +4 -4
- package/docs/constructs/classes/LambdaFunction.html +8 -8
- package/docs/constructs/index.html +45 -1
- package/docs/lambda/assets/highlight.css +9 -2
- package/docs/lambda/classes/errors.BadRequestError.html +1 -1
- package/docs/lambda/classes/errors.ForbiddenError.html +1 -1
- package/docs/lambda/classes/errors.HttpError.html +1 -1
- package/docs/lambda/classes/errors.NotFoundError.html +1 -1
- package/docs/lambda/classes/errors.UnauthenticatedError.html +1 -1
- package/docs/lambda/index.html +45 -1
- package/docs/projen/assets/highlight.css +13 -6
- package/docs/projen/index.html +45 -1
- package/docs/projen/interfaces/ServerlessProjectOptions.html +4 -4
- package/lib/constructs/authentication.js +2 -2
- package/lib/constructs/graphql.js +3 -3
- package/lib/constructs/rest-api.js +2 -2
- package/lib/lambda/auth.js +10 -4
- package/lib/projen/core.js +1 -3
- package/lib/projen/datastore.js +6 -7
- package/lib/projen/lazy-sampledir.js +9 -9
- package/lib/projen/rest-api.js +4 -4
- package/lib/projen/workflow.js +4 -4
- package/lib/tests/http-client.d.ts +48 -0
- package/lib/tests/http-client.js +82 -0
- package/lib/tests/index.d.ts +1 -0
- package/lib/tests/index.js +2 -1
- package/lib/tests/integ-test-util.d.ts +4 -3
- package/lib/tests/integ-test-util.js +14 -27
- package/package.json +2 -5
- package/specs/remove-axios-dependency.md +240 -0
|
@@ -34,7 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.CognitoAuthentication = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
39
39
|
const constructs_1 = require("constructs");
|
|
40
40
|
const func_1 = require("./func");
|
|
@@ -247,4 +247,4 @@ class CognitoAuthentication extends constructs_1.Construct {
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
exports.CognitoAuthentication = CognitoAuthentication;
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9hdXRoZW50aWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsNkNBTXFCO0FBQ3JCLDJDQUF1QztBQUN2QyxpQ0FBd0M7QUFDeEMsK0NBQThQO0FBZ0g5UDs7O0dBR0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBMkJsRDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHlCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDM0IsY0FBYyxFQUFFO2dCQUNkLFNBQVMsRUFBRSxFQUFFO2dCQUNiLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixjQUFjLEVBQUUsS0FBSztnQkFDckIsZ0JBQWdCLEVBQUUsS0FBSzthQUN4QjtZQUNELGtCQUFrQixFQUFFO2dCQUNsQixRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLElBQUk7b0JBQ2IsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0Y7WUFDRCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGFBQWEsRUFBRTtnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixHQUFHLEtBQUss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SixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUVGO0FBaFFELHNEQWdRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvLFxuICBhd3NfY29nbml0b19pZGVudGl0eXBvb2wsXG4gIENmbk91dHB1dCxcbiAgRHVyYXRpb24sXG4gIFN0YWNrLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX0FVVEhfUk9MRUFSTiwgQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfSUQsIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX1VOQVVUSF9ST0xFQVJOLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX1VTRVJQT09MSUQsIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xfQ0xJRU5USUQgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiB7XG4gIC8qKiBUaGUgQ29nbml0byB1c2VyIHBvb2wgdGhhdCBob2xkcyB1c2VyIGluZm9ybWF0aW9uICovXG4gIHJlYWRvbmx5IHVzZXJwb29sOiBhd3NfY29nbml0by5JVXNlclBvb2w7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUp3dEF1dGhlbnRpY2F0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBKV1QgaXNzdWVyIGVuZHBvaW50IFVSTFxuICAgKi9cbiAgcmVhZG9ubHkgaXNzdWVyVXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQncyBhdWRpZW5jZS4gV2lsbCBvbmx5IGJlIGNoZWNrZWQgaWYgcHJlc2VudC5cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGllbmNlPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgSldUIGVuZHBvaW50cyBKV0tTIHN0b3JlLiBVbmxlc3MgdGhpcyBpcyBwcm92aWRlZCwgT0lEQyBkaXNjb3Zlcnkgd2lsbCBiZSB1c2VkIHRvIGZpbmQgdGhpcy5cbiAgICovXG4gIHJlYWRvbmx5IGp3a3NVcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0F1dGhlbnRpY2F0aW9uUHJvcHMge1xuXG4gIC8qKiBOYW1lIGZvciB0aGUgQ29nbml0byB1c2VyIHBvb2wgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBDb2duaXRvIExhbWJkYSB0cmlnZ2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJpZ2dlcnM/OiB7XG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBsYW1iZGEgZnVuY3Rpb24gdG8gdGhlIGN1c3RvbSBtZXNzYWdlIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIENvZGUgaGFzIHRvIHJlc2lkZSBpbiAnLi9zcmMvbGFtYmRhL2NvZ25pdG8uY3VzdG9tLW1lc3NhZ2UudHMnIHdpdGggYSBtZXRob2QgJ2hhbmRsZXInXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGN1c3RvbU1lc3NhZ2VzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIGEgbGFtYmRhIGZ1bmN0aW9uIHRvIHRoZSBwcmUgdG9rZW4gZ2VuZXJhdGlvbiB0cmlnZ2VyXG4gICAgICpcbiAgICAgKiBDb2RlIGhhcyB0byByZXNpZGUgaW4gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS10b2tlbi1nZW5lcmF0aW9uLnRzJyB3aXRoIGEgbWV0aG9kICdoYW5kbGVyJ1xuICAgICAqXG4gICAgICogWW91IGNhbiBvbmx5IHVzZSBwcmVUb2tlbkdlbmVyYXRpb24gb3IgcHJlVG9rZW5HZW5lcmF0aW9udjIsIG5vdCBib3RoLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBwcmVUb2tlbkdlbmVyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBsYW1iZGEgZnVuY3Rpb24gdG8gdGhlIHByZSB0b2tlbiBnZW5lcmF0aW9uIHRyaWdnZXJcbiAgICAgKiBuZXcgdmVyc2lvbiBvZiB0aGUgcHJlIHRva2VuIGdlbmVyYXRpb24gdHJpZ2dlciB3aXRoIEFjY2Vzc1Rva2VuIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIENvZGUgaGFzIHRvIHJlc2lkZSBpbiAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXRva2VuLWdlbmVyYXRpb24udHMnIHdpdGggYSBtZXRob2QgJ2hhbmRsZXInXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIG9ubHkgdXNlIHByZVRva2VuR2VuZXJhdGlvbiBvciBwcmVUb2tlbkdlbmVyYXRpb252Miwgbm90IGJvdGguXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbnYyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIGEgbGFtYmRhIGZ1bmN0aW9uIHRvIHRoZSBwcmUgc2lnbi11cCB0cmlnZ2VyXG4gICAgICpcbiAgICAgKiBDb2RlIGhhcyB0byByZXNpZGUgaW4gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS1zaWdudXAudHMnIHdpdGggYSBtZXRob2QgJ2hhbmRsZXInXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByZVNpZ25VcD86IGJvb2xlYW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgb2YgdGhlIENvZ25pdG8gdXNlciBwb29sXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbFByb3BzPzogYXdzX2NvZ25pdG8uVXNlclBvb2xQcm9wcztcblxuICAvKipcbiAgICogQ29uZmlndXJlIFNFUyBtYWlsIHNlbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IHNlc0VtYWlsU2VuZGVyPzoge1xuICAgIC8qKlxuICAgICAqIEFXUyByZWdpb24gdG8gdXNlIGZvciBTRVNcbiAgICAgKi9cbiAgICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZW5kZXIgbmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZW5kZXIgZW1haWwuIE5lZWRzIHRvIGJlIGFscmVhZHkgdmVyaWZpZWQgaW4gU0VTXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW1haWw6IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogR3JvdXBzIHRvIGNyZWF0ZSBpbiBDb2duaXRvIHVzZXIgcG9vbFxuICAgKiBLZXk6IGdyb3VwIG5hbWVcbiAgICogVmFsdWU6IGdyb3VwIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBncm91cHM/OiB7XG4gICAgcmVhZG9ubHkgW25hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfTtcblxuICAvKiogQ3JlYXRlIGEgbmV3IENvZ25pdG8gSWRlbnRpdHkgUG9vbCBmb3IgdGhlIFVzZXIgcG9vbCAqL1xuICByZWFkb25seSBpZGVudGl0eVBvb2w/OiB7XG4gICAgLyoqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGlkZW50aXR5IHBvb2wgKi9cbiAgICByZWFkb25seSBwb29sQ29uZmlnPzogYXdzX2NvZ25pdG9faWRlbnRpdHlwb29sLklkZW50aXR5UG9vbFByb3BzO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBDb2duaXRvQXV0aGVudGljYXRpb24gY29uc3RydWN0IHNldHMgdXAgYSBDb2duaXRvIFVzZXIgUG9vbCB3aXRoIG9wdGlvbmFsIHRyaWdnZXJzIGFuZCBhbiBvcHRpb25hbCBDb2duaXRvIElkZW50aXR5IFBvb2wuXG4gKiBJdCBhbHNvIGNvbmZpZ3VyZXMgdmFyaW91cyBMYW1iZGEgdHJpZ2dlcnMgZm9yIGN1c3RvbSBtZXNzYWdlLCBwcmUtc2lnbiB1cCwgYW5kIHByZS10b2tlbiBnZW5lcmF0aW9uIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9BdXRoZW50aWNhdGlvbiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb2duaXRvQXV0aGVudGljYXRpb24ge1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgZm9yIHVzZXIgYXV0aGVudGljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlcnBvb2w6IGF3c19jb2duaXRvLlVzZXJQb29sO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgQ29nbml0byBJZGVudGl0eSBQb29sIGZvciBmZWRlcmF0ZWQgaWRlbnRpdGllcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZGVudGl0eVBvb2w/OiBhd3NfY29nbml0b19pZGVudGl0eXBvb2wuSWRlbnRpdHlQb29sO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgTGFtYmRhIGZ1bmN0aW9uIGZvciBjdXN0b20gbWVzc2FnZSB0cmlnZ2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbU1lc3NhZ2VGdW5jdGlvbj86IExhbWJkYUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgTGFtYmRhIGZ1bmN0aW9uIGZvciBwcmUtc2lnbiB1cCB0cmlnZ2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZVNpZ25VcEZ1bmN0aW9uPzogTGFtYmRhRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBMYW1iZGEgZnVuY3Rpb24gZm9yIHByZS10b2tlbiBnZW5lcmF0aW9uIHRyaWdnZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlVG9rZW5HZW5lcmF0aW9uRnVuY3Rpb24/OiBMYW1iZGFGdW5jdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb2duaXRvQXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0aGlzIGNvbnN0cnVjdCBpcyBkZWZpbmVkLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIENvZ25pdG9BdXRoZW50aWNhdGlvbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29nbml0b0F1dGhlbnRpY2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy51c2VycG9vbCA9IG5ldyBhd3NfY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICB1c2VyUG9vbE5hbWU6IHByb3BzLnVzZXJQb29sTmFtZSxcbiAgICAgIGF1dG9WZXJpZnk6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIHBhc3N3b3JkUG9saWN5OiB7XG4gICAgICAgIG1pbkxlbmd0aDogMTIsXG4gICAgICAgIHJlcXVpcmVEaWdpdHM6IGZhbHNlLFxuICAgICAgICByZXF1aXJlTG93ZXJjYXNlOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZVN5bWJvbHM6IGZhbHNlLFxuICAgICAgICByZXF1aXJlVXBwZXJjYXNlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzdGFuZGFyZEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZnVsbG5hbWU6IHtcbiAgICAgICAgICBtdXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbWFpbDoge1xuICAgICAgICAgIG11dGFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGZTaWduVXBFbmFibGVkOiBmYWxzZSxcbiAgICAgIHNpZ25JbkFsaWFzZXM6IHtcbiAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2lnbkluQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICAuLi5wcm9wcy51c2VyUG9vbFByb3BzLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnRyaWdnZXJzPy5jdXN0b21NZXNzYWdlcykge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLmN1c3RvbS1tZXNzYWdlLnRzJztcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkN1c3RvbU1lc3NhZ2VUcmlnZ2VyRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5DdXN0b21NZXNzYWdlVHJpZ2dlckV2ZW50PiB7XG4gIGNvbnNvbGUubG9nKGV2ZW50KTtcblxuICBpZiAoZXZlbnQudHJpZ2dlclNvdXJjZSA9PT0gJ0N1c3RvbU1lc3NhZ2VfQWRtaW5DcmVhdGVVc2VyJykge1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsU3ViamVjdCA9ICcnO1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsTWVzc2FnZSA9ICcnO1xuICB9IGVsc2UgaWYgKGV2ZW50LnRyaWdnZXJTb3VyY2UgPT09ICdDdXN0b21NZXNzYWdlX0ZvcmdvdFBhc3N3b3JkJykge1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsU3ViamVjdCA9ICcnO1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsTWVzc2FnZSA9ICcnO1xuICB9IC8vIC4uLlxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1c3RvbU1lc3NhZ2VGdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnQ3VzdG9tTWVzc2FnZUZ1bmN0aW9uJywge1xuICAgICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGxvYWRlcjoge1xuICAgICAgICAgICAgICAnLmh0bWwnOiAndGV4dCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VycG9vbC5hZGRUcmlnZ2VyKGF3c19jb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLkNVU1RPTV9NRVNTQUdFLCB0aGlzLmN1c3RvbU1lc3NhZ2VGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRyaWdnZXJzPy5wcmVUb2tlbkdlbmVyYXRpb252MiAmJiBwcm9wcy50cmlnZ2Vycz8ucHJlVG9rZW5HZW5lcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW4gb25seSB1c2UgcHJlVG9rZW5HZW5lcmF0aW9uIG9yIHByZVRva2VuR2VuZXJhdGlvbnYyLCBub3QgYm90aC4nKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LnByZVRva2VuR2VuZXJhdGlvbikge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS10b2tlbi1nZW5lcmF0aW9uLnRzJztcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLlByZVRva2VuR2VuZXJhdGlvblRyaWdnZXJFdmVudCk6IFByb21pc2U8QVdTTGFtYmRhLlByZVRva2VuR2VuZXJhdGlvblRyaWdnZXJFdmVudD4ge1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudCkpO1xuXG4gIC8vIG1vZGlmeSBldmVudC5yZXNwb25zZSBoZXJlIC4uLlxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdQcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbicsIHtcbiAgICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXNlcnBvb2wuYWRkVHJpZ2dlcihhd3NfY29nbml0by5Vc2VyUG9vbE9wZXJhdGlvbi5QUkVfVE9LRU5fR0VORVJBVElPTiwgdGhpcy5wcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRyaWdnZXJzPy5wcmVUb2tlbkdlbmVyYXRpb252Mikge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS10b2tlbi1nZW5lcmF0aW9uLnRzJztcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLlByZVRva2VuR2VuZXJhdGlvblYyVHJpZ2dlckV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuUHJlVG9rZW5HZW5lcmF0aW9uVjJUcmlnZ2VyRXZlbnQ+IHtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcblxuICAvLyBtb2RpZnkgZXZlbnQucmVzcG9uc2UgaGVyZSAuLi5cblxuICByZXR1cm4gZXZlbnQ7XG59YCwge1xuICAgICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnUHJlVG9rZW5HZW5lcmF0aW9uRnVuY3Rpb24nLCB7XG4gICAgICAgIGxhbWJkYU9wdGlvbnM6IHtcbiAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgICB9LFxuICAgICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVzZXJwb29sLmFkZFRyaWdnZXIoXG4gICAgICAgIGF3c19jb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLlBSRV9UT0tFTl9HRU5FUkFUSU9OX0NPTkZJRyxcbiAgICAgICAgdGhpcy5wcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbixcbiAgICAgICAgYXdzX2NvZ25pdG8uTGFtYmRhVmVyc2lvbi5WMl8wLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LnByZVNpZ25VcCkge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS1zaWdudXAudHMnO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuUHJlU2lnblVwVHJpZ2dlckV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuUHJlU2lnblVwVHJpZ2dlckV2ZW50PiB7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG5cbiAgLy8gQ29uZmlybSB0aGUgdXNlclxuICAvLyBldmVudC5yZXNwb25zZS5hdXRvQ29uZmlybVVzZXIgPSB0cnVlO1xuXG4gIC8vIFNldCB0aGUgZW1haWwgYXMgdmVyaWZpZWQgaWYgaXQgaXMgaW4gdGhlIHJlcXVlc3RcbiAgLy8gaWYgKGV2ZW50LnJlcXVlc3QudXNlckF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoJ2VtYWlsJykpIHtcbiAgLy8gICBldmVudC5yZXNwb25zZS5hdXRvVmVyaWZ5RW1haWwgPSB0cnVlO1xuICAvLyB9XG5cbiAgLy8gU2V0IHRoZSBwaG9uZSBudW1iZXIgYXMgdmVyaWZpZWQgaWYgaXQgaXMgaW4gdGhlIHJlcXVlc3RcbiAgLy8gaWYgKGV2ZW50LnJlcXVlc3QudXNlckF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoJ3Bob25lX251bWJlcicpKSB7XG4gIC8vICAgZXZlbnQucmVzcG9uc2UuYXV0b1ZlcmlmeVBob25lID0gdHJ1ZTtcbiAgLy8gfVxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZVNpZ25VcEZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdQcmVTaWduVXBGdW5jdGlvbicsIHtcbiAgICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXNlcnBvb2wuYWRkVHJpZ2dlcihhd3NfY29nbml0by5Vc2VyUG9vbE9wZXJhdGlvbi5QUkVfU0lHTl9VUCwgdGhpcy5wcmVTaWduVXBGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnNlc0VtYWlsU2VuZGVyKSB7XG4gICAgICAodGhpcy51c2VycG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhd3NfY29nbml0by5DZm5Vc2VyUG9vbCkuZW1haWxDb25maWd1cmF0aW9uID0ge1xuICAgICAgICBlbWFpbFNlbmRpbmdBY2NvdW50OiAnREVWRUxPUEVSJyxcbiAgICAgICAgZnJvbTogYCR7cHJvcHMuc2VzRW1haWxTZW5kZXIubmFtZX0gPCR7cHJvcHMuc2VzRW1haWxTZW5kZXIuZW1haWx9PmAsXG4gICAgICAgIHNvdXJjZUFybjogYGFybjphd3M6c2VzOiR7cHJvcHMuc2VzRW1haWxTZW5kZXIucmVnaW9uID8/IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbn06JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTppZGVudGl0eS8ke3Byb3BzLnNlc0VtYWlsU2VuZGVyLmVtYWlsfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZ3JvdXBOYW1lIGluIHByb3BzLmdyb3Vwcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcy5ncm91cHMsIGdyb3VwTmFtZSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBEZXNjcmlwdGlvbiA9IHByb3BzLmdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBuZXcgYXdzX2NvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwTmFtZX1gLCB7XG4gICAgICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VycG9vbC51c2VyUG9vbElkLFxuICAgICAgICAgIGdyb3VwTmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZ3JvdXBEZXNjcmlwdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX1VTRVJQT09MSUQsIHsga2V5OiBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX1VTRVJQT09MSUQsIHZhbHVlOiB0aGlzLnVzZXJwb29sLnVzZXJQb29sSWQgfSk7XG5cbiAgICBpZiAocHJvcHMuaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aGlzLmlkZW50aXR5UG9vbCA9IG5ldyBhd3NfY29nbml0b19pZGVudGl0eXBvb2wuSWRlbnRpdHlQb29sKHRoaXMsICdJZGVudGl0eVBvb2wnLCB7XG4gICAgICAgIGFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllczogdHJ1ZSxcbiAgICAgICAgaWRlbnRpdHlQb29sTmFtZTogcHJvcHMudXNlclBvb2xOYW1lICsgJy1pZGVudGl0eScsXG4gICAgICAgIC4uLnByb3BzLmlkZW50aXR5UG9vbC5wb29sQ29uZmlnLFxuICAgICAgICBhdXRoZW50aWNhdGlvblByb3ZpZGVyczoge1xuICAgICAgICAgIHVzZXJQb29sczogW25ldyBhd3NfY29nbml0b19pZGVudGl0eXBvb2wuVXNlclBvb2xBdXRoZW50aWNhdGlvblByb3ZpZGVyKHsgdXNlclBvb2w6IHRoaXMudXNlcnBvb2wgfSldLFxuICAgICAgICAgIC4uLnByb3BzLmlkZW50aXR5UG9vbC5wb29sQ29uZmlnPy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX0lERU5USVRZUE9PTF9JRCwge1xuICAgICAgICBrZXk6IENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX0lELFxuICAgICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVBvb2wuaWRlbnRpdHlQb29sSWQsXG4gICAgICB9KTtcbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfQVVUSF9ST0xFQVJOLCB7XG4gICAgICAgIGtleTogQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfQVVUSF9ST0xFQVJOLFxuICAgICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVBvb2wuYXV0aGVudGljYXRlZFJvbGUucm9sZUFybixcbiAgICAgIH0pO1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX0lERU5USVRZUE9PTF9VTkFVVEhfUk9MRUFSTiwge1xuICAgICAgICBrZXk6IENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX1VOQVVUSF9ST0xFQVJOLFxuICAgICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVBvb2wudW5hdXRoZW50aWNhdGVkUm9sZS5yb2xlQXJuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFVzZXJQb29sQ2xpZW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IGF3c19jb2duaXRvLlVzZXJQb29sQ2xpZW50T3B0aW9ucyk6IGF3c19jb2duaXRvLlVzZXJQb29sQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLnVzZXJwb29sLmFkZENsaWVudChpZCwgb3B0aW9ucyk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX1VTRVJQT09MX0NMSUVOVElEfSR7aWR9YCwge1xuICAgICAga2V5OiBgJHtDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX1VTRVJQT09MX0NMSUVOVElEfSR7aWR9YCxcbiAgICAgIHZhbHVlOiBjbGllbnQudXNlclBvb2xDbGllbnRJZCxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhpcy5pZGVudGl0eVBvb2wuYWRkVXNlclBvb2xBdXRoZW50aWNhdGlvbihcbiAgICAgICAgbmV3IGF3c19jb2duaXRvX2lkZW50aXR5cG9vbC5Vc2VyUG9vbEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoe1xuICAgICAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJwb29sLFxuICAgICAgICAgIHVzZXJQb29sQ2xpZW50OiBjbGllbnQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbn0iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9hdXRoZW50aWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBOEI7QUFDOUIsNkNBTXFCO0FBQ3JCLDJDQUF1QztBQUN2QyxpQ0FBd0M7QUFDeEMsK0NBQThQO0FBZ0g5UDs7O0dBR0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBMkJsRDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHlCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDM0IsY0FBYyxFQUFFO2dCQUNkLFNBQVMsRUFBRSxFQUFFO2dCQUNiLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixjQUFjLEVBQUUsS0FBSztnQkFDckIsZ0JBQWdCLEVBQUUsS0FBSzthQUN4QjtZQUNELGtCQUFrQixFQUFFO2dCQUNsQixRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLElBQUk7b0JBQ2IsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0Y7WUFDRCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGFBQWEsRUFBRTtnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixHQUFHLEtBQUss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SixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUVGO0FBaFFELHNEQWdRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYXdzX2NvZ25pdG8sXG4gIGF3c19jb2duaXRvX2lkZW50aXR5cG9vbCxcbiAgQ2ZuT3V0cHV0LFxuICBEdXJhdGlvbixcbiAgU3RhY2ssXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tICcuL2Z1bmMnO1xuaW1wb3J0IHsgQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfQVVUSF9ST0xFQVJOLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX0lERU5USVRZUE9PTF9JRCwgQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfVU5BVVRIX1JPTEVBUk4sIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xJRCwgQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9VU0VSUE9PTF9DTElFTlRJRCB9IGZyb20gJy4uL3NoYXJlZC9vdXRwdXRzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29nbml0b0F1dGhlbnRpY2F0aW9uIHtcbiAgLyoqIFRoZSBDb2duaXRvIHVzZXIgcG9vbCB0aGF0IGhvbGRzIHVzZXIgaW5mb3JtYXRpb24gKi9cbiAgcmVhZG9ubHkgdXNlcnBvb2w6IGF3c19jb2duaXRvLklVc2VyUG9vbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSnd0QXV0aGVudGljYXRpb24ge1xuICAvKipcbiAgICogVGhlIEpXVCBpc3N1ZXIgZW5kcG9pbnQgVVJMXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXJVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCdzIGF1ZGllbmNlLiBXaWxsIG9ubHkgYmUgY2hlY2tlZCBpZiBwcmVzZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaWVuY2U/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBKV1QgZW5kcG9pbnRzIEpXS1Mgc3RvcmUuIFVubGVzcyB0aGlzIGlzIHByb3ZpZGVkLCBPSURDIGRpc2NvdmVyeSB3aWxsIGJlIHVzZWQgdG8gZmluZCB0aGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgandrc1VybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQXV0aGVudGljYXRpb25Qcm9wcyB7XG5cbiAgLyoqIE5hbWUgZm9yIHRoZSBDb2duaXRvIHVzZXIgcG9vbCAqL1xuICByZWFkb25seSB1c2VyUG9vbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlndXJlIENvZ25pdG8gTGFtYmRhIHRyaWdnZXJzXG4gICAqL1xuICByZWFkb25seSB0cmlnZ2Vycz86IHtcbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIGxhbWJkYSBmdW5jdGlvbiB0byB0aGUgY3VzdG9tIG1lc3NhZ2UgdHJpZ2dlclxuICAgICAqXG4gICAgICogQ29kZSBoYXMgdG8gcmVzaWRlIGluICcuL3NyYy9sYW1iZGEvY29nbml0by5jdXN0b20tbWVzc2FnZS50cycgd2l0aCBhIG1ldGhvZCAnaGFuZGxlcidcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgY3VzdG9tTWVzc2FnZXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBsYW1iZGEgZnVuY3Rpb24gdG8gdGhlIHByZSB0b2tlbiBnZW5lcmF0aW9uIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIENvZGUgaGFzIHRvIHJlc2lkZSBpbiAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXRva2VuLWdlbmVyYXRpb24udHMnIHdpdGggYSBtZXRob2QgJ2hhbmRsZXInXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIG9ubHkgdXNlIHByZVRva2VuR2VuZXJhdGlvbiBvciBwcmVUb2tlbkdlbmVyYXRpb252Miwgbm90IGJvdGguXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIGxhbWJkYSBmdW5jdGlvbiB0byB0aGUgcHJlIHRva2VuIGdlbmVyYXRpb24gdHJpZ2dlclxuICAgICAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcmUgdG9rZW4gZ2VuZXJhdGlvbiB0cmlnZ2VyIHdpdGggQWNjZXNzVG9rZW4gc3VwcG9ydFxuICAgICAqXG4gICAgICogQ29kZSBoYXMgdG8gcmVzaWRlIGluICcuL3NyYy9sYW1iZGEvY29nbml0by5wcmUtdG9rZW4tZ2VuZXJhdGlvbi50cycgd2l0aCBhIG1ldGhvZCAnaGFuZGxlcidcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gb25seSB1c2UgcHJlVG9rZW5HZW5lcmF0aW9uIG9yIHByZVRva2VuR2VuZXJhdGlvbnYyLCBub3QgYm90aC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcHJlVG9rZW5HZW5lcmF0aW9udjI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBsYW1iZGEgZnVuY3Rpb24gdG8gdGhlIHByZSBzaWduLXVwIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIENvZGUgaGFzIHRvIHJlc2lkZSBpbiAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXNpZ251cC50cycgd2l0aCBhIG1ldGhvZCAnaGFuZGxlcidcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcHJlU2lnblVwPzogYm9vbGVhbjtcbiAgfTtcblxuICAvKipcbiAgICogUHJvcGVydGllcyBvZiB0aGUgQ29nbml0byB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sUHJvcHM/OiBhd3NfY29nbml0by5Vc2VyUG9vbFByb3BzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgU0VTIG1haWwgc2VuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc2VzRW1haWxTZW5kZXI/OiB7XG4gICAgLyoqXG4gICAgICogQVdTIHJlZ2lvbiB0byB1c2UgZm9yIFNFU1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNlbmRlciBuYW1lXG4gICAgICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNlbmRlciBlbWFpbC4gTmVlZHMgdG8gYmUgYWxyZWFkeSB2ZXJpZmllZCBpbiBTRVNcbiAgICAgKi9cbiAgICByZWFkb25seSBlbWFpbDogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHcm91cHMgdG8gY3JlYXRlIGluIENvZ25pdG8gdXNlciBwb29sXG4gICAqIEtleTogZ3JvdXAgbmFtZVxuICAgKiBWYWx1ZTogZ3JvdXAgZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHtcbiAgICByZWFkb25seSBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBDcmVhdGUgYSBuZXcgQ29nbml0byBJZGVudGl0eSBQb29sIGZvciB0aGUgVXNlciBwb29sICovXG4gIHJlYWRvbmx5IGlkZW50aXR5UG9vbD86IHtcbiAgICAvKiogY29uZmlndXJhdGlvbiBvZiB0aGUgaWRlbnRpdHkgcG9vbCAqL1xuICAgIHJlYWRvbmx5IHBvb2xDb25maWc/OiBhd3NfY29nbml0b19pZGVudGl0eXBvb2wuSWRlbnRpdHlQb29sUHJvcHM7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIENvZ25pdG9BdXRoZW50aWNhdGlvbiBjb25zdHJ1Y3Qgc2V0cyB1cCBhIENvZ25pdG8gVXNlciBQb29sIHdpdGggb3B0aW9uYWwgdHJpZ2dlcnMgYW5kIGFuIG9wdGlvbmFsIENvZ25pdG8gSWRlbnRpdHkgUG9vbC5cbiAqIEl0IGFsc28gY29uZmlndXJlcyB2YXJpb3VzIExhbWJkYSB0cmlnZ2VycyBmb3IgY3VzdG9tIG1lc3NhZ2UsIHByZS1zaWduIHVwLCBhbmQgcHJlLXRva2VuIGdlbmVyYXRpb24gZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0F1dGhlbnRpY2F0aW9uIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiB7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBmb3IgdXNlciBhdXRoZW50aWNhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VycG9vbDogYXdzX2NvZ25pdG8uVXNlclBvb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBDb2duaXRvIElkZW50aXR5IFBvb2wgZm9yIGZlZGVyYXRlZCBpZGVudGl0aWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkZW50aXR5UG9vbD86IGF3c19jb2duaXRvX2lkZW50aXR5cG9vbC5JZGVudGl0eVBvb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBMYW1iZGEgZnVuY3Rpb24gZm9yIGN1c3RvbSBtZXNzYWdlIHRyaWdnZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tTWVzc2FnZUZ1bmN0aW9uPzogTGFtYmRhRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBMYW1iZGEgZnVuY3Rpb24gZm9yIHByZS1zaWduIHVwIHRyaWdnZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlU2lnblVwRnVuY3Rpb24/OiBMYW1iZGFGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbmFsIExhbWJkYSBmdW5jdGlvbiBmb3IgcHJlLXRva2VuIGdlbmVyYXRpb24gdHJpZ2dlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbj86IExhbWJkYUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENvZ25pdG9BdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgQ29nbml0b0F1dGhlbnRpY2F0aW9uIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQXV0aGVudGljYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnVzZXJwb29sID0gbmV3IGF3c19jb2duaXRvLlVzZXJQb29sKHRoaXMsICdVc2VyUG9vbCcsIHtcbiAgICAgIHVzZXJQb29sTmFtZTogcHJvcHMudXNlclBvb2xOYW1lLFxuICAgICAgYXV0b1ZlcmlmeTogeyBlbWFpbDogdHJ1ZSB9LFxuICAgICAgcGFzc3dvcmRQb2xpY3k6IHtcbiAgICAgICAgbWluTGVuZ3RoOiAxMixcbiAgICAgICAgcmVxdWlyZURpZ2l0czogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVMb3dlcmNhc2U6IGZhbHNlLFxuICAgICAgICByZXF1aXJlU3ltYm9sczogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVVcHBlcmNhc2U6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHN0YW5kYXJkQXR0cmlidXRlczoge1xuICAgICAgICBmdWxsbmFtZToge1xuICAgICAgICAgIG11dGFibGU6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgbXV0YWJsZTogZmFsc2UsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2VsZlNpZ25VcEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2lnbkluQWxpYXNlczoge1xuICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIC4uLnByb3BzLnVzZXJQb29sUHJvcHMsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LmN1c3RvbU1lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBlbnRyeUZpbGUgPSAnLi9zcmMvbGFtYmRhL2NvZ25pdG8uY3VzdG9tLW1lc3NhZ2UudHMnO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQ3VzdG9tTWVzc2FnZVRyaWdnZXJFdmVudCk6IFByb21pc2U8QVdTTGFtYmRhLkN1c3RvbU1lc3NhZ2VUcmlnZ2VyRXZlbnQ+IHtcbiAgY29uc29sZS5sb2coZXZlbnQpO1xuXG4gIGlmIChldmVudC50cmlnZ2VyU291cmNlID09PSAnQ3VzdG9tTWVzc2FnZV9BZG1pbkNyZWF0ZVVzZXInKSB7XG4gICAgLy8gZXZlbnQucmVzcG9uc2UuZW1haWxTdWJqZWN0ID0gJyc7XG4gICAgLy8gZXZlbnQucmVzcG9uc2UuZW1haWxNZXNzYWdlID0gJyc7XG4gIH0gZWxzZSBpZiAoZXZlbnQudHJpZ2dlclNvdXJjZSA9PT0gJ0N1c3RvbU1lc3NhZ2VfRm9yZ290UGFzc3dvcmQnKSB7XG4gICAgLy8gZXZlbnQucmVzcG9uc2UuZW1haWxTdWJqZWN0ID0gJyc7XG4gICAgLy8gZXZlbnQucmVzcG9uc2UuZW1haWxNZXNzYWdlID0gJyc7XG4gIH0gLy8gLi4uXG5cbiAgcmV0dXJuIGV2ZW50O1xufWAsIHtcbiAgICAgICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VzdG9tTWVzc2FnZUZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdDdXN0b21NZXNzYWdlRnVuY3Rpb24nLCB7XG4gICAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICAgIGxhbWJkYU9wdGlvbnM6IHtcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgbG9hZGVyOiB7XG4gICAgICAgICAgICAgICcuaHRtbCc6ICd0ZXh0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVzZXJwb29sLmFkZFRyaWdnZXIoYXdzX2NvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uQ1VTVE9NX01FU1NBR0UsIHRoaXMuY3VzdG9tTWVzc2FnZUZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LnByZVRva2VuR2VuZXJhdGlvbnYyICYmIHByb3BzLnRyaWdnZXJzPy5wcmVUb2tlbkdlbmVyYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBvbmx5IHVzZSBwcmVUb2tlbkdlbmVyYXRpb24gb3IgcHJlVG9rZW5HZW5lcmF0aW9udjIsIG5vdCBib3RoLicpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50cmlnZ2Vycz8ucHJlVG9rZW5HZW5lcmF0aW9uKSB7XG4gICAgICBjb25zdCBlbnRyeUZpbGUgPSAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXRva2VuLWdlbmVyYXRpb24udHMnO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuUHJlVG9rZW5HZW5lcmF0aW9uVHJpZ2dlckV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuUHJlVG9rZW5HZW5lcmF0aW9uVHJpZ2dlckV2ZW50PiB7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG5cbiAgLy8gbW9kaWZ5IGV2ZW50LnJlc3BvbnNlIGhlcmUgLi4uXG5cbiAgcmV0dXJuIGV2ZW50O1xufWAsIHtcbiAgICAgICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlVG9rZW5HZW5lcmF0aW9uRnVuY3Rpb24gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ1ByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uJywge1xuICAgICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgfSxcbiAgICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VycG9vbC5hZGRUcmlnZ2VyKGF3c19jb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLlBSRV9UT0tFTl9HRU5FUkFUSU9OLCB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LnByZVRva2VuR2VuZXJhdGlvbnYyKSB7XG4gICAgICBjb25zdCBlbnRyeUZpbGUgPSAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXRva2VuLWdlbmVyYXRpb24udHMnO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuUHJlVG9rZW5HZW5lcmF0aW9uVjJUcmlnZ2VyRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5QcmVUb2tlbkdlbmVyYXRpb25WMlRyaWdnZXJFdmVudD4ge1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudCkpO1xuXG4gIC8vIG1vZGlmeSBldmVudC5yZXNwb25zZSBoZXJlIC4uLlxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdQcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbicsIHtcbiAgICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXNlcnBvb2wuYWRkVHJpZ2dlcihcbiAgICAgICAgYXdzX2NvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uUFJFX1RPS0VOX0dFTkVSQVRJT05fQ09ORklHLFxuICAgICAgICB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgICAgICBhd3NfY29nbml0by5MYW1iZGFWZXJzaW9uLlYyXzAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50cmlnZ2Vycz8ucHJlU2lnblVwKSB7XG4gICAgICBjb25zdCBlbnRyeUZpbGUgPSAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXNpZ251cC50cyc7XG5cbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW50cnlGaWxlLCBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5QcmVTaWduVXBUcmlnZ2VyRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5QcmVTaWduVXBUcmlnZ2VyRXZlbnQ+IHtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcblxuICAvLyBDb25maXJtIHRoZSB1c2VyXG4gIC8vIGV2ZW50LnJlc3BvbnNlLmF1dG9Db25maXJtVXNlciA9IHRydWU7XG5cbiAgLy8gU2V0IHRoZSBlbWFpbCBhcyB2ZXJpZmllZCBpZiBpdCBpcyBpbiB0aGUgcmVxdWVzdFxuICAvLyBpZiAoZXZlbnQucmVxdWVzdC51c2VyQXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgnZW1haWwnKSkge1xuICAvLyAgIGV2ZW50LnJlc3BvbnNlLmF1dG9WZXJpZnlFbWFpbCA9IHRydWU7XG4gIC8vIH1cblxuICAvLyBTZXQgdGhlIHBob25lIG51bWJlciBhcyB2ZXJpZmllZCBpZiBpdCBpcyBpbiB0aGUgcmVxdWVzdFxuICAvLyBpZiAoZXZlbnQucmVxdWVzdC51c2VyQXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgncGhvbmVfbnVtYmVyJykpIHtcbiAgLy8gICBldmVudC5yZXNwb25zZS5hdXRvVmVyaWZ5UGhvbmUgPSB0cnVlO1xuICAvLyB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufWAsIHtcbiAgICAgICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJlU2lnblVwRnVuY3Rpb24gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ1ByZVNpZ25VcEZ1bmN0aW9uJywge1xuICAgICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgfSxcbiAgICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VycG9vbC5hZGRUcmlnZ2VyKGF3c19jb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLlBSRV9TSUdOX1VQLCB0aGlzLnByZVNpZ25VcEZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VzRW1haWxTZW5kZXIpIHtcbiAgICAgICh0aGlzLnVzZXJwb29sLm5vZGUuZGVmYXVsdENoaWxkIGFzIGF3c19jb2duaXRvLkNmblVzZXJQb29sKS5lbWFpbENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgIGVtYWlsU2VuZGluZ0FjY291bnQ6ICdERVZFTE9QRVInLFxuICAgICAgICBmcm9tOiBgJHtwcm9wcy5zZXNFbWFpbFNlbmRlci5uYW1lfSA8JHtwcm9wcy5zZXNFbWFpbFNlbmRlci5lbWFpbH0+YCxcbiAgICAgICAgc291cmNlQXJuOiBgYXJuOmF3czpzZXM6JHtwcm9wcy5zZXNFbWFpbFNlbmRlci5yZWdpb24gPz8gU3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OmlkZW50aXR5LyR7cHJvcHMuc2VzRW1haWxTZW5kZXIuZW1haWx9YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBncm91cE5hbWUgaW4gcHJvcHMuZ3JvdXBzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLmdyb3VwcywgZ3JvdXBOYW1lKSkge1xuICAgICAgICBjb25zdCBncm91cERlc2NyaXB0aW9uID0gcHJvcHMuZ3JvdXBzW2dyb3VwTmFtZV07XG4gICAgICAgIG5ldyBhd3NfY29nbml0by5DZm5Vc2VyUG9vbEdyb3VwKHRoaXMsIGBHcm91cCR7Z3JvdXBOYW1lfWAsIHtcbiAgICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJwb29sLnVzZXJQb29sSWQsXG4gICAgICAgICAgZ3JvdXBOYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBncm91cERlc2NyaXB0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xJRCwgeyBrZXk6IENGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xJRCwgdmFsdWU6IHRoaXMudXNlcnBvb2wudXNlclBvb2xJZCB9KTtcblxuICAgIGlmIChwcm9wcy5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRoaXMuaWRlbnRpdHlQb29sID0gbmV3IGF3c19jb2duaXRvX2lkZW50aXR5cG9vbC5JZGVudGl0eVBvb2wodGhpcywgJ0lkZW50aXR5UG9vbCcsIHtcbiAgICAgICAgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzOiB0cnVlLFxuICAgICAgICBpZGVudGl0eVBvb2xOYW1lOiBwcm9wcy51c2VyUG9vbE5hbWUgKyAnLWlkZW50aXR5JyxcbiAgICAgICAgLi4ucHJvcHMuaWRlbnRpdHlQb29sLnBvb2xDb25maWcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiB7XG4gICAgICAgICAgdXNlclBvb2xzOiBbbmV3IGF3c19jb2duaXRvX2lkZW50aXR5cG9vbC5Vc2VyUG9vbEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoeyB1c2VyUG9vbDogdGhpcy51c2VycG9vbCB9KV0sXG4gICAgICAgICAgLi4ucHJvcHMuaWRlbnRpdHlQb29sLnBvb2xDb25maWc/LmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX0lELCB7XG4gICAgICAgIGtleTogQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfSUQsXG4gICAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5UG9vbC5pZGVudGl0eVBvb2xJZCxcbiAgICAgIH0pO1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX0lERU5USVRZUE9PTF9BVVRIX1JPTEVBUk4sIHtcbiAgICAgICAga2V5OiBDRk5fT1VUUFVUX1NVRkZJWF9BVVRIX0lERU5USVRZUE9PTF9BVVRIX1JPTEVBUk4sXG4gICAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5UG9vbC5hdXRoZW50aWNhdGVkUm9sZS5yb2xlQXJuLFxuICAgICAgfSk7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIENGTl9PVVRQVVRfU1VGRklYX0FVVEhfSURFTlRJVFlQT09MX1VOQVVUSF9ST0xFQVJOLCB7XG4gICAgICAgIGtleTogQ0ZOX09VVFBVVF9TVUZGSVhfQVVUSF9JREVOVElUWVBPT0xfVU5BVVRIX1JPTEVBUk4sXG4gICAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5UG9vbC51bmF1dGhlbnRpY2F0ZWRSb2xlLnJvbGVBcm4sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVXNlclBvb2xDbGllbnQoaWQ6IHN0cmluZywgb3B0aW9uczogYXdzX2NvZ25pdG8uVXNlclBvb2xDbGllbnRPcHRpb25zKTogYXdzX2NvZ25pdG8uVXNlclBvb2xDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMudXNlcnBvb2wuYWRkQ2xpZW50KGlkLCBvcHRpb25zKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke0NGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xfQ0xJRU5USUR9JHtpZH1gLCB7XG4gICAgICBrZXk6IGAke0NGTl9PVVRQVVRfU1VGRklYX0FVVEhfVVNFUlBPT0xfQ0xJRU5USUR9JHtpZH1gLFxuICAgICAgdmFsdWU6IGNsaWVudC51c2VyUG9vbENsaWVudElkLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aGlzLmlkZW50aXR5UG9vbC5hZGRVc2VyUG9vbEF1dGhlbnRpY2F0aW9uKFxuICAgICAgICBuZXcgYXdzX2NvZ25pdG9faWRlbnRpdHlwb29sLlVzZXJQb29sQXV0aGVudGljYXRpb25Qcm92aWRlcih7XG4gICAgICAgICAgdXNlclBvb2w6IHRoaXMudXNlcnBvb2wsXG4gICAgICAgICAgdXNlclBvb2xDbGllbnQ6IGNsaWVudCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxufSJdfQ==
|
|
@@ -36,8 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.GraphQlApi = void 0;
|
|
37
37
|
/* eslint-disable max-len */
|
|
38
38
|
const child_process_1 = require("child_process");
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const os = __importStar(require("os"));
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
40
|
+
const os = __importStar(require("node:os"));
|
|
41
41
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
42
42
|
const base_api_1 = require("./base-api");
|
|
43
43
|
const func_1 = require("./func");
|
|
@@ -489,4 +489,4 @@ function exec(cmd, args, options) {
|
|
|
489
489
|
}
|
|
490
490
|
return proc;
|
|
491
491
|
}
|
|
492
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDZDQUE2TDtBQUc3TCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQStEekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQTRCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBbUIsS0FBc0I7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEaUMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUF2QmpGOztXQUVHO1FBQ0ssZUFBVSxHQUE4QyxFQUFFLENBQUM7UUFFbkU7OztXQUdHO1FBQ2MsaUJBQVksR0FBd0MsRUFBRSxDQUFDO1FBaUJ0RSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUF1QyxDQUFDO1FBRWpFLElBQUksZ0JBQXVELENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtvQkFDNUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFXO29CQUM1QixNQUFNLEVBQUUsV0FBVztvQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUN4QixVQUFVLEVBQUUsb0NBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxV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QyxHQUFHLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6SSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU3Bhd25TeW5jT3B0aW9ucywgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBCdW5kbGluZ09wdGlvbnMsIEJ1bmRsaW5nT3V0cHV0LCBDZm5PdXRwdXQsIERvY2tlckltYWdlLCBOZXN0ZWRTdGFjaywgVGFncywgYXdzX2FwcHN5bmMsIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsIGF3c19pYW0sIGF3c19sb2dzLCBhd3Nfcm91dGU1MyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29nbml0b0F1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX0dSQVBIUUxfRE9NQUlOTkFNRSB9IGZyb20gJy4uL3NoYXJlZC9vdXRwdXRzJztcblxuZXhwb3J0IGludGVyZmFjZSBHcmFwaFFsQXBpUHJvcHMgZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuICBkZWZpbml0aW9uRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgcmVzb2x2ZXJzIGFuZCBMYW1iZGEgZnVuY3Rpb25zIHdpbGwgYmUgY3JlYXRlZCBpbiBuZXN0ZWQgc3RhY2tzXG4gICAqIGdyb3VwZWQgYnkgdHlwZSAoUXVlcnksIE11dGF0aW9uLCBTdWJzY3JpcHRpb24sIEZpZWxkKS5cbiAgICpcbiAgICogV0FSTklORzogT25seSBlbmFibGUgdGhpcyBpZiB5b3UgYXJlIGFwcHJvYWNoaW5nIG9yIGhpdHRpbmcgQ2xvdWRGb3JtYXRpb24nc1xuICAgKiA1MDAgcmVzb3VyY2UgbGltaXQuIE5lc3RlZCBzdGFja3MgaGF2ZSBzaWduaWZpY2FudCBkb3duc2lkZXM6XG4gICAqIC0gU2xvd2VyIGRlcGxveW1lbnRzIGR1ZSB0byBhZGRpdGlvbmFsIHN0YWNrIG9wZXJhdGlvbnNcbiAgICogLSBNb3JlIGNvbXBsZXggZGVidWdnaW5nIGFuZCBlcnJvciB0cmFjaW5nXG4gICAqIC0gSGFyZGVyIHRvIG5hdmlnYXRlIGluIHRoZSBDbG91ZEZvcm1hdGlvbiBjb25zb2xlXG4gICAqIC0gQ3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBhZGQgY29tcGxleGl0eVxuICAgKlxuICAgKiBXQVJOSU5HOiBDaGFuZ2luZyB0aGlzIHNldHRpbmcgb24gYW4gZXhpc3Rpbmcgc3RhY2sgcmVxdWlyZXMgbWFudWFsIGludGVydmVudGlvbi5cbiAgICogQ2xvdWRGb3JtYXRpb24gY2Fubm90IGF1dG9tYXRpY2FsbHkgbW92ZSByZXNvdXJjZXMgYmV0d2VlbiBzdGFja3MuIFlvdSBtYXkgbmVlZFxuICAgKiB0byBkZWxldGUgYW5kIHJlY3JlYXRlIHJlc29sdmVycywgb3IgcGVyZm9ybSBhIHR3by1zdGVwIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VOZXN0ZWRTdGFja3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZ0bFJlc29sdmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGF0YXNvdXJjZSB0aGUgVlRMIHJlc29sdmVyIHRhcmdldHNcbiAgICovXG4gIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlO1xuXG4gIC8qKlxuICAgKiBzdHJpbmcgcmVwbGFjZW1lbnRzIHRvIHByb2Nlc3Mgb24gdGhlIFZUTFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyB2YXJpYWJsZSBleHBhbnNpb25zXG4gICAqL1xuICB2YXJpYWJsZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc1Jlc29sdmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZXMgdGhhdCB3aWxsIGJlIHB1dCBpbnRvIHRoZSBcInN0YXNoXCIgb2YgdGhlIHJlc29sdmVyIHBpcGVsaW5lXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXNoVmFsdWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogbmFtZSBvZiB0aGUgcGlwZWxpbmUgc3RlcHMgdG8gY3JlYXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb25seSBhIGRlZmF1bHQgc3RlcCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU3RlcE5hbWVzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBKc1Jlc29sdmVyQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBzdGVwQ291bnQ6IG51bWJlcjtcbiAgZW50cnlGaWxlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgR3JhcGhRbEFwaSBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgQXBwU3luYyBHcmFwaFFMIEFQSSBpbnRlZ3JhdGVkIHdpdGggQ29nbml0byBmb3IgYXV0aGVudGljYXRpb24gYW5kIER5bmFtb0RCIGZvciBkYXRhIHN0b3JhZ2UuXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBHcmFwaFFMIEFQSSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBjdXN0b20gZG9tYWluLCBsb2dnaW5nLCBzY2hlbWEgZGVmaW5pdGlvbixcbiAqIGFuZCBhdXRob3JpemF0aW9uIHVzaW5nIENvZ25pdG8gVXNlciBQb29sIGFuZCBJZGVudGl0eSBQb29sLiBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgdG8gZHluYW1pY2FsbHkgYWRkIHJlc29sdmVycyBhbmQgZ3JhbnQgYWNjZXNzIHRvIHNwZWNpZmljIGZpZWxkcy5cbiAqXG4gKiBAdGVtcGxhdGUgUkVTT0xWRVJTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEdyYXBoUUwgcmVzb2x2ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcGkgPSBuZXcgR3JhcGhRbEFwaSh0aGlzLCAnTXlHcmFwaFFsQXBpJywge1xuICogICBhcGlOYW1lOiAnTXlBUEknLFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogICBkZWZpbml0aW9uRmlsZU5hbWU6ICdzY2hlbWEuZ3JhcGhxbCcsXG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBteUNvZ25pdG9BdXRoLFxuICogICBzaW5nbGVUYWJsZURhdGFzdG9yZTogbXlEeW5hbW9EQlRhYmxlLFxuICogfSk7XG4gKlxuICogLy8gQWRkIGEgTGFtYmRhIHJlc29sdmVyXG4gKiBhcGkuYWRkTGFtYmRhUmVzb2x2ZXIoJ1F1ZXJ5JywgJ2dldEl0ZW0nKTtcbiAqXG4gKiAvLyBHcmFudCBhY2Nlc3MgdG8gdW5hdXRoZW50aWNhdGVkIHVzZXJzIGZvciBhIHNwZWNpZmljIHF1ZXJ5XG4gKiBhcGkuZ3JhbnRBY2Nlc3NVbkF1dGgoJ1F1ZXJ5JywgJ2dldEl0ZW0nKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoUWxBcGk8UkVTT0xWRVJTPiBleHRlbmRzIEJhc2VBcGkge1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEFwcFN5bmMgR3JhcGhRTCBBUEkgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhd3NfYXBwc3luYy5HcmFwaHFsQXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgRHluYW1vREIgZGF0YSBzb3VyY2UgZm9yIHRoZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZURhdGFTb3VyY2U/OiBhd3NfYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEEgY29sbGVjdGlvbiBvZiBMYW1iZGEgZnVuY3Rpb25zIHVzZWQgYXMgcmVzb2x2ZXJzIGZvciB0aGUgR3JhcGhRTCBBUEkuXG4gICAqL1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHsgW29wZXJhdGlvbklkOiBzdHJpbmddOiBMYW1iZGFGdW5jdGlvbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIE5lc3RlZCBzdGFja3MgZm9yIHJlc29sdmVycywgZ3JvdXBlZCBieSB0eXBlIG5hbWUuXG4gICAqIE9ubHkgdXNlZCB3aGVuIHVzZU5lc3RlZFN0YWNrcyBpcyB0cnVlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuZXN0ZWRTdGFja3M6IHsgW3R5cGVOYW1lOiBzdHJpbmddOiBOZXN0ZWRTdGFjayB9ID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZ25pdG9BdXRoOiBDb2duaXRvQXV0aGVudGljYXRpb247XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgR3JhcGhRbEFwaS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgR3JhcGhRbEFwaSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBHcmFwaFFsQXBpUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuY29nbml0b0F1dGggPSBwcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBDb2duaXRvQXV0aGVudGljYXRpb247XG5cbiAgICBsZXQgY3VzdG9tRG9tYWluTmFtZTogYXdzX2FwcHN5bmMuRG9tYWluT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hcGlGUUROKSB7XG4gICAgICBjdXN0b21Eb21haW5OYW1lID0ge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBuZXcgYXdzX2NlcnRpZmljYXRlbWFuYWdlci5EbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBob3N0ZWRab25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICAgIHZhbGlkYXRpb246IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnR3JhcGhRbEFwaURvbWFpbk5hbWUnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfR1JBUEhRTF9ET01BSU5OQU1FfWAsXG4gICAgICAgIHZhbHVlOiB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaSA9IG5ldyBhd3NfYXBwc3luYy5HcmFwaHFsQXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIGxvZ0NvbmZpZzoge1xuICAgICAgICBmaWVsZExvZ0xldmVsOiBhd3NfYXBwc3luYy5GaWVsZExvZ0xldmVsLkFMTCxcbiAgICAgICAgcmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLlRXT19NT05USFMsXG4gICAgICB9LFxuICAgICAgc2NoZW1hOiBhd3NfYXBwc3luYy5TY2hlbWFGaWxlLmZyb21Bc3NldChwcm9wcy5kZWZpbml0aW9uRmlsZU5hbWUpLFxuICAgICAgZG9tYWluTmFtZTogY3VzdG9tRG9tYWluTmFtZSxcbiAgICAgIC4uLnRoaXMuY29nbml0b0F1dGggJiYge1xuICAgICAgICBhdXRob3JpemF0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgYWRkaXRpb25hbEF1dGhvcml6YXRpb25Nb2RlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuVVNFUl9QT09MLFxuICAgICAgICAgICAgICB1c2VyUG9vbENvbmZpZzoge1xuICAgICAgICAgICAgICAgIHVzZXJQb29sOiB0aGlzLmNvZ25pdG9BdXRoLnVzZXJwb29sLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb246IGF3c19hcHBzeW5jLlVzZXJQb29sRGVmYXVsdEFjdGlvbi5ERU5ZLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sID8gW3sgYXV0aG9yaXphdGlvblR5cGU6IGF3c19hcHBzeW5jLkF1dGhvcml6YXRpb25UeXBlLklBTSB9XSA6IFtdLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChjdXN0b21Eb21haW5OYW1lICYmIHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lKSB7XG4gICAgICBuZXcgYXdzX3JvdXRlNTMuQ25hbWVSZWNvcmQodGhpcywgJ0Ruc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lISxcbiAgICAgICAgcmVjb3JkTmFtZTogY3VzdG9tRG9tYWluTmFtZS5kb21haW5OYW1lLFxuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaS5hcHBTeW5jRG9tYWluTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmICgocHJvcHMubW9uaXRvcmluZyA/PyB0cnVlKSAmJiB0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICc1WFhFcnJvcicsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzRYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk1JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk5JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyB9XG5cbiAgICBpZiAocHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUpIHtcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZSh0aGlzLCAnU2luZ2xlVGFibGVTb3VyY2UnLCB7XG4gICAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICAgIHRhYmxlOiBwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZT8udGFibGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2VzczxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICBncmFudGVlOiBhd3NfaWFtLklHcmFudGFibGUsXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIHRoaXMuYXBpLmdyYW50KGdyYW50ZWUsIGF3c19hcHBzeW5jLklhbVJlc291cmNlLm9mVHlwZSh0eXBlTmFtZSBhcyBzdHJpbmcsIC4uLmZpZWxkTmFtZXMgYXMgc3RyaW5nW10pLCAnYXBwc3luYzpHcmFwaFFMJyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2Vzc1VuQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wudW5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NBdXRoPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ3JhbnQgdG8gQ29nbml0byBpZGVudGl0eSBwb29sIGFzIG5vbmUgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgdGhpcy5ncmFudEFjY2Vzcyh0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbC5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cblxuICAvKipcbiAgICogZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YF07XG4gIH1cblxuICBwdWJsaWMgYWRkTGFtYmRhUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgVHlwZSAke3R5cGVOYW1lIGFzIHN0cmluZ30gRmllbGQgJHtmaWVsZE5hbWUgYXMgU3RyaW5nfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhLyR7b3BlcmF0aW9uSWR9LnRzYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy9sYW1iZGEvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGUsIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlRm9yVHlwZU5hbWUodHlwZU5hbWUgYXMgc3RyaW5nKTtcblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHNjb3BlLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHNjb3BlLCBgTGFtYmRhRFMke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICBuYW1lOiBgTGFtYmRhXyR7dHlwZU5hbWUgYXMgc3RyaW5nfV8ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YCxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiBmbixcbiAgICB9KTtcblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcihzY29wZSwgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICAgb3B0aW9ucz86IE9taXQ8VnRsUmVzb2x2ZXJPcHRpb25zLCAnZGF0YVNvdXJjZSc+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbW9EQiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRWdGxSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB7XG4gICAgICBkYXRhU291cmNlOiB0aGlzLnRhYmxlRGF0YVNvdXJjZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRHluYW1vRGJKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM/OiBKc1Jlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkSlNSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHN0YXNoVmFsdWVzOiB7XG4gICAgICAgIC4uLm9wdGlvbnM/LnN0YXNoVmFsdWVzID8/IHt9LFxuICAgICAgICB0YWJsZTogdGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSEudGFibGUudGFibGVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlLCBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgVHlwZSAke3R5cGVOYW1lIGFzIHN0cmluZ30gRmllbGQgJHtmaWVsZE5hbWUgYXMgU3RyaW5nfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZSBhcyBzdHJpbmcpO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBmdW5jdGlvbnM6IEpzUmVzb2x2ZXJDb25maWdbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIHx8IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc3RlcENvdW50OiAxLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH1gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLm9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHN0ZXBDb3VudDogb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyEubGVuZ3RoLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS4ke25hbWV9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfSR7bmFtZX1gLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlbGluZUNvbmZpZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmbi5lbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhyZXNvbHZlckRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSlNSZXNvbHZlckZpbGUoZm4sIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzRnVuY3Rpb24gPSBuZXcgYXdzX2FwcHN5bmMuQXBwc3luY0Z1bmN0aW9uKHNjb3BlLCBmbi5mdW5jdGlvbklkLCB7XG4gICAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICAgIG5hbWU6IG9wZXJhdGlvbklkLnJlcGxhY2UoL1xcLi9nLCAnJyksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICBjb2RlOiBhd3NfYXBwc3luYy5Db2RlLmZyb21Bc3NldCgnLicsIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBkZXBsb3lUaW1lOiB0cnVlLFxuICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdkdW1teScpLCAvLyBXaWxsIG5ldmVyIGJlIHVzZWQgZHVlIHRvIGxvY2FsIGJ1bmRsaW5nXG4gICAgICAgICAgICBvdXRwdXRUeXBlOiBCdW5kbGluZ091dHB1dC5TSU5HTEVfRklMRSxcbiAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGZuLmZ1bmN0aW9uSWQsXG4gICAgICAgICAgICBsb2NhbDoge1xuICAgICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3NQbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7XG4gICAgICAgICAgICAgICAgZXhlYyhcbiAgICAgICAgICAgICAgICAgIG9zUGxhdGZvcm0gPT09ICd3aW4zMicgPyAnY21kJyA6ICdiYXNoJyxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICcvYycgOiAnLWMnLFxuICAgICAgICAgICAgICAgICAgICBgZXNidWlsZCAtLWJ1bmRsZSAtLXNvdXJjZW1hcD1pbmxpbmUgLS1zb3VyY2VzLWNvbnRlbnQ9ZmFsc2UgLS10YXJnZXQ9ZXNuZXh0IC0tcGxhdGZvcm09bm9kZSAtLWZvcm1hdD1lc20gLS1leHRlcm5hbDpAYXdzLWFwcHN5bmMvdXRpbHMgLS1vdXRkaXI9JHtvdXRwdXREaXJ9ICR7Zm4uZW50cnlGaWxlfWAsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RkaW86IFsgLy8gc2hvdyBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlJywgLy8gaWdub3JlIHN0ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIsIC8vIHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgICAnaW5oZXJpdCcsIC8vIGluaGVyaXQgc3RkZXJyXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyxcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQnVuZGxpbmdPcHRpb25zLFxuICAgICAgICB9KSxcbiAgICAgICAgcnVudGltZTogYXdzX2FwcHN5bmMuRnVuY3Rpb25SdW50aW1lLkpTXzFfMF8wLFxuICAgICAgfSk7XG4gICAgICBwaXBlbGluZUNvbmZpZy5wdXNoKGpzRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcihzY29wZSwgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIHJ1bnRpbWU6IGF3c19hcHBzeW5jLkZ1bmN0aW9uUnVudGltZS5KU18xXzBfMCxcbiAgICAgIHBpcGVsaW5lQ29uZmlnLFxuICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tSW5saW5lKGBcbiAgICAvLyBUaGUgYmVmb3JlIHN0ZXBcbiAgICBleHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGN0eCk7XG4ke09iamVjdC5lbnRyaWVzKG9wdGlvbnM/LnN0YXNoVmFsdWVzID8/IFtdKS5tYXAodmFsID0+IGAgICAgICBjdHguc3Rhc2guJHt2YWxbMF19ID0gJyR7dmFsWzFdfSdgKS5qb2luKCdcXG4nKX1cbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIC8vIFRoZSBhZnRlciBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wcmV2LnJlc3VsdFxuICAgIH1cbiAgYCksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICAgb3B0aW9uczogVnRsUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuXG4gICAgY29uc3QgbWFwcGluZ1JlcUZpbGUgPSBgLi9zcmMvdnRsLyR7b3BlcmF0aW9uSWR9LnJlcS52dGxgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhtYXBwaW5nUmVxRmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvdnRsLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSwgJyMjIFJlcXVlc3QgbWFwcGluZycsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmdSZXNGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXMudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1Jlc0ZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1Jlc0ZpbGUsICckdXRpbC50b0pzb24oJGN0eC5yZXN1bHQpJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZSBhcyBzdHJpbmcpO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHNjb3BlLCBgUmVzb2x2ZXIke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUgYXMgc3RyaW5nLFxuICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgZGF0YVNvdXJjZTogb3B0aW9ucy5kYXRhU291cmNlLFxuICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBzY29wZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzIGZvciB0aGUgZ2l2ZW4gdHlwZSBuYW1lLlxuICAgKiBJZiB1c2VOZXN0ZWRTdGFja3MgaXMgZW5hYmxlZCwgcmV0dXJucyBhIG5lc3RlZCBzdGFjayBmb3IgdGhlIHR5cGUgbmFtZSxcbiAgICogY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBleGlzdC4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoaXMgY29uc3RydWN0LlxuICAgKlxuICAgKiBRdWVyeSwgTXV0YXRpb24sIGFuZCBTdWJzY3JpcHRpb24gZWFjaCBnZXQgdGhlaXIgb3duIG5lc3RlZCBzdGFjay5cbiAgICogQWxsIG90aGVyIHR5cGVzIChmaWVsZCByZXNvbHZlcnMpIHNoYXJlIGEgc2luZ2xlIFwiRmllbGRcIiBuZXN0ZWQgc3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlTmFtZSAtIFRoZSBHcmFwaFFMIHR5cGUgbmFtZSAoZS5nLiwgJ1F1ZXJ5JywgJ011dGF0aW9uJywgJ1N1YnNjcmlwdGlvbicsIG9yIGEgY3VzdG9tIHR5cGUpXG4gICAqIEByZXR1cm5zIFRoZSBjb25zdHJ1Y3QgdG8gdXNlIGFzIHNjb3BlIGZvciBjcmVhdGluZyByZXNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICBpZiAoIXRoaXMucHJvcHMudXNlTmVzdGVkU3RhY2tzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCByb290VHlwZXMgPSBbJ1F1ZXJ5JywgJ011dGF0aW9uJywgJ1N1YnNjcmlwdGlvbiddO1xuICAgIGNvbnN0IHN0YWNrS2V5ID0gcm9vdFR5cGVzLmluY2x1ZGVzKHR5cGVOYW1lKSA/IHR5cGVOYW1lIDogJ0ZpZWxkJztcblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGFja3Nbc3RhY2tLZXldKSB7XG4gICAgICB0aGlzLm5lc3RlZFN0YWNrc1tzdGFja0tleV0gPSBuZXcgTmVzdGVkU3RhY2sodGhpcywgYCR7c3RhY2tLZXl9UmVzb2x2ZXJzYCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5lc3RlZCBzdGFjayBmb3IgJHtzdGFja0tleX0gcmVzb2x2ZXJzYCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5lc3RlZFN0YWNrc1tzdGFja0tleV07XG4gIH1cblxuICBwcml2YXRlIHN1YnN0VmFyaWFibGVzKGRhdGE6IHN0cmluZywgdmFyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcyA9IGRhdGE7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHZhcnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFycywgbmFtZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJzW25hbWVdO1xuICAgICAgICByZXMgPSByZXMucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJFxceyR7bmFtZX1cXH1gLCAnZycpLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGU6IHN0cmluZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZW50cnlGaWxlLCBgaW1wb3J0IHsgYXBpIH0gZnJvbSAnY2RrLXNlcnZlcmxlc3MvbGliL2xhbWJkYSc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXBpLmNyZWF0ZUFwcFN5bmNIYW5kbGVyPCR7YXJnVHlwZX0sICR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXT4oYXN5bmMgKGN0eCkgPT4ge1xuICBjdHgubG9nZ2VyLmluZm8oSlNPTi5zdHJpbmdpZnkoY3R4LmV2ZW50KSk7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHlldCBpbXBsZW1lbnRlZCcpO1xufSk7YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpTUmVzb2x2ZXJGaWxlKGZuOiBKc1Jlc29sdmVyQ29uZmlnLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBgJHt0eXBlTmFtZX0ke3VwcGVyY2FzZUZpcnN0KGZpZWxkTmFtZSl9QXJnc2A7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IChmbi5pbmRleCA9PSAoZm4uc3RlcENvdW50IC0gMSkpID8gYCR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXWAgOiAnYW55JztcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZm4uZW50cnlGaWxlLCBgaW1wb3J0IHsgQ29udGV4dCwgdXRpbCB9IGZyb20gJ0Bhd3MtYXBwc3luYy91dGlscyc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGN0eDogQ29udGV4dDwke2FyZ1R5cGV9Pik6IGFueSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiAke3JldHVyblR5cGV9IHtcbiAgY29uc29sZS5sb2coY3R4KTtcbiAgcmV0dXJuIGN0eC5yZXN1bHQuaXRlbXM7XG59YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB1cHBlcmNhc2VGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMvbGliL3V0aWwudHNcbiAqIGFzIGl0IGlzIG5vdCBleHBvcnRlZCBieSBhd3MtY2RrLWxpYlxuICovXG5mdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFNwYXduU3luY09wdGlvbnMpIHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjbWQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7XG4gICAgdGhyb3cgcHJvYy5lcnJvcjtcbiAgfVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIGlmIChwcm9jLnN0ZG91dCB8fCBwcm9jLnN0ZGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbU3RhdHVzICR7cHJvYy5zdGF0dXN9XSBzdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9ICR7b3B0aW9ucz8uY3dkID8gYHJ1biBpbiBkaXJlY3RvcnkgJHtvcHRpb25zLmN3ZH1gIDogJyd9IGV4aXRlZCB3aXRoIHN0YXR1cyAke3Byb2Muc3RhdHVzfWApO1xuICB9XG5cbiAgcmV0dXJuIHByb2M7XG59XG5cbiJdfQ==
|
|
492
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCw0Q0FBOEI7QUFDOUIsNENBQThCO0FBQzlCLDZDQUE2TDtBQUc3TCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQStEekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQTRCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBbUIsS0FBc0I7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEaUMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUF2QmpGOztXQUVHO1FBQ0ssZUFBVSxHQUE4QyxFQUFFLENBQUM7UUFFbkU7OztXQUdHO1FBQ2MsaUJBQVksR0FBd0MsRUFBRSxDQUFDO1FBaUJ0RSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUF1QyxDQUFDO1FBRWpFLElBQUksZ0JBQXVELENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtvQkFDNUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFXO29CQUM1QixNQUFNLEVBQUUsV0FBVztvQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUN4QixVQUFVLEVBQUUsb0NBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxV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QyxHQUFHLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6SSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU3Bhd25TeW5jT3B0aW9ucywgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgQXNzZXRIYXNoVHlwZSwgQnVuZGxpbmdPcHRpb25zLCBCdW5kbGluZ091dHB1dCwgQ2ZuT3V0cHV0LCBEb2NrZXJJbWFnZSwgTmVzdGVkU3RhY2ssIFRhZ3MsIGF3c19hcHBzeW5jLCBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLCBhd3NfaWFtLCBhd3NfbG9ncywgYXdzX3JvdXRlNTMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJy4vZnVuYyc7XG5pbXBvcnQgeyBDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUUgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRbEFwaVByb3BzIGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHJlc29sdmVycyBhbmQgTGFtYmRhIGZ1bmN0aW9ucyB3aWxsIGJlIGNyZWF0ZWQgaW4gbmVzdGVkIHN0YWNrc1xuICAgKiBncm91cGVkIGJ5IHR5cGUgKFF1ZXJ5LCBNdXRhdGlvbiwgU3Vic2NyaXB0aW9uLCBGaWVsZCkuXG4gICAqXG4gICAqIFdBUk5JTkc6IE9ubHkgZW5hYmxlIHRoaXMgaWYgeW91IGFyZSBhcHByb2FjaGluZyBvciBoaXR0aW5nIENsb3VkRm9ybWF0aW9uJ3NcbiAgICogNTAwIHJlc291cmNlIGxpbWl0LiBOZXN0ZWQgc3RhY2tzIGhhdmUgc2lnbmlmaWNhbnQgZG93bnNpZGVzOlxuICAgKiAtIFNsb3dlciBkZXBsb3ltZW50cyBkdWUgdG8gYWRkaXRpb25hbCBzdGFjayBvcGVyYXRpb25zXG4gICAqIC0gTW9yZSBjb21wbGV4IGRlYnVnZ2luZyBhbmQgZXJyb3IgdHJhY2luZ1xuICAgKiAtIEhhcmRlciB0byBuYXZpZ2F0ZSBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gY29uc29sZVxuICAgKiAtIENyb3NzLXN0YWNrIHJlZmVyZW5jZXMgYWRkIGNvbXBsZXhpdHlcbiAgICpcbiAgICogV0FSTklORzogQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIG9uIGFuIGV4aXN0aW5nIHN0YWNrIHJlcXVpcmVzIG1hbnVhbCBpbnRlcnZlbnRpb24uXG4gICAqIENsb3VkRm9ybWF0aW9uIGNhbm5vdCBhdXRvbWF0aWNhbGx5IG1vdmUgcmVzb3VyY2VzIGJldHdlZW4gc3RhY2tzLiBZb3UgbWF5IG5lZWRcbiAgICogdG8gZGVsZXRlIGFuZCByZWNyZWF0ZSByZXNvbHZlcnMsIG9yIHBlcmZvcm0gYSB0d28tc3RlcCBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlTmVzdGVkU3RhY2tzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWdGxSZXNvbHZlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRhdGFzb3VyY2UgdGhlIFZUTCByZXNvbHZlciB0YXJnZXRzXG4gICAqL1xuICBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogc3RyaW5nIHJlcGxhY2VtZW50cyB0byBwcm9jZXNzIG9uIHRoZSBWVExcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdmFyaWFibGUgZXhwYW5zaW9uc1xuICAgKi9cbiAgdmFyaWFibGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNSZXNvbHZlck9wdGlvbnMge1xuICAvKipcbiAgICogVmFyaWFibGVzIHRoYXQgd2lsbCBiZSBwdXQgaW50byB0aGUgXCJzdGFzaFwiIG9mIHRoZSByZXNvbHZlciBwaXBlbGluZVxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBzdGFzaFZhbHVlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIG5hbWUgb2YgdGhlIHBpcGVsaW5lIHN0ZXBzIHRvIGNyZWF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9ubHkgYSBkZWZhdWx0IHN0ZXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVN0ZXBOYW1lcz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSnNSZXNvbHZlckNvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgc3RlcENvdW50OiBudW1iZXI7XG4gIGVudHJ5RmlsZTogc3RyaW5nO1xuICBmdW5jdGlvbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEdyYXBoUWxBcGkgY29uc3RydWN0IHNldHMgdXAgYW4gQVdTIEFwcFN5bmMgR3JhcGhRTCBBUEkgaW50ZWdyYXRlZCB3aXRoIENvZ25pdG8gZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCBEeW5hbW9EQiBmb3IgZGF0YSBzdG9yYWdlLlxuICogVGhpcyBjb25zdHJ1Y3QgZmFjaWxpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgR3JhcGhRTCBBUEkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgY3VzdG9tIGRvbWFpbiwgbG9nZ2luZywgc2NoZW1hIGRlZmluaXRpb24sXG4gKiBhbmQgYXV0aG9yaXphdGlvbiB1c2luZyBDb2duaXRvIFVzZXIgUG9vbCBhbmQgSWRlbnRpdHkgUG9vbC4gSXQgYWxzbyBwcm92aWRlcyBtZXRob2RzIHRvIGR5bmFtaWNhbGx5IGFkZCByZXNvbHZlcnMgYW5kIGdyYW50IGFjY2VzcyB0byBzcGVjaWZpYyBmaWVsZHMuXG4gKlxuICogQHRlbXBsYXRlIFJFU09MVkVSUyAtIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBHcmFwaFFMIHJlc29sdmVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXBpID0gbmV3IEdyYXBoUWxBcGkodGhpcywgJ015R3JhcGhRbEFwaScsIHtcbiAqICAgYXBpTmFtZTogJ015QVBJJyxcbiAqICAgc3RhZ2VOYW1lOiAnZGV2JyxcbiAqICAgZGVmaW5pdGlvbkZpbGVOYW1lOiAnc2NoZW1hLmdyYXBocWwnLFxuICogICBhdXRoZW50aWNhdGlvbjogbXlDb2duaXRvQXV0aCxcbiAqICAgc2luZ2xlVGFibGVEYXRhc3RvcmU6IG15RHluYW1vREJUYWJsZSxcbiAqIH0pO1xuICpcbiAqIC8vIEFkZCBhIExhbWJkYSByZXNvbHZlclxuICogYXBpLmFkZExhbWJkYVJlc29sdmVyKCdRdWVyeScsICdnZXRJdGVtJyk7XG4gKlxuICogLy8gR3JhbnQgYWNjZXNzIHRvIHVuYXV0aGVudGljYXRlZCB1c2VycyBmb3IgYSBzcGVjaWZpYyBxdWVyeVxuICogYXBpLmdyYW50QWNjZXNzVW5BdXRoKCdRdWVyeScsICdnZXRJdGVtJyk7XG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFFsQXBpPFJFU09MVkVSUz4gZXh0ZW5kcyBCYXNlQXBpIHtcblxuICAvKipcbiAgICogVGhlIEFXUyBBcHBTeW5jIEdyYXBoUUwgQVBJIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogYXdzX2FwcHN5bmMuR3JhcGhxbEFwaTtcblxuICAvKipcbiAgICogVGhlIG9wdGlvbmFsIER5bmFtb0RCIGRhdGEgc291cmNlIGZvciB0aGUgR3JhcGhRTCBBUEkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVEYXRhU291cmNlPzogYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlO1xuXG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgTGFtYmRhIGZ1bmN0aW9ucyB1c2VkIGFzIHJlc29sdmVycyBmb3IgdGhlIEdyYXBoUUwgQVBJLlxuICAgKi9cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zOiB7IFtvcGVyYXRpb25JZDogc3RyaW5nXTogTGFtYmRhRnVuY3Rpb24gfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBOZXN0ZWQgc3RhY2tzIGZvciByZXNvbHZlcnMsIGdyb3VwZWQgYnkgdHlwZSBuYW1lLlxuICAgKiBPbmx5IHVzZWQgd2hlbiB1c2VOZXN0ZWRTdGFja3MgaXMgdHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmVzdGVkU3RhY2tzOiB7IFt0eXBlTmFtZTogc3RyaW5nXTogTmVzdGVkU3RhY2sgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb2duaXRvQXV0aDogQ29nbml0b0F1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEdyYXBoUWxBcGkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0aGlzIGNvbnN0cnVjdCBpcyBkZWZpbmVkLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIEdyYXBoUWxBcGkgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBwcm9wczogR3JhcGhRbEFwaVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmNvZ25pdG9BdXRoID0gcHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uO1xuXG4gICAgbGV0IGN1c3RvbURvbWFpbk5hbWU6IGF3c19hcHBzeW5jLkRvbWFpbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuYXBpRlFETikge1xuICAgICAgY3VzdG9tRG9tYWluTmFtZSA9IHtcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogbmV3IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0NlcnQnLCB7XG4gICAgICAgICAgaG9zdGVkWm9uZTogdGhpcy5ob3N0ZWRab25lISxcbiAgICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgICB2YWxpZGF0aW9uOiBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHRoaXMuaG9zdGVkWm9uZSksXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ0dyYXBoUWxBcGlEb21haW5OYW1lJywge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuYXBpTmFtZX0ke0NGTl9PVVRQVVRfU1VGRklYX0dSQVBIUUxfRE9NQUlOTkFNRX1gLFxuICAgICAgICB2YWx1ZTogdGhpcy5hcGlGUUROLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGkgPSBuZXcgYXdzX2FwcHN5bmMuR3JhcGhxbEFwaSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiBgJHtwcm9wcy5hcGlOYW1lfSBbJHtwcm9wcy5zdGFnZU5hbWV9XWAsXG4gICAgICBsb2dDb25maWc6IHtcbiAgICAgICAgZmllbGRMb2dMZXZlbDogYXdzX2FwcHN5bmMuRmllbGRMb2dMZXZlbC5BTEwsXG4gICAgICAgIHJldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5UV09fTU9OVEhTLFxuICAgICAgfSxcbiAgICAgIHNjaGVtYTogYXdzX2FwcHN5bmMuU2NoZW1hRmlsZS5mcm9tQXNzZXQocHJvcHMuZGVmaW5pdGlvbkZpbGVOYW1lKSxcbiAgICAgIGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbk5hbWUsXG4gICAgICAuLi50aGlzLmNvZ25pdG9BdXRoICYmIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbkNvbmZpZzoge1xuICAgICAgICAgIGFkZGl0aW9uYWxBdXRob3JpemF0aW9uTW9kZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGF3c19hcHBzeW5jLkF1dGhvcml6YXRpb25UeXBlLlVTRVJfUE9PTCxcbiAgICAgICAgICAgICAgdXNlclBvb2xDb25maWc6IHtcbiAgICAgICAgICAgICAgICB1c2VyUG9vbDogdGhpcy5jb2duaXRvQXV0aC51c2VycG9vbCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0QWN0aW9uOiBhd3NfYXBwc3luYy5Vc2VyUG9vbERlZmF1bHRBY3Rpb24uREVOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCA/IFt7IGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5JQU0gfV0gOiBbXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAoY3VzdG9tRG9tYWluTmFtZSAmJiB0aGlzLmFwaS5hcHBTeW5jRG9tYWluTmFtZSkge1xuICAgICAgbmV3IGF3c19yb3V0ZTUzLkNuYW1lUmVjb3JkKHRoaXMsICdEbnNSZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbk5hbWUuZG9tYWluTmFtZSxcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiAoKHByb3BzLm1vbml0b3JpbmcgPz8gdHJ1ZSkgJiYgdGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNVhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICc0WFhFcnJvcicsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5MCcsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5NScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5OScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlKSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2UodGhpcywgJ1NpbmdsZVRhYmxlU291cmNlJywge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICB0YWJsZTogcHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmU/LnRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3M8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgZ3JhbnRlZTogYXdzX2lhbS5JR3JhbnRhYmxlLFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW10pOiB2b2lkIHtcbiAgICB0aGlzLmFwaS5ncmFudChncmFudGVlLCBhd3NfYXBwc3luYy5JYW1SZXNvdXJjZS5vZlR5cGUodHlwZU5hbWUgYXMgc3RyaW5nLCAuLi5maWVsZE5hbWVzIGFzIHN0cmluZ1tdKSwgJ2FwcHN5bmM6R3JhcGhRTCcpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NVbkF1dGg8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBncmFudCB0byBDb2duaXRvIGlkZW50aXR5IHBvb2wgYXMgbm9uZSBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLmdyYW50QWNjZXNzKHRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sLnVuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb248VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25zW2Ake3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWBdO1xuICB9XG5cbiAgcHVibGljIGFkZExhbWJkYVJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICApOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS8ke29wZXJhdGlvbklkfS50c2A7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvbGFtYmRhLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5jcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlLCB0eXBlTmFtZSBhcyBzdHJpbmcsIGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZUZvclR5cGVOYW1lKHR5cGVOYW1lIGFzIHN0cmluZyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbihzY29wZSwgYEZuJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMucHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgYWRkaXRpb25hbEVudjogdGhpcy5wcm9wcy5hZGRpdGlvbmFsRW52LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAuLi50aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uICYmIHtcbiAgICAgICAgdXNlclBvb2w6ICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIENvZ25pdG9BdXRoZW50aWNhdGlvbikudXNlcnBvb2wsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSAmJiB7XG4gICAgICAgIHRhYmxlOiB0aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlLnRhYmxlLFxuICAgICAgICB0YWJsZVdyaXRlczogdHlwZU5hbWUgPT09ICdNdXRhdGlvbicsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5hc3NldENkbiAmJiB7XG4gICAgICAgIGFzc2V0RG9tYWluTmFtZTogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldERvbWFpbk5hbWUsXG4gICAgICAgIGFzc2V0QnVja2V0OiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0QnVja2V0LFxuICAgICAgfSxcbiAgICAgIGxhbWJkYU9wdGlvbnM6IHRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyxcbiAgICAgIGxhbWJkYVRyYWNpbmc6IHRoaXMucHJvcHMubGFtYmRhVHJhY2luZyxcbiAgICB9KTtcbiAgICB0aGlzLl9mdW5jdGlvbnNbb3BlcmF0aW9uSWRdID0gZm47XG4gICAgVGFncy5vZihmbikuYWRkKCdHcmFwaFFMJywgZGVzY3JpcHRpb24pO1xuXG4gICAgLy8gaWYgKHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUR1cmF0aW9uc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0R1cmF0aW9uKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUludm9rZXNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNJbnZvY2F0aW9ucygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNFcnJvcnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljVGhyb3R0bGVzKCkpO1xuICAgIC8vIH1cblxuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgYXdzX2FwcHN5bmMuTGFtYmRhRGF0YVNvdXJjZShzY29wZSwgYExhbWJkYURTJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgbmFtZTogYExhbWJkYV8ke3R5cGVOYW1lIGFzIHN0cmluZ31fJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWAsXG4gICAgICBsYW1iZGFGdW5jdGlvbjogZm4sXG4gICAgfSk7XG5cbiAgICBuZXcgYXdzX2FwcHN5bmMuUmVzb2x2ZXIoc2NvcGUsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM/OiBPbWl0PFZ0bFJlc29sdmVyT3B0aW9ucywgJ2RhdGFTb3VyY2UnPik6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkVnRsUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwge1xuICAgICAgZGF0YVNvdXJjZTogdGhpcy50YWJsZURhdGFTb3VyY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhU291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtb0RCIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEpTUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwgdGhpcy50YWJsZURhdGFTb3VyY2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdGFzaFZhbHVlczoge1xuICAgICAgICAuLi5vcHRpb25zPy5zdGFzaFZhbHVlcyA/PyB7fSxcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUhLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZSwgb3B0aW9ucz86IEpzUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlRm9yVHlwZU5hbWUodHlwZU5hbWUgYXMgc3RyaW5nKTtcblxuICAgIGNvbnN0IHJlc29sdmVyRGlyID0gJy4vc3JjL2pzLXJlc29sdmVyLyc7XG4gICAgY29uc3QgZnVuY3Rpb25zOiBKc1Jlc29sdmVyQ29uZmlnW10gPSBbXTtcblxuICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyB8fCBvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBmdW5jdGlvbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHN0ZXBDb3VudDogMSxcbiAgICAgICAgZW50cnlGaWxlOiBgJHtyZXNvbHZlckRpcn0vJHtvcGVyYXRpb25JZH0udHNgLFxuICAgICAgICBmdW5jdGlvbklkOiBgSlNGdW5jdGlvbiR7b3BlcmF0aW9uSWR9YCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdW5jdGlvbnMucHVzaCguLi5vcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzLm1hcCgobmFtZSwgaW5kZXgpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBzdGVwQ291bnQ6IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMhLmxlbmd0aCxcbiAgICAgICAgZW50cnlGaWxlOiBgJHtyZXNvbHZlckRpcn0vJHtvcGVyYXRpb25JZH0uJHtuYW1lfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH0ke25hbWV9YCxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGlwZWxpbmVDb25maWcgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZm4gb2YgZnVuY3Rpb25zKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZm4uZW50cnlGaWxlKSkge1xuICAgICAgICBmcy5ta2RpclN5bmMocmVzb2x2ZXJEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmNyZWF0ZUpTUmVzb2x2ZXJGaWxlKGZuLCB0eXBlTmFtZSBhcyBzdHJpbmcsIGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc0Z1bmN0aW9uID0gbmV3IGF3c19hcHBzeW5jLkFwcHN5bmNGdW5jdGlvbihzY29wZSwgZm4uZnVuY3Rpb25JZCwge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICBuYW1lOiBvcGVyYXRpb25JZC5yZXBsYWNlKC9cXC4vZywgJycpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tQXNzZXQoJy4nLCB7XG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogQXNzZXRIYXNoVHlwZS5PVVRQVVQsXG4gICAgICAgICAgZGVwbG95VGltZTogdHJ1ZSxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgaW1hZ2U6IERvY2tlckltYWdlLmZyb21SZWdpc3RyeSgnZHVtbXknKSwgLy8gV2lsbCBuZXZlciBiZSB1c2VkIGR1ZSB0byBsb2NhbCBidW5kbGluZ1xuICAgICAgICAgICAgb3V0cHV0VHlwZTogQnVuZGxpbmdPdXRwdXQuU0lOR0xFX0ZJTEUsXG4gICAgICAgICAgICBmdW5jdGlvbklkOiBmbi5mdW5jdGlvbklkLFxuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xuICAgICAgICAgICAgICAgIGV4ZWMoXG4gICAgICAgICAgICAgICAgICBvc1BsYXRmb3JtID09PSAnd2luMzInID8gJ2NtZCcgOiAnYmFzaCcsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG9zUGxhdGZvcm0gPT09ICd3aW4zMicgPyAnL2MnIDogJy1jJyxcbiAgICAgICAgICAgICAgICAgICAgYGVzYnVpbGQgLS1idW5kbGUgLS1zb3VyY2VtYXA9aW5saW5lIC0tc291cmNlcy1jb250ZW50PWZhbHNlIC0tdGFyZ2V0PWVzbmV4dCAtLXBsYXRmb3JtPW5vZGUgLS1mb3JtYXQ9ZXNtIC0tZXh0ZXJuYWw6QGF3cy1hcHBzeW5jL3V0aWxzIC0tb3V0ZGlyPSR7b3V0cHV0RGlyfSAke2ZuLmVudHJ5RmlsZX1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52IH0sXG4gICAgICAgICAgICAgICAgICAgIHN0ZGlvOiBbIC8vIHNob3cgb3V0cHV0XG4gICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZScsIC8vIGlnbm9yZSBzdGRpb1xuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLCAvLyByZWRpcmVjdCBzdGRvdXQgdG8gc3RkZXJyXG4gICAgICAgICAgICAgICAgICAgICAgJ2luaGVyaXQnLCAvLyBpbmhlcml0IHN0ZGVyclxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9zUGxhdGZvcm0gPT09ICd3aW4zMicsXG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIEJ1bmRsaW5nT3B0aW9ucyxcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bnRpbWU6IGF3c19hcHBzeW5jLkZ1bmN0aW9uUnVudGltZS5KU18xXzBfMCxcbiAgICAgIH0pO1xuICAgICAgcGlwZWxpbmVDb25maWcucHVzaChqc0Z1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBuZXcgYXdzX2FwcHN5bmMuUmVzb2x2ZXIoc2NvcGUsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICBwaXBlbGluZUNvbmZpZyxcbiAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUlubGluZShgXG4gICAgLy8gVGhlIGJlZm9yZSBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoY3R4KSB7XG4gICAgICBjb25zb2xlLmxvZyhjdHgpO1xuJHtPYmplY3QuZW50cmllcyhvcHRpb25zPy5zdGFzaFZhbHVlcyA/PyBbXSkubWFwKHZhbCA9PiBgICAgICAgY3R4LnN0YXNoLiR7dmFsWzBdfSA9ICcke3ZhbFsxXX0nYCkuam9pbignXFxuJyl9XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvLyBUaGUgYWZ0ZXIgc3RlcFxuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucHJldi5yZXN1bHRcbiAgICB9XG4gIGApLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM6IFZ0bFJlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcblxuICAgIGNvbnN0IG1hcHBpbmdSZXFGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXEudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1JlcUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUsICcjIyBSZXF1ZXN0IG1hcHBpbmcnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nUmVzRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVzLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXNGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy92dGwvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlLCAnJHV0aWwudG9Kc29uKCRjdHgucmVzdWx0KScsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlRm9yVHlwZU5hbWUodHlwZU5hbWUgYXMgc3RyaW5nKTtcblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcihzY29wZSwgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2U6IG9wdGlvbnMuZGF0YVNvdXJjZSxcbiAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXFGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBhd3NfYXBwc3luYy5NYXBwaW5nVGVtcGxhdGUuZnJvbVN0cmluZyh0aGlzLnN1YnN0VmFyaWFibGVzKGZzLnJlYWRGaWxlU3luYyhtYXBwaW5nUmVzRmlsZSkudG9TdHJpbmcoJ3V0Zi04JyksIG9wdGlvbnMudmFyaWFibGVzKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgc2NvcGUgZm9yIGNyZWF0aW5nIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIHR5cGUgbmFtZS5cbiAgICogSWYgdXNlTmVzdGVkU3RhY2tzIGlzIGVuYWJsZWQsIHJldHVybnMgYSBuZXN0ZWQgc3RhY2sgZm9yIHRoZSB0eXBlIG5hbWUsXG4gICAqIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuIE90aGVyd2lzZSwgcmV0dXJucyB0aGlzIGNvbnN0cnVjdC5cbiAgICpcbiAgICogUXVlcnksIE11dGF0aW9uLCBhbmQgU3Vic2NyaXB0aW9uIGVhY2ggZ2V0IHRoZWlyIG93biBuZXN0ZWQgc3RhY2suXG4gICAqIEFsbCBvdGhlciB0eXBlcyAoZmllbGQgcmVzb2x2ZXJzKSBzaGFyZSBhIHNpbmdsZSBcIkZpZWxkXCIgbmVzdGVkIHN0YWNrLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgR3JhcGhRTCB0eXBlIG5hbWUgKGUuZy4sICdRdWVyeScsICdNdXRhdGlvbicsICdTdWJzY3JpcHRpb24nLCBvciBhIGN1c3RvbSB0eXBlKVxuICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0IHRvIHVzZSBhcyBzY29wZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzXG4gICAqL1xuICBwcml2YXRlIGdldFNjb3BlRm9yVHlwZU5hbWUodHlwZU5hbWU6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnVzZU5lc3RlZFN0YWNrcykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdFR5cGVzID0gWydRdWVyeScsICdNdXRhdGlvbicsICdTdWJzY3JpcHRpb24nXTtcbiAgICBjb25zdCBzdGFja0tleSA9IHJvb3RUeXBlcy5pbmNsdWRlcyh0eXBlTmFtZSkgPyB0eXBlTmFtZSA6ICdGaWVsZCc7XG5cbiAgICBpZiAoIXRoaXMubmVzdGVkU3RhY2tzW3N0YWNrS2V5XSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGFja3Nbc3RhY2tLZXldID0gbmV3IE5lc3RlZFN0YWNrKHRoaXMsIGAke3N0YWNrS2V5fVJlc29sdmVyc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBOZXN0ZWQgc3RhY2sgZm9yICR7c3RhY2tLZXl9IHJlc29sdmVyc2AsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRTdGFja3Nbc3RhY2tLZXldO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzdFZhcmlhYmxlcyhkYXRhOiBzdHJpbmcsIHZhcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBzdHJpbmcge1xuICAgIGxldCByZXMgPSBkYXRhO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiB2YXJzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhcnMsIG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFyc1tuYW1lXTtcbiAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXCRcXHske25hbWV9XFx9YCwgJ2cnKSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlOiBzdHJpbmcsIHR5cGVOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJnVHlwZSA9IGAke3R5cGVOYW1lfSR7dXBwZXJjYXNlRmlyc3QoZmllbGROYW1lKX1BcmdzYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGltcG9ydCB7IGFwaSB9IGZyb20gJ2Nkay1zZXJ2ZXJsZXNzL2xpYi9sYW1iZGEnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFwaS5jcmVhdGVBcHBTeW5jSGFuZGxlcjwke2FyZ1R5cGV9LCAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J10+KGFzeW5jIChjdHgpID0+IHtcbiAgY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGN0eC5ldmVudCkpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbn0pO2AsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKU1Jlc29sdmVyRmlsZShmbjogSnNSZXNvbHZlckNvbmZpZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSAoZm4uaW5kZXggPT0gKGZuLnN0ZXBDb3VudCAtIDEpKSA/IGAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J11gIDogJ2FueSc7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKGZuLmVudHJ5RmlsZSwgYGltcG9ydCB7IENvbnRleHQsIHV0aWwgfSBmcm9tICdAYXdzLWFwcHN5bmMvdXRpbHMnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFJlcXVlc3QgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiBhbnkge1xuICBjb25zb2xlLmxvZyhjdHgpO1xuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzcG9uc2UoY3R4OiBDb250ZXh0PCR7YXJnVHlwZX0+KTogJHtyZXR1cm5UeXBlfSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiBjdHgucmVzdWx0Lml0ZW1zO1xufWAsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gdXBwZXJjYXNlRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9tYWluL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzL2xpYi91dGlsLnRzXG4gKiBhcyBpdCBpcyBub3QgZXhwb3J0ZWQgYnkgYXdzLWNkay1saWJcbiAqL1xuZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBTcGF3blN5bmNPcHRpb25zKSB7XG4gIGNvbnN0IHByb2MgPSBzcGF3blN5bmMoY21kLCBhcmdzLCBvcHRpb25zKTtcblxuICBpZiAocHJvYy5lcnJvcikge1xuICAgIHRocm93IHByb2MuZXJyb3I7XG4gIH1cblxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvYy5zdGRvdXQgfHwgcHJvYy5zdGRlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW1N0YXR1cyAke3Byb2Muc3RhdHVzfV0gc3Rkb3V0OiAke3Byb2Muc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKX1cXG5cXG5cXG5zdGRlcnI6ICR7cHJvYy5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y21kfSAke2FyZ3Muam9pbignICcpfSAke29wdGlvbnM/LmN3ZCA/IGBydW4gaW4gZGlyZWN0b3J5ICR7b3B0aW9ucy5jd2R9YCA6ICcnfSBleGl0ZWQgd2l0aCBzdGF0dXMgJHtwcm9jLnN0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jO1xufVxuXG4iXX0=
|
|
@@ -34,7 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.RestApi = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
39
39
|
const cdk = __importStar(require("aws-cdk-lib"));
|
|
40
40
|
const yaml = __importStar(require("js-yaml"));
|
|
@@ -377,4 +377,4 @@ class RestApi extends base_api_1.BaseApi {
|
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
379
|
exports.RestApi = RestApi;
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCwrQ0FBd0c7QUE4QnhHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsT0FBb0IsU0FBUSxrQkFBTztJQWtCOUM7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUF3QjtRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWIxRTs7O1dBR0c7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQVlqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBYSxDQUFDO1FBRTNGLElBQUksZ0JBQThELENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ2hFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztZQUNGLElBQUks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TztnQkFDVixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxhQUFhLENBQUMsSUFBYztRQUNwQyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUMzQix3R0FBd0c7b0JBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxTQUFTLENBQUMscUNBQXFDO29CQUNqRCxDQUFDO29CQUVELE1BQU0sVUFBVSxHQUFJLFFBQTJCLENBQUMsR0FBMkIsQ0FBRSxDQUFDO29CQUM5RSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0NBRUY7QUFuV0QsMEJBbVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgYXdzX2NlcnRpZmljYXRlbWFuYWdlcixcbiAgYXdzX2lhbSxcbiAgYXdzX3JvdXRlNTMsXG4gIGF3c19yb3V0ZTUzX3RhcmdldHMsXG4gIGF3c19hcGlnYXRld2F5LFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgT3BlbkFQSTMsIE9wZXJhdGlvbk9iamVjdCwgUGF0aEl0ZW1PYmplY3QgfSBmcm9tICdvcGVuYXBpLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUp3dEF1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uLCBMYW1iZGFPcHRpb25zIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRSwgQ0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkwgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEFwaVByb3BzPE9QUz4gZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSByb3V0ZXMgZm9yIGFsbCBlbmRwb2ludHMgY29uZmlndXJlZCBpbiB0aGUgb3BlbmFwaS55YW1sIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0dlbmVyYXRlUm91dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogY3VzdG9tIG9wdGlvbnMgZm9yIHRoZSBjcmVhdGVkIEh0dHBBcGlcbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgcmVzdEFwaVByb3BzPzogYXdzX2FwaWdhdGV3YXkuUmVzdEFwaUJhc2VQcm9wcztcblxuICAvKipcbiAgICogYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gY29uc3RydWN0IHBlciBvcGVyYXRpb25JZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICBsYW1iZGFPcHRpb25zQnlPcGVyYXRpb24/OiB7IFtvcGVyYXRpb25JZCBpbiBrZXlvZiBPUFNdPzogTGFtYmRhT3B0aW9ucyB9O1xuXG4gIGRlZmluaXRpb25GaWxlTmFtZTogc3RyaW5nO1xuXG4gIGNvcnM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIFJlc3RBcGkgY29uc3RydWN0IHNldHMgdXAgYW4gQVdTIEFQSSBHYXRld2F5IFJFU1QgQVBJIHVzaW5nIE9wZW5BUEkgc3BlY2lmaWNhdGlvbi5cbiAqIFRoaXMgY29uc3RydWN0IGZhY2lsaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIFJFU1QgQVBJIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGN1c3RvbSBkb21haW4sIENPUlMgc3VwcG9ydCwgYW5kIGludGVncmF0aW9uIHdpdGggTGFtYmRhIGZ1bmN0aW9ucy5cbiAqIEl0IGFsbG93cyBhdXRvLWdlbmVyYXRpbmcgcm91dGVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBPcGVuQVBJIGRlZmluaXRpb24gYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8gZHluYW1pY2FsbHkgYWRkIGN1c3RvbSByb3V0ZXMgYW5kIG1hbmFnZSBMYW1iZGEgZnVuY3Rpb24gaW50ZWdyYXRpb25zLlxuICpcbiAqIEB0ZW1wbGF0ZSBQQVRIUyAtIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBBUEkgcGF0aHMuXG4gKiBAdGVtcGxhdGUgT1BTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEFQSSBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcGkgPSBuZXcgUmVzdEFwaSh0aGlzLCAnTXlSZXN0QXBpJywge1xuICogICBhcGlOYW1lOiAnTXlBUEknLFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogICBkZWZpbml0aW9uRmlsZU5hbWU6ICdvcGVuYXBpLnlhbWwnLFxuICogICBhdXRoZW50aWNhdGlvbjogbXlDb2duaXRvQXV0aCxcbiAqICAgc2luZ2xlVGFibGVEYXRhc3RvcmU6IG15RHluYW1vREJUYWJsZSxcbiAqICAgYXV0b0dlbmVyYXRlUm91dGVzOiB0cnVlLFxuICogfSk7XG4gKlxuICogLy8gQWRkIGEgY3VzdG9tIFJFU1QgcmVzb3VyY2VcbiAqIGFwaS5hZGRSZXN0UmVzb3VyY2UoJy9pdGVtcycsICdnZXQnKTtcbiAqXG4gKiAvLyBHZXQgdGhlIExhbWJkYSBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb25cbiAqIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gYXBpLmdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKCdnZXRJdGVtcycpO1xuICovXG5leHBvcnQgY2xhc3MgUmVzdEFwaTxQQVRIUywgT1BTPiBleHRlbmRzIEJhc2VBcGkge1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEFQSSBHYXRld2F5IFJFU1QgQVBJIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogYXdzX2FwaWdhdGV3YXkuU3BlY1Jlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gZm9yIHRoZSBSRVNUIEFQSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlTcGVjOiBPcGVuQVBJMztcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIExhbWJkYSBmdW5jdGlvbnMgdXNlZCBhcyBpbnRlZ3JhdGlvbnMgZm9yIHRoZSBBUEkgb3BlcmF0aW9ucy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZXN0QXBpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBSZXN0QXBpIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IFJlc3RBcGlQcm9wczxPUFM+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFwaVNwZWMgPSB5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSkudG9TdHJpbmcoKSkgYXMgT3BlbkFQSTM7XG5cbiAgICBsZXQgY3VzdG9tRG9tYWluTmFtZTogYXdzX2FwaWdhdGV3YXkuRG9tYWluTmFtZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuYXBpRlFETikge1xuICAgICAgY3VzdG9tRG9tYWluTmFtZSA9IHtcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogbmV3IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGUodGhpcywgJ0NlcnQnLCB7XG4gICAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICAgIHZhbGlkYXRpb246IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1Jlc3RBcGlEb21haW5OYW1lJywge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuYXBpTmFtZX0ke0NGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRX1gLFxuICAgICAgICB2YWx1ZTogdGhpcy5hcGlGUUROLFxuICAgICAgfSk7XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnUmVzdEFwaVVybE91dHB1dCcsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX1VSTH1gLFxuICAgICAgICB2YWx1ZTogJ2h0dHBzOi8vJyArIHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmICgocHJvcHMubW9uaXRvcmluZyA/PyB0cnVlKSAmJiB0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNTZXJ2ZXJFcnJvcih7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljQ2xpZW50RXJyb3Ioe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuXG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5MCcsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk1JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5hdXRvR2VuZXJhdGVSb3V0ZXMgPz8gdHJ1ZSkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIGluIHRoaXMuYXBpU3BlYy5wYXRocykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXBpU3BlYy5wYXRocywgcGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBwYXRoSXRlbSA9IHRoaXMuYXBpU3BlYy5wYXRoc1twYXRoXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1ldGhvZCBpbiBwYXRoSXRlbSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXRoSXRlbSwgbWV0aG9kKSAmJlxuICAgICAgICAgICAgICBbJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnb3B0aW9ucycsICdoZWFkJ10uaW5kZXhPZihtZXRob2QpID49IDApIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGFsbCBvcGVyYXRpb25zXG4gICAgICAgICAgICAgIHRoaXMuYWRkUmVzdFJlc291cmNlKHBhdGggYXMgYW55LCBtZXRob2QgYXMgYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgX3NwZWMgRW5kcG9pbnRcbiAgICB0aGlzLmFwaVNwZWMucGF0aHMhWycvb3BlbmFwaS5qc29uJ10gPSB7XG4gICAgICBnZXQ6IHtcbiAgICAgICAgJ3N1bW1hcnknOiAnUmV0dXJucyB0aGUgcmF3IE9wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICdkZXNjcmlwdGlvbic6ICdSZXR1cm5zIHRoZSByYXcgT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgJ29wZXJhdGlvbklkJzogJ19zcGVjJyxcbiAgICAgICAgJ3Jlc3BvbnNlcyc6IHtcbiAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29wZW5hcGkranNvbic6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBAdHMtaWdub3JlIEN1c3RvbSBwcm9wZXJ0eSBmb3IgQVdTXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJzoge1xuICAgICAgICAgIHR5cGU6ICdtb2NrJyxcbiAgICAgICAgICBodHRwTWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne1xcJ3N0YXR1c0NvZGVcXCc6IDIwMH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vcGVuYXBpK2pzb24nOiBKU09OLnN0cmluZ2lmeSh0aGlzLmNsZWFudXBTcGVjKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoKHRoaXMuYXBpU3BlYykpKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLmNvcnMpIHtcbiAgICAgIHRoaXMuYXBpU3BlYy5wYXRocyFbJy97cHJveHkrfSddID0ge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ3N1bW1hcnknOiAnQ09SUyBzdXBwb3J0JyxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnRW5hYmxlIENPUlMgYnkgcmV0dXJuaW5nIGNvcnJlY3QgaGVhZGVycycsXG4gICAgICAgICAgJ3RhZ3MnOiBbJ0NPUlMnXSxcbiAgICAgICAgICAncmVzcG9uc2VzJzoge1xuICAgICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVmYXVsdCByZXNwb25zZSBmb3IgQ09SUyBtZXRob2QnLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJzoge1xuICAgICAgICAgICAgdHlwZTogJ21vY2snLFxuICAgICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICcjc2V0KCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIub3JpZ2luID0gJG1ldGhvZC5yZXF1ZXN0LmhlYWRlci5vcmlnaW4pXFxue1xcbiAgXCJzdGF0dXNDb2RlXCIgOiAyMDBcXG59XFxuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6ICcyMDAnLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IFwiJ0NvbnRlbnQtVHlwZSxYLUFtei1EYXRlLEF1dGhvcml6YXRpb24sWC1BcGktS2V5J1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiBcIid0cnVlJ1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IFwiJ1BVVCxHRVQsUE9TVCxERUxFVEUsUEFUQ0gsSEVBRCxPUFRJT05TJ1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJ2NvbnRleHQucmVxdWVzdE92ZXJyaWRlLmhlYWRlci5vcmlnaW4nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJ3t9JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnBhdGNoU2VjdXJpdHkodGhpcy5hcGlTcGVjKTtcblxuICAgIC8vIFRPRE8gcGF0Y2ggc3BlYyBmb3IgQ29nbml0byB1c2VyIHBvb2xcblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcGlnYXRld2F5LlNwZWNSZXN0QXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHJlc3RBcGlOYW1lOiBgJHtwcm9wcy5hcGlOYW1lfSBbJHtwcm9wcy5zdGFnZU5hbWV9XWAsXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgYXBpRGVmaW5pdGlvbjogYXdzX2FwaWdhdGV3YXkuQXBpRGVmaW5pdGlvbi5mcm9tSW5saW5lKHRoaXMuYXBpU3BlYyksXG4gICAgICAuLi5wcm9wcy5yZXN0QXBpUHJvcHMsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgaW52b2tlIHBlcm1pc3Npb25zIHRvIExhbWJkYSBmdW5jdGlvbnNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE9iamVjdC52YWx1ZXModGhpcy5fZnVuY3Rpb25zKSkge1xuICAgICAgZm4uYWRkUGVybWlzc2lvbignUmVzdEFwaUludm9rZScsIHtcbiAgICAgICAgcHJpbmNpcGFsOiBuZXcgYXdzX2lhbS5TZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uJyxcbiAgICAgICAgc291cmNlQXJuOiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tRG9tYWluTmFtZSAmJiB0aGlzLmFwaS5kb21haW5OYW1lKSB7XG4gICAgICBuZXcgYXdzX3JvdXRlNTMuQVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogYXdzX3JvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgYXdzX3JvdXRlNTNfdGFyZ2V0cy5BcGlHYXRld2F5RG9tYWluKHRoaXMuYXBpLmRvbWFpbk5hbWUpLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW51cFNwZWMoc3BlYzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIE9iamVjdC5lbnRyaWVzKHNwZWMpLmZvckVhY2goKFtwcm9wLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgoJ3gtJykpIHtcbiAgICAgICAgZGVsZXRlIHNwZWNbcHJvcF07XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwU3BlYyhzcGVjW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcGVjO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgZ2VuZXJhdGVkIExhbWJkYSBmdW5jdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBBUEkgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24ob3BlcmF0aW9uSWQ6IGtleW9mIE9QUyk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbklkIGFzIHN0cmluZ107XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGEgbGlzdCBvZiBhbGwgZ2VuZXJhdGVkIExhbWJkYSBmdW5jdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbnMoKTogTGFtYmRhRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fZnVuY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdG9yIG1ldGhvZCB0byBtb2RpZnkgdGhlIGdpdmVuIGZ1bmN0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uSWRzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byB2aXNpdFxuICAgKiBAcGFyYW0gb3AgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGV2ZXJ5IGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgbW9kaWZ5T3BlcmF0aW9uRnVuY3Rpb25zKG9wZXJhdGlvbklkczogKGtleW9mIE9QUylbXSwgb3A6IChmbjogTGFtYmRhRnVuY3Rpb24pID0+IHZvaWQpIHtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbklkIG9mIG9wZXJhdGlvbklkcykge1xuICAgICAgb3AodGhpcy5nZXRGdW5jdGlvbkZvck9wZXJhdGlvbihvcGVyYXRpb25JZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRSZXN0UmVzb3VyY2U8UCBleHRlbmRzIGtleW9mIFBBVEhTPihwYXRoOiBQLCBtZXRob2Q6IGtleW9mIFBBVEhTW1BdKSB7XG4gICAgY29uc3Qgb2FQYXRoID0gdGhpcy5hcGlTcGVjLnBhdGhzIVtwYXRoIGFzIHN0cmluZ10gYXMgUGF0aEl0ZW1PYmplY3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gb2FQYXRoW21ldGhvZCBhcyBrZXlvZiBQYXRoSXRlbU9iamVjdF0gYXMgT3BlcmF0aW9uT2JqZWN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gb3BlcmF0aW9uLm9wZXJhdGlvbklkITtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGAke21ldGhvZCBhcyBzdHJpbmd9ICR7cGF0aCBhcyBzdHJpbmd9IC0gJHtvcGVyYXRpb24uc3VtbWFyeX1gO1xuXG4gICAgY29uc3QgY3VzdG9tTGFtYmRhT3B0aW9ucyA9IHRoaXMucHJvcHMubGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uID8gdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zQnlPcGVyYXRpb25bb3BlcmF0aW9uSWQgYXMga2V5b2YgT1BTXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5hZGRDdXN0b21SZXN0UmVzb3VyY2Uob3BlcmF0aW9uLCBtZXRob2QgYXMgc3RyaW5nLCBkZXNjcmlwdGlvbiwgY3VzdG9tTGFtYmRhT3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ3VzdG9tUmVzdFJlc291cmNlKG9wZXJhdGlvbjogT3BlcmF0aW9uT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgYWRkaXRpb25hbExhbWJkYU9wdGlvbnM6IExhbWJkYU9wdGlvbnMgPSB7fSkge1xuICAgIGlmICgneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbicgaW4gb3BlcmF0aW9uKSB7XG4gICAgICByZXR1cm47IC8vIFNraXAgaWYgb3BlcmF0aW9uIHdhcyBkZWNsYXJlZCBpbiBzcGVjIGZpbGUgYWxyZWFkeSFcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhL3Jlc3QuJHt0aGlzLnByb3BzLmFwaU5hbWUudG9Mb3dlckNhc2UoKX0uJHtvcGVyYXRpb24ub3BlcmF0aW9uSWR9LnRzYDtcblxuICAgIGNvbnN0IGxhbWJkYU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMgJiYge1xuICAgICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgLi4uYWRkaXRpb25hbExhbWJkYU9wdGlvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiAmJiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbi5oYXNPd25Qcm9wZXJ0eSgndXNlcnBvb2wnKVxuICAgICAgPyB7IHVzZXJQb29sOiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBJQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCB9XG4gICAgICA6IHsgand0OiB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElKd3RBdXRoZW50aWNhdGlvbiB9KTtcblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGBGbiR7b3BlcmF0aW9uLm9wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMuZG9tYWluTmFtZSAmJiB7XG4gICAgICAgICAgRE9NQUlOX05BTUU6IHRoaXMucHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5hZGRpdGlvbmFsRW52LFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICBkZXNjcmlwdGlvbjogYFske3RoaXMucHJvcHMuc3RhZ2VOYW1lfV0gJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgLi4uYXV0aGVudGljYXRpb24sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0aGlzLnRhYmxlV3JpdGVBY2Nlc3NGb3JNZXRob2QobWV0aG9kKSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9ucyxcbiAgICAgIGxhbWJkYVRyYWNpbmc6IHRoaXMucHJvcHMubGFtYmRhVHJhY2luZyxcbiAgICB9KTtcbiAgICB0aGlzLl9mdW5jdGlvbnNbb3BlcmF0aW9uLm9wZXJhdGlvbklkIV0gPSBmbjtcbiAgICBjZGsuVGFncy5vZihmbikuYWRkKCdPcGVuQVBJJywgZGVzY3JpcHRpb24ucmVwbGFjZSgvW15cXHdcXHNcXGRfLjovPStcXC1AXS9nLCAnJykpO1xuXG4gICAgLy8gaWYgKHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUR1cmF0aW9uc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0R1cmF0aW9uKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUludm9rZXNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNJbnZvY2F0aW9ucygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNFcnJvcnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljVGhyb3R0bGVzKCkpO1xuICAgIC8vIH1cblxuICAgIGNvbnN0IGhhc1ZlcnNpb25Db25maWcgPSBsYW1iZGFPcHRpb25zLmN1cnJlbnRWZXJzaW9uT3B0aW9ucyAhPSB1bmRlZmluZWQ7XG5cbiAgICBvcGVyYXRpb25bJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nXSA9IHtcbiAgICAgIHR5cGU6ICdhd3NfcHJveHknLFxuICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJpOiBjZGsuU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgcmVzb3VyY2U6ICdwYXRoJyxcbiAgICAgICAgc2VydmljZTogJ2FwaWdhdGV3YXknLFxuICAgICAgICBhY2NvdW50OiAnbGFtYmRhJyxcbiAgICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogYDIwMTUtMDMtMzEvZnVuY3Rpb25zLyR7KGhhc1ZlcnNpb25Db25maWcgPyBmbi5jdXJyZW50VmVyc2lvbiA6IGZuKS5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgLFxuICAgICAgICAvLyAgICAgICAgICAgICBeXl5eXl5eXl5eIC0gVEhJUyBORUVEUyBUTyBCRSBUSElTIERBVEUuIEVYQUNUTFkhXG4gICAgICB9KSxcbiAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6ICd3aGVuX25vX3RlbXBsYXRlcycsXG4gICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogJzEuMCcsXG4gICAgfTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgdGFibGVXcml0ZUFjY2Vzc0Zvck1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAobWV0aG9kLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICBjYXNlICdwb3N0JzpcbiAgICAgIGNhc2UgJ3B1dCc6XG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICBjYXNlICdnZXQnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFXUyBkb2VzIG5vdCBwcm9wZXJseSBhcHBseSB0aGUgJ3NlY3VyaXR5JyBvcHRpb24gdG8gZXZlcnkgc2luZ2xlIHBhdGgtbWV0aG9kLlxuICAgKiBBY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiwgZ2xvYmFsIHNlY3VyaXR5IGdldHMgYXBwbGllZCwgaWYgdGhlcmUgaXMgbm8gc2VjdXJpdHlcbiAgICogc2V0IGZvciB0aGUgcGFydGljdWxhciBwYXRoLW1ldGhvZC4gSWYgdGhlcmUgaXMgYW55LCBldmVuIGVtcHR5LCBpdCB3aWxsIGdldCBwcmVjZWRlbmNlLlxuICAgKiBUSElTIERPRVMgTk9UIEhBUFBFTiBPTiBBV1MuIElUIEpVU1QgQUxXQVlTIFVTRVMgVEhFIEdMT0JBTCBTRVRUSU5HIVxuICAgKlxuICAgKiAnc2VjdXJpdHkgYXBwbGllcyBbLi4uXSBzY2hlbWVzIGdsb2JhbGx5IHRvIGFsbCBBUEkgb3BlcmF0aW9ucywgdW5sZXNzIG92ZXJyaWRkZW4gb24gdGhlIG9wZXJhdGlvbiBsZXZlbCdcbiAgICogQHNlZSBodHRwczovL3N3YWdnZXIuaW8vZG9jcy9zcGVjaWZpY2F0aW9uL2F1dGhlbnRpY2F0aW9uL1xuICAgKi9cbiAgcHJvdGVjdGVkIHBhdGNoU2VjdXJpdHkoc3BlYzogT3BlbkFQSTMpIHtcbiAgICBpZiAoJ3NlY3VyaXR5JyBpbiBzcGVjKSB7XG4gICAgICBmb3IgKGNvbnN0IHNwZWNQYXRoIG9mIE9iamVjdC52YWx1ZXMoc3BlYy5wYXRocyB8fCBbXSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlY1BhdGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0+IFRoZXJlIGlzIGEgd3JvbmcgZGVmaW5pdGlvbiBmb3IgbWV0aG9kIGluY2x1ZGVzISBJdCBhbGxvd3MgYW55IHZhbHVlIHRvIGJlIGdpdmVuIVxuICAgICAgICAgIGlmICghdGhpcy5hcGlNZXRob2RzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGlmIG5vdCBodHRwIG1ldGhvZCBkZWZpbml0aW9uXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3BlY01ldGhvZCA9IChzcGVjUGF0aCBhcyBQYXRoSXRlbU9iamVjdClba2V5IGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSE7XG4gICAgICAgICAgaWYgKCEoJ3NlY3VyaXR5JyBpbiBzcGVjTWV0aG9kKSkge1xuICAgICAgICAgICAgc3BlY01ldGhvZC5zZWN1cml0eSA9IHNwZWMuc2VjdXJpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgc3BlYy5zZWN1cml0eTtcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBOEI7QUFDOUIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCwrQ0FBd0c7QUE4QnhHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsT0FBb0IsU0FBUSxrQkFBTztJQWtCOUM7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUF3QjtRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWIxRTs7O1dBR0c7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQVlqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBYSxDQUFDO1FBRTNGLElBQUksZ0JBQThELENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ2hFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztZQUNGLElBQUks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TztnQkFDVixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxhQUFhLENBQUMsSUFBYztRQUNwQyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUMzQix3R0FBd0c7b0JBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxTQUFTLENBQUMscUNBQXFDO29CQUNqRCxDQUFDO29CQUVELE1BQU0sVUFBVSxHQUFJLFFBQTJCLENBQUMsR0FBMkIsQ0FBRSxDQUFDO29CQUM5RSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0NBRUY7QUFuV0QsMEJBbVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLFxuICBhd3NfaWFtLFxuICBhd3Nfcm91dGU1MyxcbiAgYXdzX3JvdXRlNTNfdGFyZ2V0cyxcbiAgYXdzX2FwaWdhdGV3YXksXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgeyBPcGVuQVBJMywgT3BlcmF0aW9uT2JqZWN0LCBQYXRoSXRlbU9iamVjdCB9IGZyb20gJ29wZW5hcGktdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBJQ29nbml0b0F1dGhlbnRpY2F0aW9uLCBJSnd0QXV0aGVudGljYXRpb24gfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uJztcbmltcG9ydCB7IEJhc2VBcGksIEJhc2VBcGlQcm9wcyB9IGZyb20gJy4vYmFzZS1hcGknO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24sIExhbWJkYU9wdGlvbnMgfSBmcm9tICcuL2Z1bmMnO1xuaW1wb3J0IHsgQ0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9ET01BSU5OQU1FLCBDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX1VSTCB9IGZyb20gJy4uL3NoYXJlZC9vdXRwdXRzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0QXBpUHJvcHM8T1BTPiBleHRlbmRzIEJhc2VBcGlQcm9wcyB7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHJvdXRlcyBmb3IgYWxsIGVuZHBvaW50cyBjb25maWd1cmVkIGluIHRoZSBvcGVuYXBpLnlhbWwgZmlsZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvR2VuZXJhdGVSb3V0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBjdXN0b20gb3B0aW9ucyBmb3IgdGhlIGNyZWF0ZWQgSHR0cEFwaVxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZXN0QXBpUHJvcHM/OiBhd3NfYXBpZ2F0ZXdheS5SZXN0QXBpQmFzZVByb3BzO1xuXG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QgcGVyIG9wZXJhdGlvbklkXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIGxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbj86IHsgW29wZXJhdGlvbklkIGluIGtleW9mIE9QU10/OiBMYW1iZGFPcHRpb25zIH07XG5cbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgY29yczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFwaSBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgQVBJIEdhdGV3YXkgUkVTVCBBUEkgdXNpbmcgT3BlbkFQSSBzcGVjaWZpY2F0aW9uLlxuICogVGhpcyBjb25zdHJ1Y3QgZmFjaWxpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgUkVTVCBBUEkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgY3VzdG9tIGRvbWFpbiwgQ09SUyBzdXBwb3J0LCBhbmQgaW50ZWdyYXRpb24gd2l0aCBMYW1iZGEgZnVuY3Rpb25zLlxuICogSXQgYWxsb3dzIGF1dG8tZ2VuZXJhdGluZyByb3V0ZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9wZW5BUEkgZGVmaW5pdGlvbiBhbmQgcHJvdmlkZXMgbWV0aG9kcyB0byBkeW5hbWljYWxseSBhZGQgY3VzdG9tIHJvdXRlcyBhbmQgbWFuYWdlIExhbWJkYSBmdW5jdGlvbiBpbnRlZ3JhdGlvbnMuXG4gKlxuICogQHRlbXBsYXRlIFBBVEhTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEFQSSBwYXRocy5cbiAqIEB0ZW1wbGF0ZSBPUFMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgQVBJIG9wZXJhdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwaSA9IG5ldyBSZXN0QXBpKHRoaXMsICdNeVJlc3RBcGknLCB7XG4gKiAgIGFwaU5hbWU6ICdNeUFQSScsXG4gKiAgIHN0YWdlTmFtZTogJ2RldicsXG4gKiAgIGRlZmluaXRpb25GaWxlTmFtZTogJ29wZW5hcGkueWFtbCcsXG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBteUNvZ25pdG9BdXRoLFxuICogICBzaW5nbGVUYWJsZURhdGFzdG9yZTogbXlEeW5hbW9EQlRhYmxlLFxuICogICBhdXRvR2VuZXJhdGVSb3V0ZXM6IHRydWUsXG4gKiB9KTtcbiAqXG4gKiAvLyBBZGQgYSBjdXN0b20gUkVTVCByZXNvdXJjZVxuICogYXBpLmFkZFJlc3RSZXNvdXJjZSgnL2l0ZW1zJywgJ2dldCcpO1xuICpcbiAqIC8vIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvblxuICogY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBhcGkuZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24oJ2dldEl0ZW1zJyk7XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN0QXBpPFBBVEhTLCBPUFM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQVBJIEdhdGV3YXkgUkVTVCBBUEkgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhd3NfYXBpZ2F0ZXdheS5TcGVjUmVzdEFwaTtcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIFJFU1QgQVBJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaVNwZWM6IE9wZW5BUEkzO1xuXG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgTGFtYmRhIGZ1bmN0aW9ucyB1c2VkIGFzIGludGVncmF0aW9ucyBmb3IgdGhlIEFQSSBvcGVyYXRpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zOiB7IFtvcGVyYXRpb25JZDogc3RyaW5nXTogTGFtYmRhRnVuY3Rpb24gfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc3RBcGkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0aGlzIGNvbnN0cnVjdCBpcyBkZWZpbmVkLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIFJlc3RBcGkgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSBwcm9wczogUmVzdEFwaVByb3BzPE9QUz4pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuYXBpU3BlYyA9IHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMocHJvcHMuZGVmaW5pdGlvbkZpbGVOYW1lKS50b1N0cmluZygpKSBhcyBPcGVuQVBJMztcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBpZ2F0ZXdheS5Eb21haW5OYW1lT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hcGlGUUROKSB7XG4gICAgICBjdXN0b21Eb21haW5OYW1lID0ge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBuZXcgYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnUmVzdEFwaURvbWFpbk5hbWUnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9ET01BSU5OQU1FfWAsXG4gICAgICAgIHZhbHVlOiB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdSZXN0QXBpVXJsT3V0cHV0Jywge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuYXBpTmFtZX0ke0NGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfVVJMfWAsXG4gICAgICAgIHZhbHVlOiAnaHR0cHM6Ly8nICsgdGhpcy5hcGlGUUROLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY1NlcnZlckVycm9yKHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNDbGllbnRFcnJvcih7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG5cbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5OScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLmF1dG9HZW5lcmF0ZVJvdXRlcyA/PyB0cnVlKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggaW4gdGhpcy5hcGlTcGVjLnBhdGhzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hcGlTcGVjLnBhdGhzLCBwYXRoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdGhJdGVtID0gdGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdO1xuICAgICAgICAgIGZvciAoY29uc3QgbWV0aG9kIGluIHBhdGhJdGVtKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhdGhJdGVtLCBtZXRob2QpICYmXG4gICAgICAgICAgICAgIFsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdvcHRpb25zJywgJ2hlYWQnXS5pbmRleE9mKG1ldGhvZCkgPj0gMCkge1xuICAgICAgICAgICAgICAvLyBBZGQgYWxsIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgdGhpcy5hZGRSZXN0UmVzb3VyY2UocGF0aCBhcyBhbnksIG1ldGhvZCBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBfc3BlYyBFbmRwb2ludFxuICAgIHRoaXMuYXBpU3BlYy5wYXRocyFbJy9vcGVuYXBpLmpzb24nXSA9IHtcbiAgICAgIGdldDoge1xuICAgICAgICAnc3VtbWFyeSc6ICdSZXR1cm5zIHRoZSByYXcgT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ1JldHVybnMgdGhlIHJhdyBPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAnb3BlcmF0aW9uSWQnOiAnX3NwZWMnLFxuICAgICAgICAncmVzcG9uc2VzJzoge1xuICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vb3BlbmFwaStqc29uJzoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgQ3VzdG9tIHByb3BlcnR5IGZvciBBV1NcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nOiB7XG4gICAgICAgICAgdHlwZTogJ21vY2snLFxuICAgICAgICAgIGh0dHBNZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICd7XFwnc3RhdHVzQ29kZVxcJzogMjAwfScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29wZW5hcGkranNvbic6IEpTT04uc3RyaW5naWZ5KHRoaXMuY2xlYW51cFNwZWMoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgodGhpcy5hcGlTcGVjKSkpKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAocHJvcHMuY29ycykge1xuICAgICAgdGhpcy5hcGlTcGVjLnBhdGhzIVsnL3twcm94eSt9J10gPSB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAnc3VtbWFyeSc6ICdDT1JTIHN1cHBvcnQnLFxuICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdFbmFibGUgQ09SUyBieSByZXR1cm5pbmcgY29ycmVjdCBoZWFkZXJzJyxcbiAgICAgICAgICAndGFncyc6IFsnQ09SUyddLFxuICAgICAgICAgICdyZXNwb25zZXMnOiB7XG4gICAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZWZhdWx0IHJlc3BvbnNlIGZvciBDT1JTIG1ldGhvZCcsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29udGVudDoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nOiB7XG4gICAgICAgICAgICB0eXBlOiAnbW9jaycsXG4gICAgICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJyNzZXQoJGNvbnRleHQucmVxdWVzdE92ZXJyaWRlLmhlYWRlci5vcmlnaW4gPSAkbWV0aG9kLnJlcXVlc3QuaGVhZGVyLm9yaWdpbilcXG57XFxuICBcInN0YXR1c0NvZGVcIiA6IDIwMFxcbn1cXG4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogJzIwMCcsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogXCInQ29udGVudC1UeXBlLFgtQW16LURhdGUsQXV0aG9yaXphdGlvbixYLUFwaS1LZXknXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IFwiJ3RydWUnXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogXCInUFVULEdFVCxQT1NULERFTEVURSxQQVRDSCxIRUFELE9QVElPTlMnXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnY29udGV4dC5yZXF1ZXN0T3ZlcnJpZGUuaGVhZGVyLm9yaWdpbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne30nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMucGF0Y2hTZWN1cml0eSh0aGlzLmFwaVNwZWMpO1xuXG4gICAgLy8gVE9ETyBwYXRjaCBzcGVjIGZvciBDb2duaXRvIHVzZXIgcG9vbFxuXG4gICAgdGhpcy5hcGkgPSBuZXcgYXdzX2FwaWdhdGV3YXkuU3BlY1Jlc3RBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgcmVzdEFwaU5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbk5hbWUsXG4gICAgICBhcGlEZWZpbml0aW9uOiBhd3NfYXBpZ2F0ZXdheS5BcGlEZWZpbml0aW9uLmZyb21JbmxpbmUodGhpcy5hcGlTcGVjKSxcbiAgICAgIC4uLnByb3BzLnJlc3RBcGlQcm9wcyxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBpbnZva2UgcGVybWlzc2lvbnMgdG8gTGFtYmRhIGZ1bmN0aW9uc1xuICAgIGZvciAoY29uc3QgZm4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9mdW5jdGlvbnMpKSB7XG4gICAgICBmbi5hZGRQZXJtaXNzaW9uKCdSZXN0QXBpSW52b2tlJywge1xuICAgICAgICBwcmluY2lwYWw6IG5ldyBhd3NfaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb24nLFxuICAgICAgICBzb3VyY2VBcm46IHRoaXMuYXBpLmFybkZvckV4ZWN1dGVBcGkoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjdXN0b21Eb21haW5OYW1lICYmIHRoaXMuYXBpLmRvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5BUmVjb3JkKHRoaXMsICdEbnNSZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbk5hbWUuZG9tYWluTmFtZSxcbiAgICAgICAgdGFyZ2V0OiBhd3Nfcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyBhd3Nfcm91dGU1M190YXJnZXRzLkFwaUdhdGV3YXlEb21haW4odGhpcy5hcGkuZG9tYWluTmFtZSksXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbnVwU3BlYyhzcGVjOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgT2JqZWN0LmVudHJpZXMoc3BlYykuZm9yRWFjaCgoW3Byb3AsIHZhbHVlXTogW3N0cmluZywgYW55XSkgPT4ge1xuICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aCgneC0nKSkge1xuICAgICAgICBkZWxldGUgc3BlY1twcm9wXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLmNsZWFudXBTcGVjKHNwZWNbcHJvcF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNwZWM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBnZW5lcmF0ZWQgTGFtYmRhIGZ1bmN0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEFQSSBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbihvcGVyYXRpb25JZDoga2V5b2YgT1BTKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbb3BlcmF0aW9uSWQgYXMgc3RyaW5nXTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gYSBsaXN0IG9mIGFsbCBnZW5lcmF0ZWQgTGFtYmRhIGZ1bmN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9ucygpOiBMYW1iZGFGdW5jdGlvbltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9mdW5jdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0b3IgbWV0aG9kIHRvIG1vZGlmeSB0aGUgZ2l2ZW4gZnVuY3Rpb25zXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb25JZHMgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHZpc2l0XG4gICAqIEBwYXJhbSBvcCB0aGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZXZlcnkgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBtb2RpZnlPcGVyYXRpb25GdW5jdGlvbnMob3BlcmF0aW9uSWRzOiAoa2V5b2YgT1BTKVtdLCBvcDogKGZuOiBMYW1iZGFGdW5jdGlvbikgPT4gdm9pZCkge1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uSWQgb2Ygb3BlcmF0aW9uSWRzKSB7XG4gICAgICBvcCh0aGlzLmdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKG9wZXJhdGlvbklkKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFJlc3RSZXNvdXJjZTxQIGV4dGVuZHMga2V5b2YgUEFUSFM+KHBhdGg6IFAsIG1ldGhvZDoga2V5b2YgUEFUSFNbUF0pIHtcbiAgICBjb25zdCBvYVBhdGggPSB0aGlzLmFwaVNwZWMucGF0aHMhW3BhdGggYXMgc3RyaW5nXSBhcyBQYXRoSXRlbU9iamVjdDtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBvYVBhdGhbbWV0aG9kIGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSBhcyBPcGVyYXRpb25PYmplY3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBvcGVyYXRpb24ub3BlcmF0aW9uSWQhO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYCR7bWV0aG9kIGFzIHN0cmluZ30gJHtwYXRoIGFzIHN0cmluZ30gLSAke29wZXJhdGlvbi5zdW1tYXJ5fWA7XG5cbiAgICBjb25zdCBjdXN0b21MYW1iZGFPcHRpb25zID0gdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zQnlPcGVyYXRpb24gPyB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbltvcGVyYXRpb25JZCBhcyBrZXlvZiBPUFNdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVJlc3RSZXNvdXJjZShvcGVyYXRpb24sIG1ldGhvZCBhcyBzdHJpbmcsIGRlc2NyaXB0aW9uLCBjdXN0b21MYW1iZGFPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDdXN0b21SZXN0UmVzb3VyY2Uob3BlcmF0aW9uOiBPcGVyYXRpb25PYmplY3QsIG1ldGhvZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBhZGRpdGlvbmFsTGFtYmRhT3B0aW9uczogTGFtYmRhT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJyBpbiBvcGVyYXRpb24pIHtcbiAgICAgIHJldHVybjsgLy8gU2tpcCBpZiBvcGVyYXRpb24gd2FzIGRlY2xhcmVkIGluIHNwZWMgZmlsZSBhbHJlYWR5IVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvcmVzdC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS4ke29wZXJhdGlvbi5vcGVyYXRpb25JZH0udHNgO1xuXG4gICAgY29uc3QgbGFtYmRhT3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyAmJiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICAuLi5hZGRpdGlvbmFsTGFtYmRhT3B0aW9ucyxcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uICYmICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uLmhhc093blByb3BlcnR5KCd1c2VycG9vbCcpXG4gICAgICA/IHsgdXNlclBvb2w6ICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElDb2duaXRvQXV0aGVudGljYXRpb24pLnVzZXJwb29sIH1cbiAgICAgIDogeyBqd3Q6IHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgSUp3dEF1dGhlbnRpY2F0aW9uIH0pO1xuXG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgYEZuJHtvcGVyYXRpb24ub3BlcmF0aW9uSWR9YCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5kb21haW5OYW1lICYmIHtcbiAgICAgICAgICBET01BSU5fTkFNRTogdGhpcy5wcm9wcy5kb21haW5OYW1lLFxuICAgICAgICB9LFxuICAgICAgICAuLi50aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAuLi5hdXRoZW50aWNhdGlvbixcbiAgICAgIC4uLnRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUgJiYge1xuICAgICAgICB0YWJsZTogdGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZS50YWJsZSxcbiAgICAgICAgdGFibGVXcml0ZXM6IHRoaXMudGFibGVXcml0ZUFjY2Vzc0Zvck1ldGhvZChtZXRob2QpLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXNzZXRDZG4gJiYge1xuICAgICAgICBhc3NldERvbWFpbk5hbWU6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXREb21haW5OYW1lLFxuICAgICAgICBhc3NldEJ1Y2tldDogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldEJ1Y2tldCxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb24ub3BlcmF0aW9uSWQhXSA9IGZuO1xuICAgIGNkay5UYWdzLm9mKGZuKS5hZGQoJ09wZW5BUEknLCBkZXNjcmlwdGlvbi5yZXBsYWNlKC9bXlxcd1xcc1xcZF8uOi89K1xcLUBdL2csICcnKSk7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgaGFzVmVyc2lvbkNvbmZpZyA9IGxhbWJkYU9wdGlvbnMuY3VycmVudFZlcnNpb25PcHRpb25zICE9IHVuZGVmaW5lZDtcblxuICAgIG9wZXJhdGlvblsneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbiddID0ge1xuICAgICAgdHlwZTogJ2F3c19wcm94eScsXG4gICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmk6IGNkay5TdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICByZXNvdXJjZTogJ3BhdGgnLFxuICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgIGFjY291bnQ6ICdsYW1iZGEnLFxuICAgICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgMjAxNS0wMy0zMS9mdW5jdGlvbnMvJHsoaGFzVmVyc2lvbkNvbmZpZyA/IGZuLmN1cnJlbnRWZXJzaW9uIDogZm4pLmZ1bmN0aW9uQXJufS9pbnZvY2F0aW9uc2AsXG4gICAgICAgIC8vICAgICAgICAgICAgIF5eXl5eXl5eXl4gLSBUSElTIE5FRURTIFRPIEJFIFRISVMgREFURS4gRVhBQ1RMWSFcbiAgICAgIH0pLFxuICAgICAgcGFzc3Rocm91Z2hCZWhhdmlvcjogJ3doZW5fbm9fdGVtcGxhdGVzJyxcbiAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiAnMS4wJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWJsZVdyaXRlQWNjZXNzRm9yTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChtZXRob2QudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgIGNhc2UgJ3Bvc3QnOlxuICAgICAgY2FzZSAncHV0JzpcbiAgICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgIGNhc2UgJ2dldCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQVdTIGRvZXMgbm90IHByb3Blcmx5IGFwcGx5IHRoZSAnc2VjdXJpdHknIG9wdGlvbiB0byBldmVyeSBzaW5nbGUgcGF0aC1tZXRob2QuXG4gICAqIEFjY29yZGluZyB0byBkb2N1bWVudGF0aW9uLCBnbG9iYWwgc2VjdXJpdHkgZ2V0cyBhcHBsaWVkLCBpZiB0aGVyZSBpcyBubyBzZWN1cml0eVxuICAgKiBzZXQgZm9yIHRoZSBwYXJ0aWN1bGFyIHBhdGgtbWV0aG9kLiBJZiB0aGVyZSBpcyBhbnksIGV2ZW4gZW1wdHksIGl0IHdpbGwgZ2V0IHByZWNlZGVuY2UuXG4gICAqIFRISVMgRE9FUyBOT1QgSEFQUEVOIE9OIEFXUy4gSVQgSlVTVCBBTFdBWVMgVVNFUyBUSEUgR0xPQkFMIFNFVFRJTkchXG4gICAqXG4gICAqICdzZWN1cml0eSBhcHBsaWVzIFsuLi5dIHNjaGVtZXMgZ2xvYmFsbHkgdG8gYWxsIEFQSSBvcGVyYXRpb25zLCB1bmxlc3Mgb3ZlcnJpZGRlbiBvbiB0aGUgb3BlcmF0aW9uIGxldmVsJ1xuICAgKiBAc2VlIGh0dHBzOi8vc3dhZ2dlci5pby9kb2NzL3NwZWNpZmljYXRpb24vYXV0aGVudGljYXRpb24vXG4gICAqL1xuICBwcm90ZWN0ZWQgcGF0Y2hTZWN1cml0eShzcGVjOiBPcGVuQVBJMykge1xuICAgIGlmICgnc2VjdXJpdHknIGluIHNwZWMpIHtcbiAgICAgIGZvciAoY29uc3Qgc3BlY1BhdGggb2YgT2JqZWN0LnZhbHVlcyhzcGVjLnBhdGhzIHx8IFtdKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjUGF0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLT4gVGhlcmUgaXMgYSB3cm9uZyBkZWZpbml0aW9uIGZvciBtZXRob2QgaW5jbHVkZXMhIEl0IGFsbG93cyBhbnkgdmFsdWUgdG8gYmUgZ2l2ZW4hXG4gICAgICAgICAgaWYgKCF0aGlzLmFwaU1ldGhvZHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgaWYgbm90IGh0dHAgbWV0aG9kIGRlZmluaXRpb25cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzcGVjTWV0aG9kID0gKHNwZWNQYXRoIGFzIFBhdGhJdGVtT2JqZWN0KVtrZXkgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdITtcbiAgICAgICAgICBpZiAoISgnc2VjdXJpdHknIGluIHNwZWNNZXRob2QpKSB7XG4gICAgICAgICAgICBzcGVjTWV0aG9kLnNlY3VyaXR5ID0gc3BlYy5zZWN1cml0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBzcGVjLnNlY3VyaXR5O1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
|