UNPKG

vscode-debugprotocol

Version:

Npm module with declarations for the Visual Studio Code debug protocol

7 lines 160 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdQcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWJ1Z1Byb3RvY29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Z0dBR2dHO0FBRWhHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKiBEZWNsYXJhdGlvbiBtb2R1bGUgZGVzY3JpYmluZyB0aGUgVlMgQ29kZSBkZWJ1ZyBwcm90b2NvbC5cblx0QXV0by1nZW5lcmF0ZWQgZnJvbSBqc29uIHNjaGVtYS4gRG8gbm90IGVkaXQgbWFudWFsbHkuXG4qL1xuZXhwb3J0IG1vZHVsZSBEZWJ1Z1Byb3RvY29sIHtcblxuXHQvKiogQmFzZSBjbGFzcyBvZiByZXF1ZXN0cywgcmVzcG9uc2VzLCBhbmQgZXZlbnRzLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFByb3RvY29sTWVzc2FnZSB7XG5cdFx0LyoqIFNlcXVlbmNlIG51bWJlciAoYWxzbyBrbm93biBhcyBtZXNzYWdlIElEKS4gRm9yIHByb3RvY29sIG1lc3NhZ2VzIG9mIHR5cGUgJ3JlcXVlc3QnIHRoaXMgSUQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LiAqL1xuXHRcdHNlcTogbnVtYmVyO1xuXHRcdC8qKiBNZXNzYWdlIHR5cGUuXG5cdFx0XHRWYWx1ZXM6ICdyZXF1ZXN0JywgJ3Jlc3BvbnNlJywgJ2V2ZW50JywgZXRjLlxuXHRcdCovXG5cdFx0dHlwZTogJ3JlcXVlc3QnIHwgJ3Jlc3BvbnNlJyB8ICdldmVudCcgfCBzdHJpbmc7XG5cdH1cblxuXHQvKiogQSBjbGllbnQgb3IgZGVidWcgYWRhcHRlciBpbml0aWF0ZWQgcmVxdWVzdC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0IGV4dGVuZHMgUHJvdG9jb2xNZXNzYWdlIHtcblx0XHQvLyB0eXBlOiAncmVxdWVzdCc7XG5cdFx0LyoqIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuICovXG5cdFx0Y29tbWFuZDogc3RyaW5nO1xuXHRcdC8qKiBPYmplY3QgY29udGFpbmluZyBhcmd1bWVudHMgZm9yIHRoZSBjb21tYW5kLiAqL1xuXHRcdGFyZ3VtZW50cz86IGFueTtcblx0fVxuXG5cdC8qKiBBIGRlYnVnIGFkYXB0ZXIgaW5pdGlhdGVkIGV2ZW50LiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEV2ZW50IGV4dGVuZHMgUHJvdG9jb2xNZXNzYWdlIHtcblx0XHQvLyB0eXBlOiAnZXZlbnQnO1xuXHRcdC8qKiBUeXBlIG9mIGV2ZW50LiAqL1xuXHRcdGV2ZW50OiBzdHJpbmc7XG5cdFx0LyoqIEV2ZW50LXNwZWNpZmljIGluZm9ybWF0aW9uLiAqL1xuXHRcdGJvZHk/OiBhbnk7XG5cdH1cblxuXHQvKiogUmVzcG9uc2UgZm9yIGEgcmVxdWVzdC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZSBleHRlbmRzIFByb3RvY29sTWVzc2FnZSB7XG5cdFx0Ly8gdHlwZTogJ3Jlc3BvbnNlJztcblx0XHQvKiogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QuICovXG5cdFx0cmVxdWVzdF9zZXE6IG51bWJlcjtcblx0XHQvKiogT3V0Y29tZSBvZiB0aGUgcmVxdWVzdC5cblx0XHRcdElmIHRydWUsIHRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsIGFuZCB0aGUgJ2JvZHknIGF0dHJpYnV0ZSBtYXkgY29udGFpbiB0aGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0LlxuXHRcdFx0SWYgdGhlIHZhbHVlIGlzIGZhbHNlLCB0aGUgYXR0cmlidXRlICdtZXNzYWdlJyBjb250YWlucyB0aGUgZXJyb3IgaW4gc2hvcnQgZm9ybSBhbmQgdGhlICdib2R5JyBtYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIChzZWUgJ0Vycm9yUmVzcG9uc2UuYm9keS5lcnJvcicpLlxuXHRcdCovXG5cdFx0c3VjY2VzczogYm9vbGVhbjtcblx0XHQvKiogVGhlIGNvbW1hbmQgcmVxdWVzdGVkLiAqL1xuXHRcdGNvbW1hbmQ6IHN0cmluZztcblx0XHQvKiogQ29udGFpbnMgdGhlIHJhdyBlcnJvciBpbiBzaG9ydCBmb3JtIGlmICdzdWNjZXNzJyBpcyBmYWxzZS5cblx0XHRcdFRoaXMgcmF3IGVycm9yIG1pZ2h0IGJlIGludGVycHJldGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQgaXMgbm90IHNob3duIGluIHRoZSBVSS5cblx0XHRcdFNvbWUgcHJlZGVmaW5lZCB2YWx1ZXMgZXhpc3QuXG5cdFx0XHRWYWx1ZXM6IFxuXHRcdFx0J2NhbmNlbGxlZCc6IHJlcXVlc3Qgd2FzIGNhbmNlbGxlZC5cblx0XHRcdGV0Yy5cblx0XHQqL1xuXHRcdG1lc3NhZ2U/OiAnY2FuY2VsbGVkJyB8IHN0cmluZztcblx0XHQvKiogQ29udGFpbnMgcmVxdWVzdCByZXN1bHQgaWYgc3VjY2VzcyBpcyB0cnVlIGFuZCBvcHRpb25hbCBlcnJvciBkZXRhaWxzIGlmIHN1Y2Nlc3MgaXMgZmFsc2UuICovXG5cdFx0Ym9keT86IGFueTtcblx0fVxuXG5cdC8qKiBPbiBlcnJvciAod2hlbmV2ZXIgJ3N1Y2Nlc3MnIGlzIGZhbHNlKSwgdGhlIGJvZHkgY2FuIHByb3ZpZGUgbW9yZSBkZXRhaWxzLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIEFuIG9wdGlvbmFsLCBzdHJ1Y3R1cmVkIGVycm9yIG1lc3NhZ2UuICovXG5cdFx0XHRlcnJvcj86IE1lc3NhZ2U7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBDYW5jZWwgcmVxdWVzdDsgdmFsdWUgb2YgY29tbWFuZCBmaWVsZCBpcyAnY2FuY2VsJy5cblx0XHRUaGUgJ2NhbmNlbCcgcmVxdWVzdCBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZCBpbiB0d28gc2l0dWF0aW9uczpcblx0XHQtIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gdGhlIHJlc3VsdCBwcm9kdWNlZCBieSBhIHNwZWNpZmljIHJlcXVlc3QgaXNzdWVkIGVhcmxpZXJcblx0XHQtIHRvIGNhbmNlbCBhIHByb2dyZXNzIHNlcXVlbmNlLiBDbGllbnRzIHNob3VsZCBvbmx5IGNhbGwgdGhpcyByZXF1ZXN0IGlmIHRoZSBjYXBhYmlsaXR5ICdzdXBwb3J0c0NhbmNlbFJlcXVlc3QnIGlzIHRydWUuXG5cdFx0VGhpcyByZXF1ZXN0IGhhcyBhIGhpbnQgY2hhcmFjdGVyaXN0aWM6IGEgZGVidWcgYWRhcHRlciBjYW4gb25seSBiZSBleHBlY3RlZCB0byBtYWtlIGEgJ2Jlc3QgZWZmb3J0JyBpbiBob25vdXJpbmcgdGhpcyByZXF1ZXN0IGJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cblx0XHRUaGUgJ2NhbmNlbCcgcmVxdWVzdCBtYXkgcmV0dXJuIGFuIGVycm9yIGlmIGl0IGNvdWxkIG5vdCBjYW5jZWwgYW4gb3BlcmF0aW9uIGJ1dCBhIGZyb250ZW5kIHNob3VsZCByZWZyYWluIGZyb20gcHJlc2VudGluZyB0aGlzIGVycm9yIHRvIGVuZCB1c2Vycy5cblx0XHRBIGZyb250ZW5kIGNsaWVudCBzaG91bGQgb25seSBjYWxsIHRoaXMgcmVxdWVzdCBpZiB0aGUgY2FwYWJpbGl0eSAnc3VwcG9ydHNDYW5jZWxSZXF1ZXN0JyBpcyB0cnVlLlxuXHRcdFRoZSByZXF1ZXN0IHRoYXQgZ290IGNhbmNlbGVkIHN0aWxsIG5lZWRzIHRvIHNlbmQgYSByZXNwb25zZSBiYWNrLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSBub3JtYWwgcmVzdWx0ICgnc3VjY2VzcycgYXR0cmlidXRlIHRydWUpXG5cdFx0b3IgYW4gZXJyb3IgcmVzcG9uc2UgKCdzdWNjZXNzJyBhdHRyaWJ1dGUgZmFsc2UgYW5kIHRoZSAnbWVzc2FnZScgc2V0IHRvICdjYW5jZWxsZWQnKS5cblx0XHRSZXR1cm5pbmcgcGFydGlhbCByZXN1bHRzIGZyb20gYSBjYW5jZWxsZWQgcmVxdWVzdCBpcyBwb3NzaWJsZSBidXQgcGxlYXNlIG5vdGUgdGhhdCBhIGZyb250ZW5kIGNsaWVudCBoYXMgbm8gZ2VuZXJpYyB3YXkgZm9yIGRldGVjdGluZyB0aGF0IGEgcmVzcG9uc2UgaXMgcGFydGlhbCBvciBub3QuXG5cdFx0IFRoZSBwcm9ncmVzcyB0aGF0IGdvdCBjYW5jZWxsZWQgc3RpbGwgbmVlZHMgdG8gc2VuZCBhICdwcm9ncmVzc0VuZCcgZXZlbnQgYmFjay5cblx0XHQgQSBjbGllbnQgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCBwcm9ncmVzcyBqdXN0IGdvdCBjYW5jZWxsZWQgYWZ0ZXIgc2VuZGluZyB0aGUgJ2NhbmNlbCcgcmVxdWVzdC5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBDYW5jZWxSZXF1ZXN0IGV4dGVuZHMgUmVxdWVzdCB7XG5cdFx0Ly8gY29tbWFuZDogJ2NhbmNlbCc7XG5cdFx0YXJndW1lbnRzPzogQ2FuY2VsQXJndW1lbnRzO1xuXHR9XG5cblx0LyoqIEFyZ3VtZW50cyBmb3IgJ2NhbmNlbCcgcmVxdWVzdC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDYW5jZWxBcmd1bWVudHMge1xuXHRcdC8qKiBUaGUgSUQgKGF0dHJpYnV0ZSAnc2VxJykgb2YgdGhlIHJlcXVlc3QgdG8gY2FuY2VsLiBJZiBtaXNzaW5nIG5vIHJlcXVlc3QgaXMgY2FuY2VsbGVkLlxuXHRcdFx0Qm90aCBhICdyZXF1ZXN0SWQnIGFuZCBhICdwcm9ncmVzc0lkJyBjYW4gYmUgc3BlY2lmaWVkIGluIG9uZSByZXF1ZXN0LlxuXHRcdCovXG5cdFx0cmVxdWVzdElkPzogbnVtYmVyO1xuXHRcdC8qKiBUaGUgSUQgKGF0dHJpYnV0ZSAncHJvZ3Jlc3NJZCcpIG9mIHRoZSBwcm9ncmVzcyB0byBjYW5jZWwuIElmIG1pc3Npbmcgbm8gcHJvZ3Jlc3MgaXMgY2FuY2VsbGVkLlxuXHRcdFx0Qm90aCBhICdyZXF1ZXN0SWQnIGFuZCBhICdwcm9ncmVzc0lkJyBjYW4gYmUgc3BlY2lmaWVkIGluIG9uZSByZXF1ZXN0LlxuXHRcdCovXG5cdFx0cHJvZ3Jlc3NJZD86IHN0cmluZztcblx0fVxuXG5cdC8qKiBSZXNwb25zZSB0byAnY2FuY2VsJyByZXF1ZXN0LiBUaGlzIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50LCBzbyBubyBib2R5IGZpZWxkIGlzIHJlcXVpcmVkLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENhbmNlbFJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdpbml0aWFsaXplZCcgZXZlbnQgdHlwZS5cblx0XHRUaGlzIGV2ZW50IGluZGljYXRlcyB0aGF0IHRoZSBkZWJ1ZyBhZGFwdGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIHJlcXVlc3RzIChlLmcuIFNldEJyZWFrcG9pbnRzUmVxdWVzdCwgU2V0RXhjZXB0aW9uQnJlYWtwb2ludHNSZXF1ZXN0KS5cblx0XHRBIGRlYnVnIGFkYXB0ZXIgaXMgZXhwZWN0ZWQgdG8gc2VuZCB0aGlzIGV2ZW50IHdoZW4gaXQgaXMgcmVhZHkgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgKGJ1dCBub3QgYmVmb3JlIHRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdCBoYXMgZmluaXNoZWQpLlxuXHRcdFRoZSBzZXF1ZW5jZSBvZiBldmVudHMvcmVxdWVzdHMgaXMgYXMgZm9sbG93czpcblx0XHQtIGFkYXB0ZXJzIHNlbmRzICdpbml0aWFsaXplZCcgZXZlbnQgKGFmdGVyIHRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdCBoYXMgcmV0dXJuZWQpXG5cdFx0LSBmcm9udGVuZCBzZW5kcyB6ZXJvIG9yIG1vcmUgJ3NldEJyZWFrcG9pbnRzJyByZXF1ZXN0c1xuXHRcdC0gZnJvbnRlbmQgc2VuZHMgb25lICdzZXRGdW5jdGlvbkJyZWFrcG9pbnRzJyByZXF1ZXN0IChpZiBjYXBhYmlsaXR5ICdzdXBwb3J0c0Z1bmN0aW9uQnJlYWtwb2ludHMnIGlzIHRydWUpXG5cdFx0LSBmcm9udGVuZCBzZW5kcyBhICdzZXRFeGNlcHRpb25CcmVha3BvaW50cycgcmVxdWVzdCBpZiBvbmUgb3IgbW9yZSAnZXhjZXB0aW9uQnJlYWtwb2ludEZpbHRlcnMnIGhhdmUgYmVlbiBkZWZpbmVkIChvciBpZiAnc3VwcG9ydHNDb25maWd1cmF0aW9uRG9uZVJlcXVlc3QnIGlzIG5vdCBkZWZpbmVkIG9yIGZhbHNlKVxuXHRcdC0gZnJvbnRlbmQgc2VuZHMgb3RoZXIgZnV0dXJlIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHNcblx0XHQtIGZyb250ZW5kIHNlbmRzIG9uZSAnY29uZmlndXJhdGlvbkRvbmUnIHJlcXVlc3QgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJhdGlvbi5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplZEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuXHRcdC8vIGV2ZW50OiAnaW5pdGlhbGl6ZWQnO1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdzdG9wcGVkJyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBkZWJ1Z2dlZSBoYXMgc3RvcHBlZCBkdWUgdG8gc29tZSBjb25kaXRpb24uXG5cdFx0VGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgYnJlYWsgcG9pbnQgcHJldmlvdXNseSBzZXQsIGEgc3RlcHBpbmcgcmVxdWVzdCBoYXMgY29tcGxldGVkLCBieSBleGVjdXRpbmcgYSBkZWJ1Z2dlciBzdGF0ZW1lbnQgZXRjLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFN0b3BwZWRFdmVudCBleHRlbmRzIEV2ZW50IHtcblx0XHQvLyBldmVudDogJ3N0b3BwZWQnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgcmVhc29uIGZvciB0aGUgZXZlbnQuXG5cdFx0XHRcdEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHRoaXMgc3RyaW5nIGlzIHNob3duIGluIHRoZSBVSSBpZiB0aGUgJ2Rlc2NyaXB0aW9uJyBhdHRyaWJ1dGUgaXMgbWlzc2luZyAoYnV0IGl0IG11c3Qgbm90IGJlIHRyYW5zbGF0ZWQpLlxuXHRcdFx0XHRWYWx1ZXM6ICdzdGVwJywgJ2JyZWFrcG9pbnQnLCAnZXhjZXB0aW9uJywgJ3BhdXNlJywgJ2VudHJ5JywgJ2dvdG8nLCAnZnVuY3Rpb24gYnJlYWtwb2ludCcsICdkYXRhIGJyZWFrcG9pbnQnLCAnaW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCcsIGV0Yy5cblx0XHRcdCovXG5cdFx0XHRyZWFzb246ICdzdGVwJyB8ICdicmVha3BvaW50JyB8ICdleGNlcHRpb24nIHwgJ3BhdXNlJyB8ICdlbnRyeScgfCAnZ290bycgfCAnZnVuY3Rpb24gYnJlYWtwb2ludCcgfCAnZGF0YSBicmVha3BvaW50JyB8ICdpbnN0cnVjdGlvbiBicmVha3BvaW50JyB8IHN0cmluZztcblx0XHRcdC8qKiBUaGUgZnVsbCByZWFzb24gZm9yIHRoZSBldmVudCwgZS5nLiAnUGF1c2VkIG9uIGV4Y2VwdGlvbicuIFRoaXMgc3RyaW5nIGlzIHNob3duIGluIHRoZSBVSSBhcyBpcyBhbmQgbXVzdCBiZSB0cmFuc2xhdGVkLiAqL1xuXHRcdFx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdFx0XHQvKiogVGhlIHRocmVhZCB3aGljaCB3YXMgc3RvcHBlZC4gKi9cblx0XHRcdHRocmVhZElkPzogbnVtYmVyO1xuXHRcdFx0LyoqIEEgdmFsdWUgb2YgdHJ1ZSBoaW50cyB0byB0aGUgZnJvbnRlbmQgdGhhdCB0aGlzIGV2ZW50IHNob3VsZCBub3QgY2hhbmdlIHRoZSBmb2N1cy4gKi9cblx0XHRcdHByZXNlcnZlRm9jdXNIaW50PzogYm9vbGVhbjtcblx0XHRcdC8qKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uLiBFLmcuIGlmIHJlYXNvbiBpcyAnZXhjZXB0aW9uJywgdGV4dCBjb250YWlucyB0aGUgZXhjZXB0aW9uIG5hbWUuIFRoaXMgc3RyaW5nIGlzIHNob3duIGluIHRoZSBVSS4gKi9cblx0XHRcdHRleHQ/OiBzdHJpbmc7XG5cdFx0XHQvKiogSWYgJ2FsbFRocmVhZHNTdG9wcGVkJyBpcyB0cnVlLCBhIGRlYnVnIGFkYXB0ZXIgY2FuIGFubm91bmNlIHRoYXQgYWxsIHRocmVhZHMgaGF2ZSBzdG9wcGVkLlxuXHRcdFx0XHQtIFRoZSBjbGllbnQgc2hvdWxkIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGVuYWJsZSB0aGF0IGFsbCB0aHJlYWRzIGNhbiBiZSBleHBhbmRlZCB0byBhY2Nlc3MgdGhlaXIgc3RhY2t0cmFjZXMuXG5cdFx0XHRcdC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBtaXNzaW5nIG9yIGZhbHNlLCBvbmx5IHRoZSB0aHJlYWQgd2l0aCB0aGUgZ2l2ZW4gdGhyZWFkSWQgY2FuIGJlIGV4cGFuZGVkLlxuXHRcdFx0Ki9cblx0XHRcdGFsbFRocmVhZHNTdG9wcGVkPzogYm9vbGVhbjtcblx0XHRcdC8qKiBJZHMgb2YgdGhlIGJyZWFrcG9pbnRzIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4gSW4gbW9zdCBjYXNlcyB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgYnJlYWtwb2ludCBidXQgaGVyZSBhcmUgc29tZSBleGFtcGxlcyBmb3IgbXVsdGlwbGUgYnJlYWtwb2ludHM6XG5cdFx0XHRcdC0gRGlmZmVyZW50IHR5cGVzIG9mIGJyZWFrcG9pbnRzIG1hcCB0byB0aGUgc2FtZSBsb2NhdGlvbi5cblx0XHRcdFx0LSBNdWx0aXBsZSBzb3VyY2UgYnJlYWtwb2ludHMgZ2V0IGNvbGxhcHNlZCB0byB0aGUgc2FtZSBpbnN0cnVjdGlvbiBieSB0aGUgY29tcGlsZXIvcnVudGltZS5cblx0XHRcdFx0LSBNdWx0aXBsZSBmdW5jdGlvbiBicmVha3BvaW50cyB3aXRoIGRpZmZlcmVudCBmdW5jdGlvbiBuYW1lcyBtYXAgdG8gdGhlIHNhbWUgbG9jYXRpb24uXG5cdFx0XHQqL1xuXHRcdFx0aGl0QnJlYWtwb2ludElkcz86IG51bWJlcltdO1xuXHRcdH07XG5cdH1cblxuXHQvKiogRXZlbnQgbWVzc2FnZSBmb3IgJ2NvbnRpbnVlZCcgZXZlbnQgdHlwZS5cblx0XHRUaGUgZXZlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZGVidWdnZWUgaGFzIGNvbnRpbnVlZC5cblx0XHRQbGVhc2Ugbm90ZTogYSBkZWJ1ZyBhZGFwdGVyIGlzIG5vdCBleHBlY3RlZCB0byBzZW5kIHRoaXMgZXZlbnQgaW4gcmVzcG9uc2UgdG8gYSByZXF1ZXN0IHRoYXQgaW1wbGllcyB0aGF0IGV4ZWN1dGlvbiBjb250aW51ZXMsIGUuZy4gJ2xhdW5jaCcgb3IgJ2NvbnRpbnVlJy5cblx0XHRJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzZW5kIGEgJ2NvbnRpbnVlZCcgZXZlbnQgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHJlcXVlc3QgdGhhdCBpbXBsaWVkIHRoaXMuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQ29udGludWVkRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdjb250aW51ZWQnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgdGhyZWFkIHdoaWNoIHdhcyBjb250aW51ZWQuICovXG5cdFx0XHR0aHJlYWRJZDogbnVtYmVyO1xuXHRcdFx0LyoqIElmICdhbGxUaHJlYWRzQ29udGludWVkJyBpcyB0cnVlLCBhIGRlYnVnIGFkYXB0ZXIgY2FuIGFubm91bmNlIHRoYXQgYWxsIHRocmVhZHMgaGF2ZSBjb250aW51ZWQuICovXG5cdFx0XHRhbGxUaHJlYWRzQ29udGludWVkPzogYm9vbGVhbjtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdleGl0ZWQnIGV2ZW50IHR5cGUuXG5cdFx0VGhlIGV2ZW50IGluZGljYXRlcyB0aGF0IHRoZSBkZWJ1Z2dlZSBoYXMgZXhpdGVkIGFuZCByZXR1cm5zIGl0cyBleGl0IGNvZGUuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRXhpdGVkRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdleGl0ZWQnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgZXhpdCBjb2RlIHJldHVybmVkIGZyb20gdGhlIGRlYnVnZ2VlLiAqL1xuXHRcdFx0ZXhpdENvZGU6IG51bWJlcjtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICd0ZXJtaW5hdGVkJyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBpbmRpY2F0ZXMgdGhhdCBkZWJ1Z2dpbmcgb2YgdGhlIGRlYnVnZ2VlIGhhcyB0ZXJtaW5hdGVkLiBUaGlzIGRvZXMgKipub3QqKiBtZWFuIHRoYXQgdGhlIGRlYnVnZ2VlIGl0c2VsZiBoYXMgZXhpdGVkLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZWRFdmVudCBleHRlbmRzIEV2ZW50IHtcblx0XHQvLyBldmVudDogJ3Rlcm1pbmF0ZWQnO1xuXHRcdGJvZHk/OiB7XG5cdFx0XHQvKiogQSBkZWJ1ZyBhZGFwdGVyIG1heSBzZXQgJ3Jlc3RhcnQnIHRvIHRydWUgKG9yIHRvIGFuIGFyYml0cmFyeSBvYmplY3QpIHRvIHJlcXVlc3QgdGhhdCB0aGUgZnJvbnQgZW5kIHJlc3RhcnRzIHRoZSBzZXNzaW9uLlxuXHRcdFx0XHRUaGUgdmFsdWUgaXMgbm90IGludGVycHJldGVkIGJ5IHRoZSBjbGllbnQgYW5kIHBhc3NlZCB1bm1vZGlmaWVkIGFzIGFuIGF0dHJpYnV0ZSAnX19yZXN0YXJ0JyB0byB0aGUgJ2xhdW5jaCcgYW5kICdhdHRhY2gnIHJlcXVlc3RzLlxuXHRcdFx0Ki9cblx0XHRcdHJlc3RhcnQ/OiBhbnk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAndGhyZWFkJyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBpbmRpY2F0ZXMgdGhhdCBhIHRocmVhZCBoYXMgc3RhcnRlZCBvciBleGl0ZWQuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICd0aHJlYWQnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgcmVhc29uIGZvciB0aGUgZXZlbnQuXG5cdFx0XHRcdFZhbHVlczogJ3N0YXJ0ZWQnLCAnZXhpdGVkJywgZXRjLlxuXHRcdFx0Ki9cblx0XHRcdHJlYXNvbjogJ3N0YXJ0ZWQnIHwgJ2V4aXRlZCcgfCBzdHJpbmc7XG5cdFx0XHQvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHRocmVhZC4gKi9cblx0XHRcdHRocmVhZElkOiBudW1iZXI7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAnb3V0cHV0JyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IGhhcyBwcm9kdWNlZCBzb21lIG91dHB1dC5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBPdXRwdXRFdmVudCBleHRlbmRzIEV2ZW50IHtcblx0XHQvLyBldmVudDogJ291dHB1dCc7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIFRoZSBvdXRwdXQgY2F0ZWdvcnkuIElmIG5vdCBzcGVjaWZpZWQgb3IgaWYgdGhlIGNhdGVnb3J5IGlzIG5vdCB1bmRlcnN0YW5kIGJ5IHRoZSBjbGllbnQsICdjb25zb2xlJyBpcyBhc3N1bWVkLlxuXHRcdFx0XHRWYWx1ZXM6IFxuXHRcdFx0XHQnY29uc29sZSc6IFNob3cgdGhlIG91dHB1dCBpbiB0aGUgY2xpZW50J3MgZGVmYXVsdCBtZXNzYWdlIFVJLCBlLmcuIGEgJ2RlYnVnIGNvbnNvbGUnLiBUaGlzIGNhdGVnb3J5IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGluZm9ybWF0aW9uYWwgb3V0cHV0IGZyb20gdGhlIGRlYnVnZ2VyIChhcyBvcHBvc2VkIHRvIHRoZSBkZWJ1Z2dlZSkuXG5cdFx0XHRcdCdpbXBvcnRhbnQnOiBBIGhpbnQgZm9yIHRoZSBjbGllbnQgdG8gc2hvdyB0aGUgb3VwdXQgaW4gdGhlIGNsaWVudCdzIFVJIGZvciBpbXBvcnRhbnQgYW5kIGhpZ2hseSB2aXNpYmxlIGluZm9ybWF0aW9uLCBlLmcuIGFzIGEgcG9wdXAgbm90aWZpY2F0aW9uLiBUaGlzIGNhdGVnb3J5IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGltcG9ydGFudCBtZXNzYWdlcyBmcm9tIHRoZSBkZWJ1Z2dlciAoYXMgb3Bwb3NlZCB0byB0aGUgZGVidWdnZWUpLiBTaW5jZSB0aGlzIGNhdGVnb3J5IHZhbHVlIGlzIGEgaGludCwgY2xpZW50cyBtaWdodCBpZ25vcmUgdGhlIGhpbnQgYW5kIGFzc3VtZSB0aGUgJ2NvbnNvbGUnIGNhdGVnb3J5LlxuXHRcdFx0XHQnc3Rkb3V0JzogU2hvdyB0aGUgb3V0cHV0IGFzIG5vcm1hbCBwcm9ncmFtIG91dHB1dCBmcm9tIHRoZSBkZWJ1Z2dlZS5cblx0XHRcdFx0J3N0ZGVycic6IFNob3cgdGhlIG91dHB1dCBhcyBlcnJvciBwcm9ncmFtIG91dHB1dCBmcm9tIHRoZSBkZWJ1Z2dlZS5cblx0XHRcdFx0J3RlbGVtZXRyeSc6IFNlbmQgdGhlIG91dHB1dCB0byB0ZWxlbWV0cnkgaW5zdGVhZCBvZiBzaG93aW5nIGl0IHRvIHRoZSB1c2VyLlxuXHRcdFx0XHRldGMuXG5cdFx0XHQqL1xuXHRcdFx0Y2F0ZWdvcnk/OiAnY29uc29sZScgfCAnaW1wb3J0YW50JyB8ICdzdGRvdXQnIHwgJ3N0ZGVycicgfCAndGVsZW1ldHJ5JyB8IHN0cmluZztcblx0XHRcdC8qKiBUaGUgb3V0cHV0IHRvIHJlcG9ydC4gKi9cblx0XHRcdG91dHB1dDogc3RyaW5nO1xuXHRcdFx0LyoqIFN1cHBvcnQgZm9yIGtlZXBpbmcgYW4gb3V0cHV0IGxvZyBvcmdhbml6ZWQgYnkgZ3JvdXBpbmcgcmVsYXRlZCBtZXNzYWdlcy5cblx0XHRcdFx0J3N0YXJ0JzogU3RhcnQgYSBuZXcgZ3JvdXAgaW4gZXhwYW5kZWQgbW9kZS4gU3Vic2VxdWVudCBvdXRwdXQgZXZlbnRzIGFyZSBtZW1iZXJzIG9mIHRoZSBncm91cCBhbmQgc2hvdWxkIGJlIHNob3duIGluZGVudGVkLlxuXHRcdFx0XHRUaGUgJ291dHB1dCcgYXR0cmlidXRlIGJlY29tZXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIGFuZCBpcyBub3QgaW5kZW50ZWQuXG5cdFx0XHRcdCdzdGFydENvbGxhcHNlZCc6IFN0YXJ0IGEgbmV3IGdyb3VwIGluIGNvbGxhcHNlZCBtb2RlLiBTdWJzZXF1ZW50IG91dHB1dCBldmVudHMgYXJlIG1lbWJlcnMgb2YgdGhlIGdyb3VwIGFuZCBzaG91bGQgYmUgc2hvd24gaW5kZW50ZWQgKGFzIHNvb24gYXMgdGhlIGdyb3VwIGlzIGV4cGFuZGVkKS5cblx0XHRcdFx0VGhlICdvdXRwdXQnIGF0dHJpYnV0ZSBiZWNvbWVzIHRoZSBuYW1lIG9mIHRoZSBncm91cCBhbmQgaXMgbm90IGluZGVudGVkLlxuXHRcdFx0XHQnZW5kJzogRW5kIHRoZSBjdXJyZW50IGdyb3VwIGFuZCBkZWNyZWFzZXMgdGhlIGluZGVudGF0aW9uIG9mIHN1YnNlcXVlbnQgb3V0cHV0IGV2ZW50cy5cblx0XHRcdFx0QSBub24gZW1wdHkgJ291dHB1dCcgYXR0cmlidXRlIGlzIHNob3duIGFzIHRoZSB1bmluZGVudGVkIGVuZCBvZiB0aGUgZ3JvdXAuXG5cdFx0XHQqL1xuXHRcdFx0Z3JvdXA/OiAnc3RhcnQnIHwgJ3N0YXJ0Q29sbGFwc2VkJyB8ICdlbmQnO1xuXHRcdFx0LyoqIElmIGFuIGF0dHJpYnV0ZSAndmFyaWFibGVzUmVmZXJlbmNlJyBleGlzdHMgYW5kIGl0cyB2YWx1ZSBpcyA+IDAsIHRoZSBvdXRwdXQgY29udGFpbnMgb2JqZWN0cyB3aGljaCBjYW4gYmUgcmV0cmlldmVkIGJ5IHBhc3NpbmcgJ3ZhcmlhYmxlc1JlZmVyZW5jZScgdG8gdGhlICd2YXJpYWJsZXMnIHJlcXVlc3QuIFRoZSB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIxNDc0ODM2NDcgKDJeMzEtMSkuICovXG5cdFx0XHR2YXJpYWJsZXNSZWZlcmVuY2U/OiBudW1iZXI7XG5cdFx0XHQvKiogQW4gb3B0aW9uYWwgc291cmNlIGxvY2F0aW9uIHdoZXJlIHRoZSBvdXRwdXQgd2FzIHByb2R1Y2VkLiAqL1xuXHRcdFx0c291cmNlPzogU291cmNlO1xuXHRcdFx0LyoqIEFuIG9wdGlvbmFsIHNvdXJjZSBsb2NhdGlvbiBsaW5lIHdoZXJlIHRoZSBvdXRwdXQgd2FzIHByb2R1Y2VkLiAqL1xuXHRcdFx0bGluZT86IG51bWJlcjtcblx0XHRcdC8qKiBBbiBvcHRpb25hbCBzb3VyY2UgbG9jYXRpb24gY29sdW1uIHdoZXJlIHRoZSBvdXRwdXQgd2FzIHByb2R1Y2VkLiAqL1xuXHRcdFx0Y29sdW1uPzogbnVtYmVyO1xuXHRcdFx0LyoqIE9wdGlvbmFsIGRhdGEgdG8gcmVwb3J0LiBGb3IgdGhlICd0ZWxlbWV0cnknIGNhdGVnb3J5IHRoZSBkYXRhIHdpbGwgYmUgc2VudCB0byB0ZWxlbWV0cnksIGZvciB0aGUgb3RoZXIgY2F0ZWdvcmllcyB0aGUgZGF0YSBpcyBzaG93biBpbiBKU09OIGZvcm1hdC4gKi9cblx0XHRcdGRhdGE/OiBhbnk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAnYnJlYWtwb2ludCcgZXZlbnQgdHlwZS5cblx0XHRUaGUgZXZlbnQgaW5kaWNhdGVzIHRoYXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBhIGJyZWFrcG9pbnQgaGFzIGNoYW5nZWQuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuXHRcdC8vIGV2ZW50OiAnYnJlYWtwb2ludCc7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIFRoZSByZWFzb24gZm9yIHRoZSBldmVudC5cblx0XHRcdFx0VmFsdWVzOiAnY2hhbmdlZCcsICduZXcnLCAncmVtb3ZlZCcsIGV0Yy5cblx0XHRcdCovXG5cdFx0XHRyZWFzb246ICdjaGFuZ2VkJyB8ICduZXcnIHwgJ3JlbW92ZWQnIHwgc3RyaW5nO1xuXHRcdFx0LyoqIFRoZSAnaWQnIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIGZpbmQgdGhlIHRhcmdldCBicmVha3BvaW50IGFuZCB0aGUgb3RoZXIgYXR0cmlidXRlcyBhcmUgdXNlZCBhcyB0aGUgbmV3IHZhbHVlcy4gKi9cblx0XHRcdGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnQ7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAnbW9kdWxlJyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBpbmRpY2F0ZXMgdGhhdCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kdWxlIGhhcyBjaGFuZ2VkLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIE1vZHVsZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuXHRcdC8vIGV2ZW50OiAnbW9kdWxlJztcblx0XHRib2R5OiB7XG5cdFx0XHQvKiogVGhlIHJlYXNvbiBmb3IgdGhlIGV2ZW50LiAqL1xuXHRcdFx0cmVhc29uOiAnbmV3JyB8ICdjaGFuZ2VkJyB8ICdyZW1vdmVkJztcblx0XHRcdC8qKiBUaGUgbmV3LCBjaGFuZ2VkLCBvciByZW1vdmVkIG1vZHVsZS4gSW4gY2FzZSBvZiAncmVtb3ZlZCcgb25seSB0aGUgbW9kdWxlIGlkIGlzIHVzZWQuICovXG5cdFx0XHRtb2R1bGU6IE1vZHVsZTtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdsb2FkZWRTb3VyY2UnIGV2ZW50IHR5cGUuXG5cdFx0VGhlIGV2ZW50IGluZGljYXRlcyB0aGF0IHNvbWUgc291cmNlIGhhcyBiZWVuIGFkZGVkLCBjaGFuZ2VkLCBvciByZW1vdmVkIGZyb20gdGhlIHNldCBvZiBhbGwgbG9hZGVkIHNvdXJjZXMuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgTG9hZGVkU291cmNlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdsb2FkZWRTb3VyY2UnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgcmVhc29uIGZvciB0aGUgZXZlbnQuICovXG5cdFx0XHRyZWFzb246ICduZXcnIHwgJ2NoYW5nZWQnIHwgJ3JlbW92ZWQnO1xuXHRcdFx0LyoqIFRoZSBuZXcsIGNoYW5nZWQsIG9yIHJlbW92ZWQgc291cmNlLiAqL1xuXHRcdFx0c291cmNlOiBTb3VyY2U7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAncHJvY2VzcycgZXZlbnQgdHlwZS5cblx0XHRUaGUgZXZlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGRlYnVnZ2VyIGhhcyBiZWd1biBkZWJ1Z2dpbmcgYSBuZXcgcHJvY2Vzcy4gRWl0aGVyIG9uZSB0aGF0IGl0IGhhcyBsYXVuY2hlZCwgb3Igb25lIHRoYXQgaXQgaGFzIGF0dGFjaGVkIHRvLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFdmVudCBleHRlbmRzIEV2ZW50IHtcblx0XHQvLyBldmVudDogJ3Byb2Nlc3MnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgbG9naWNhbCBuYW1lIG9mIHRoZSBwcm9jZXNzLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGZ1bGwgcGF0aCB0byBwcm9jZXNzJ3MgZXhlY3V0YWJsZSBmaWxlLiBFeGFtcGxlOiAvaG9tZS9leGFtcGxlL215cHJvai9wcm9ncmFtLmpzLiAqL1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0LyoqIFRoZSBzeXN0ZW0gcHJvY2VzcyBpZCBvZiB0aGUgZGVidWdnZWQgcHJvY2Vzcy4gVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIG1pc3NpbmcgZm9yIG5vbi1zeXN0ZW0gcHJvY2Vzc2VzLiAqL1xuXHRcdFx0c3lzdGVtUHJvY2Vzc0lkPzogbnVtYmVyO1xuXHRcdFx0LyoqIElmIHRydWUsIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIgYXMgdGhlIGRlYnVnIGFkYXB0ZXIuICovXG5cdFx0XHRpc0xvY2FsUHJvY2Vzcz86IGJvb2xlYW47XG5cdFx0XHQvKiogRGVzY3JpYmVzIGhvdyB0aGUgZGVidWcgZW5naW5lIHN0YXJ0ZWQgZGVidWdnaW5nIHRoaXMgcHJvY2Vzcy5cblx0XHRcdFx0J2xhdW5jaCc6IFByb2Nlc3Mgd2FzIGxhdW5jaGVkIHVuZGVyIHRoZSBkZWJ1Z2dlci5cblx0XHRcdFx0J2F0dGFjaCc6IERlYnVnZ2VyIGF0dGFjaGVkIHRvIGFuIGV4aXN0aW5nIHByb2Nlc3MuXG5cdFx0XHRcdCdhdHRhY2hGb3JTdXNwZW5kZWRMYXVuY2gnOiBBIHByb2plY3QgbGF1bmNoZXIgY29tcG9uZW50IGhhcyBsYXVuY2hlZCBhIG5ldyBwcm9jZXNzIGluIGEgc3VzcGVuZGVkIHN0YXRlIGFuZCB0aGVuIGFza2VkIHRoZSBkZWJ1Z2dlciB0byBhdHRhY2guXG5cdFx0XHQqL1xuXHRcdFx0c3RhcnRNZXRob2Q/OiAnbGF1bmNoJyB8ICdhdHRhY2gnIHwgJ2F0dGFjaEZvclN1c3BlbmRlZExhdW5jaCc7XG5cdFx0XHQvKiogVGhlIHNpemUgb2YgYSBwb2ludGVyIG9yIGFkZHJlc3MgZm9yIHRoaXMgcHJvY2VzcywgaW4gYml0cy4gVGhpcyB2YWx1ZSBtYXkgYmUgdXNlZCBieSBjbGllbnRzIHdoZW4gZm9ybWF0dGluZyBhZGRyZXNzZXMgZm9yIGRpc3BsYXkuICovXG5cdFx0XHRwb2ludGVyU2l6ZT86IG51bWJlcjtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdjYXBhYmlsaXRpZXMnIGV2ZW50IHR5cGUuXG5cdFx0VGhlIGV2ZW50IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGNhcGFiaWxpdGllcyBoYXZlIGNoYW5nZWQuXG5cdFx0U2luY2UgdGhlIGNhcGFiaWxpdGllcyBhcmUgZGVwZW5kZW50IG9uIHRoZSBmcm9udGVuZCBhbmQgaXRzIFVJLCBpdCBtaWdodCBub3QgYmUgcG9zc2libGUgdG8gY2hhbmdlIHRoYXQgYXQgcmFuZG9tIHRpbWVzIChvciB0b28gbGF0ZSkuXG5cdFx0Q29uc2VxdWVudGx5IHRoaXMgZXZlbnQgaGFzIGEgaGludCBjaGFyYWN0ZXJpc3RpYzogYSBmcm9udGVuZCBjYW4gb25seSBiZSBleHBlY3RlZCB0byBtYWtlIGEgJ2Jlc3QgZWZmb3J0JyBpbiBob25vdXJpbmcgaW5kaXZpZHVhbCBjYXBhYmlsaXRpZXMgYnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuXHRcdE9ubHkgY2hhbmdlZCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBpbmNsdWRlZCwgYWxsIG90aGVyIGNhcGFiaWxpdGllcyBrZWVwIHRoZWlyIHZhbHVlcy5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBDYXBhYmlsaXRpZXNFdmVudCBleHRlbmRzIEV2ZW50IHtcblx0XHQvLyBldmVudDogJ2NhcGFiaWxpdGllcyc7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIFRoZSBzZXQgb2YgdXBkYXRlZCBjYXBhYmlsaXRpZXMuICovXG5cdFx0XHRjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllcztcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdwcm9ncmVzc1N0YXJ0JyBldmVudCB0eXBlLlxuXHRcdFRoZSBldmVudCBzaWduYWxzIHRoYXQgYSBsb25nIHJ1bm5pbmcgb3BlcmF0aW9uIGlzIGFib3V0IHRvIHN0YXJ0IGFuZFxuXHRcdHByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBjbGllbnQgdG8gc2V0IHVwIGEgY29ycmVzcG9uZGluZyBwcm9ncmVzcyBhbmQgY2FuY2VsbGF0aW9uIFVJLlxuXHRcdFRoZSBjbGllbnQgaXMgZnJlZSB0byBkZWxheSB0aGUgc2hvd2luZyBvZiB0aGUgVUkgaW4gb3JkZXIgdG8gcmVkdWNlIGZsaWNrZXIuXG5cdFx0VGhpcyBldmVudCBzaG91bGQgb25seSBiZSBzZW50IGlmIHRoZSBjbGllbnQgaGFzIHBhc3NlZCB0aGUgdmFsdWUgdHJ1ZSBmb3IgdGhlICdzdXBwb3J0c1Byb2dyZXNzUmVwb3J0aW5nJyBjYXBhYmlsaXR5IG9mIHRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdC5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc1N0YXJ0RXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdwcm9ncmVzc1N0YXJ0Jztcblx0XHRib2R5OiB7XG5cdFx0XHQvKiogQW4gSUQgdGhhdCBtdXN0IGJlIHVzZWQgaW4gc3Vic2VxdWVudCAncHJvZ3Jlc3NVcGRhdGUnIGFuZCAncHJvZ3Jlc3NFbmQnIGV2ZW50cyB0byBtYWtlIHRoZW0gcmVmZXIgdG8gdGhlIHNhbWUgcHJvZ3Jlc3MgcmVwb3J0aW5nLlxuXHRcdFx0XHRJRHMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgZGVidWcgc2Vzc2lvbi5cblx0XHRcdCovXG5cdFx0XHRwcm9ncmVzc0lkOiBzdHJpbmc7XG5cdFx0XHQvKiogTWFuZGF0b3J5IChzaG9ydCkgdGl0bGUgb2YgdGhlIHByb2dyZXNzIHJlcG9ydGluZy4gU2hvd24gaW4gdGhlIFVJIHRvIGRlc2NyaWJlIHRoZSBsb25nIHJ1bm5pbmcgb3BlcmF0aW9uLiAqL1xuXHRcdFx0dGl0bGU6IHN0cmluZztcblx0XHRcdC8qKiBUaGUgcmVxdWVzdCBJRCB0aGF0IHRoaXMgcHJvZ3Jlc3MgcmVwb3J0IGlzIHJlbGF0ZWQgdG8uIElmIHNwZWNpZmllZCBhIGRlYnVnIGFkYXB0ZXIgaXMgZXhwZWN0ZWQgdG8gZW1pdFxuXHRcdFx0XHRwcm9ncmVzcyBldmVudHMgZm9yIHRoZSBsb25nIHJ1bm5pbmcgcmVxdWVzdCB1bnRpbCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBlaXRoZXIgY29tcGxldGVkIG9yIGNhbmNlbGxlZC5cblx0XHRcdFx0SWYgdGhlIHJlcXVlc3QgSUQgaXMgb21pdHRlZCwgdGhlIHByb2dyZXNzIHJlcG9ydCBpcyBhc3N1bWVkIHRvIGJlIHJlbGF0ZWQgdG8gc29tZSBnZW5lcmFsIGFjdGl2aXR5IG9mIHRoZSBkZWJ1ZyBhZGFwdGVyLlxuXHRcdFx0Ki9cblx0XHRcdHJlcXVlc3RJZD86IG51bWJlcjtcblx0XHRcdC8qKiBJZiB0cnVlLCB0aGUgcmVxdWVzdCB0aGF0IHJlcG9ydHMgcHJvZ3Jlc3MgbWF5IGJlIGNhbmNlbGVkIHdpdGggYSAnY2FuY2VsJyByZXF1ZXN0LlxuXHRcdFx0XHRTbyB0aGlzIHByb3BlcnR5IGJhc2ljYWxseSBjb250cm9scyB3aGV0aGVyIHRoZSBjbGllbnQgc2hvdWxkIHVzZSBVWCB0aGF0IHN1cHBvcnRzIGNhbmNlbGxhdGlvbi5cblx0XHRcdFx0Q2xpZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgY2FuY2VsbGF0aW9uIGFyZSBhbGxvd2VkIHRvIGlnbm9yZSB0aGUgc2V0dGluZy5cblx0XHRcdCovXG5cdFx0XHRjYW5jZWxsYWJsZT86IGJvb2xlYW47XG5cdFx0XHQvKiogT3B0aW9uYWwsIG1vcmUgZGV0YWlsZWQgcHJvZ3Jlc3MgbWVzc2FnZS4gKi9cblx0XHRcdG1lc3NhZ2U/OiBzdHJpbmc7XG5cdFx0XHQvKiogT3B0aW9uYWwgcHJvZ3Jlc3MgcGVyY2VudGFnZSB0byBkaXNwbGF5ICh2YWx1ZSByYW5nZTogMCB0byAxMDApLiBJZiBvbWl0dGVkIG5vIHBlcmNlbnRhZ2Ugd2lsbCBiZSBzaG93bi4gKi9cblx0XHRcdHBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAncHJvZ3Jlc3NVcGRhdGUnIGV2ZW50IHR5cGUuXG5cdFx0VGhlIGV2ZW50IHNpZ25hbHMgdGhhdCB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIG5lZWRzIHRvIHVwZGF0ZWQgd2l0aCBhIG5ldyBtZXNzYWdlIGFuZC9vciBwZXJjZW50YWdlLlxuXHRcdFRoZSBjbGllbnQgZG9lcyBub3QgaGF2ZSB0byB1cGRhdGUgdGhlIFVJIGltbWVkaWF0ZWx5LCBidXQgdGhlIGNsaWVudHMgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiB0aGUgbWVzc2FnZSBhbmQvb3IgcGVyY2VudGFnZSB2YWx1ZXMuXG5cdFx0VGhpcyBldmVudCBzaG91bGQgb25seSBiZSBzZW50IGlmIHRoZSBjbGllbnQgaGFzIHBhc3NlZCB0aGUgdmFsdWUgdHJ1ZSBmb3IgdGhlICdzdXBwb3J0c1Byb2dyZXNzUmVwb3J0aW5nJyBjYXBhYmlsaXR5IG9mIHRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdC5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc1VwZGF0ZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuXHRcdC8vIGV2ZW50OiAncHJvZ3Jlc3NVcGRhdGUnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgSUQgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiB0aGUgaW5pdGlhbCAncHJvZ3Jlc3NTdGFydCcgZXZlbnQuICovXG5cdFx0XHRwcm9ncmVzc0lkOiBzdHJpbmc7XG5cdFx0XHQvKiogT3B0aW9uYWwsIG1vcmUgZGV0YWlsZWQgcHJvZ3Jlc3MgbWVzc2FnZS4gSWYgb21pdHRlZCwgdGhlIHByZXZpb3VzIG1lc3NhZ2UgKGlmIGFueSkgaXMgdXNlZC4gKi9cblx0XHRcdG1lc3NhZ2U/OiBzdHJpbmc7XG5cdFx0XHQvKiogT3B0aW9uYWwgcHJvZ3Jlc3MgcGVyY2VudGFnZSB0byBkaXNwbGF5ICh2YWx1ZSByYW5nZTogMCB0byAxMDApLiBJZiBvbWl0dGVkIG5vIHBlcmNlbnRhZ2Ugd2lsbCBiZSBzaG93bi4gKi9cblx0XHRcdHBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cdFx0fTtcblx0fVxuXG5cdC8qKiBFdmVudCBtZXNzYWdlIGZvciAncHJvZ3Jlc3NFbmQnIGV2ZW50IHR5cGUuXG5cdFx0VGhlIGV2ZW50IHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIHdpdGggYW4gb3B0aW9uYWwgZmluYWwgbWVzc2FnZS5cblx0XHRUaGlzIGV2ZW50IHNob3VsZCBvbmx5IGJlIHNlbnQgaWYgdGhlIGNsaWVudCBoYXMgcGFzc2VkIHRoZSB2YWx1ZSB0cnVlIGZvciB0aGUgJ3N1cHBvcnRzUHJvZ3Jlc3NSZXBvcnRpbmcnIGNhcGFiaWxpdHkgb2YgdGhlICdpbml0aWFsaXplJyByZXF1ZXN0LlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzRW5kRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdwcm9ncmVzc0VuZCc7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIFRoZSBJRCB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBpbml0aWFsICdQcm9ncmVzc1N0YXJ0RXZlbnQnLiAqL1xuXHRcdFx0cHJvZ3Jlc3NJZDogc3RyaW5nO1xuXHRcdFx0LyoqIE9wdGlvbmFsLCBtb3JlIGRldGFpbGVkIHByb2dyZXNzIG1lc3NhZ2UuIElmIG9taXR0ZWQsIHRoZSBwcmV2aW91cyBtZXNzYWdlIChpZiBhbnkpIGlzIHVzZWQuICovXG5cdFx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHRcdH07XG5cdH1cblxuXHQvKiogRXZlbnQgbWVzc2FnZSBmb3IgJ2ludmFsaWRhdGVkJyBldmVudCB0eXBlLlxuXHRcdFRoaXMgZXZlbnQgc2lnbmFscyB0aGF0IHNvbWUgc3RhdGUgaW4gdGhlIGRlYnVnIGFkYXB0ZXIgaGFzIGNoYW5nZWQgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIGNsaWVudCBuZWVkcyB0byByZS1yZW5kZXIgdGhlIGRhdGEgc25hcHNob3QgcHJldmlvdXNseSByZXF1ZXN0ZWQuXG5cdFx0RGVidWcgYWRhcHRlcnMgZG8gbm90IGhhdmUgdG8gZW1pdCB0aGlzIGV2ZW50IGZvciBydW50aW1lIGNoYW5nZXMgbGlrZSBzdG9wcGVkIG9yIHRocmVhZCBldmVudHMgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIGNsaWVudCByZWZldGNoZXMgdGhlIG5ldyBzdGF0ZSBhbnl3YXkuIEJ1dCB0aGUgZXZlbnQgY2FuIGJlIHVzZWQgZm9yIGV4YW1wbGUgdG8gcmVmcmVzaCB0aGUgVUkgYWZ0ZXIgcmVuZGVyaW5nIGZvcm1hdHRpbmcgaGFzIGNoYW5nZWQgaW4gdGhlIGRlYnVnIGFkYXB0ZXIuXG5cdFx0VGhpcyBldmVudCBzaG91bGQgb25seSBiZSBzZW50IGlmIHRoZSBkZWJ1ZyBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIHZhbHVlIHRydWUgZm9yIHRoZSAnc3VwcG9ydHNJbnZhbGlkYXRlZEV2ZW50JyBjYXBhYmlsaXR5IG9mIHRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdC5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBJbnZhbGlkYXRlZEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuXHRcdC8vIGV2ZW50OiAnaW52YWxpZGF0ZWQnO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBPcHRpb25hbCBzZXQgb2YgbG9naWNhbCBhcmVhcyB0aGF0IGdvdCBpbnZhbGlkYXRlZC4gVGhpcyBwcm9wZXJ0eSBoYXMgYSBoaW50IGNoYXJhY3RlcmlzdGljOiBhIGNsaWVudCBjYW4gb25seSBiZSBleHBlY3RlZCB0byBtYWtlIGEgJ2Jlc3QgZWZmb3J0JyBpbiBob25vdXJpbmcgdGhlIGFyZWFzIGJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBlbXB0eSwgb3IgaWYgdmFsdWVzIGFyZSBub3QgdW5kZXJzdGFuZCB0aGUgY2xpZW50IHNob3VsZCBhc3N1bWUgYSBzaW5nbGUgdmFsdWUgJ2FsbCcuICovXG5cdFx0XHRhcmVhcz86IEludmFsaWRhdGVkQXJlYXNbXTtcblx0XHRcdC8qKiBJZiBzcGVjaWZpZWQsIHRoZSBjbGllbnQgb25seSBuZWVkcyB0byByZWZldGNoIGRhdGEgcmVsYXRlZCB0byB0aGlzIHRocmVhZC4gKi9cblx0XHRcdHRocmVhZElkPzogbnVtYmVyO1xuXHRcdFx0LyoqIElmIHNwZWNpZmllZCwgdGhlIGNsaWVudCBvbmx5IG5lZWRzIHRvIHJlZmV0Y2ggZGF0YSByZWxhdGVkIHRvIHRoaXMgc3RhY2sgZnJhbWUgKGFuZCB0aGUgJ3RocmVhZElkJyBpcyBpZ25vcmVkKS4gKi9cblx0XHRcdHN0YWNrRnJhbWVJZD86IG51bWJlcjtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEV2ZW50IG1lc3NhZ2UgZm9yICdtZW1vcnknIGV2ZW50IHR5cGUuXG5cdFx0VGhpcyBldmVudCBpbmRpY2F0ZXMgdGhhdCBzb21lIG1lbW9yeSByYW5nZSBoYXMgYmVlbiB1cGRhdGVkLiBJdCBzaG91bGQgb25seSBiZSBzZW50IGlmIHRoZSBkZWJ1ZyBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIHZhbHVlIHRydWUgZm9yIHRoZSBgc3VwcG9ydHNNZW1vcnlFdmVudGAgY2FwYWJpbGl0eSBvZiB0aGUgYGluaXRpYWxpemVgIHJlcXVlc3QuXG5cdFx0Q2xpZW50cyB0eXBpY2FsbHkgcmVhY3QgdG8gdGhlIGV2ZW50IGJ5IHJlLWlzc3VpbmcgYSBgcmVhZE1lbW9yeWAgcmVxdWVzdCBpZiB0aGV5IHNob3cgdGhlIG1lbW9yeSBpZGVudGlmaWVkIGJ5IHRoZSBgbWVtb3J5UmVmZXJlbmNlYCBhbmQgaWYgdGhlIHVwZGF0ZWQgbWVtb3J5IHJhbmdlIG92ZXJsYXBzIHRoZSBkaXNwbGF5ZWQgcmFuZ2UuIENsaWVudHMgc2hvdWxkIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhvdyBpbmRpdmlkdWFsIG1lbW9yeSByZWZlcmVuY2VzIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBzbyB0aGV5IHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhleSBhcmUgcGFydCBvZiBhIHNpbmdsZSBjb250aW51b3VzIGFkZHJlc3MgcmFuZ2UgYW5kIG1pZ2h0IG92ZXJsYXAuXG5cdFx0RGVidWcgYWRhcHRlcnMgY2FuIHVzZSB0aGlzIGV2ZW50IHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIGEgbWVtb3J5IHJhbmdlIGhhcyBjaGFuZ2VkIGR1ZSB0byBzb21lIG90aGVyIERBUCByZXF1ZXN0IGxpa2UgYHNldFZhcmlhYmxlYCBvciBgc2V0RXhwcmVzc2lvbmAuIERlYnVnIGFkYXB0ZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gZW1pdCB0aGlzIGV2ZW50IGZvciBlYWNoIGFuZCBldmVyeSBtZW1vcnkgY2hhbmdlIG9mIGEgcnVubmluZyBwcm9ncmFtLCBiZWNhdXNlIHRoYXQgaW5mb3JtYXRpb24gaXMgdHlwaWNhbGx5IG5vdCBhdmFpbGFibGUgZnJvbSBkZWJ1Z2dlcnMgYW5kIGl0IHdvdWxkIGZsb29kIGNsaWVudHMgd2l0aCB0b28gbWFueSBldmVudHMuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5RXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdFx0Ly8gZXZlbnQ6ICdtZW1vcnknO1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBNZW1vcnkgcmVmZXJlbmNlIG9mIGEgbWVtb3J5IHJhbmdlIHRoYXQgaGFzIGJlZW4gdXBkYXRlZC4gKi9cblx0XHRcdG1lbW9yeVJlZmVyZW5jZTogc3RyaW5nO1xuXHRcdFx0LyoqIFN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyB3aGVyZSBtZW1vcnkgaGFzIGJlZW4gdXBkYXRlZC4gQ2FuIGJlIG5lZ2F0aXZlLiAqL1xuXHRcdFx0b2Zmc2V0OiBudW1iZXI7XG5cdFx0XHQvKiogTnVtYmVyIG9mIGJ5dGVzIHVwZGF0ZWQuICovXG5cdFx0XHRjb3VudDogbnVtYmVyO1xuXHRcdH07XG5cdH1cblxuXHQvKiogUnVuSW5UZXJtaW5hbCByZXF1ZXN0OyB2YWx1ZSBvZiBjb21tYW5kIGZpZWxkIGlzICdydW5JblRlcm1pbmFsJy5cblx0XHRUaGlzIG9wdGlvbmFsIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBkZWJ1ZyBhZGFwdGVyIHRvIHRoZSBjbGllbnQgdG8gcnVuIGEgY29tbWFuZCBpbiBhIHRlcm1pbmFsLlxuXHRcdFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gbGF1bmNoIHRoZSBkZWJ1Z2dlZSBpbiBhIHRlcm1pbmFsIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuXG5cdFx0VGhpcyByZXF1ZXN0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgY2xpZW50IGhhcyBwYXNzZWQgdGhlIHZhbHVlIHRydWUgZm9yIHRoZSAnc3VwcG9ydHNSdW5JblRlcm1pbmFsUmVxdWVzdCcgY2FwYWJpbGl0eSBvZiB0aGUgJ2luaXRpYWxpemUnIHJlcXVlc3QuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgUnVuSW5UZXJtaW5hbFJlcXVlc3QgZXh0ZW5kcyBSZXF1ZXN0IHtcblx0XHQvLyBjb21tYW5kOiAncnVuSW5UZXJtaW5hbCc7XG5cdFx0YXJndW1lbnRzOiBSdW5JblRlcm1pbmFsUmVxdWVzdEFyZ3VtZW50cztcblx0fVxuXG5cdC8qKiBBcmd1bWVudHMgZm9yICdydW5JblRlcm1pbmFsJyByZXF1ZXN0LiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFJ1bkluVGVybWluYWxSZXF1ZXN0QXJndW1lbnRzIHtcblx0XHQvKiogV2hhdCBraW5kIG9mIHRlcm1pbmFsIHRvIGxhdW5jaC4gKi9cblx0XHRraW5kPzogJ2ludGVncmF0ZWQnIHwgJ2V4dGVybmFsJztcblx0XHQvKiogT3B0aW9uYWwgdGl0bGUgb2YgdGhlIHRlcm1pbmFsLiAqL1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHRcdC8qKiBXb3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQuIEZvciBub24tZW1wdHksIHZhbGlkIHBhdGhzIHRoaXMgdHlwaWNhbGx5IHJlc3VsdHMgaW4gZXhlY3V0aW9uIG9mIGEgY2hhbmdlIGRpcmVjdG9yeSBjb21tYW5kLiAqL1xuXHRcdGN3ZDogc3RyaW5nO1xuXHRcdC8qKiBMaXN0IG9mIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIHRvIHJ1bi4gKi9cblx0XHRhcmdzOiBzdHJpbmdbXTtcblx0XHQvKiogRW52aXJvbm1lbnQga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudC4gKi9cblx0XHRlbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGw7IH07XG5cdH1cblxuXHQvKiogUmVzcG9uc2UgdG8gJ3J1bkluVGVybWluYWwnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgUnVuSW5UZXJtaW5hbFJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHRcdGJvZHk6IHtcblx0XHRcdC8qKiBUaGUgcHJvY2VzcyBJRC4gVGhlIHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0NyAoMl4zMS0xKS4gKi9cblx0XHRcdHByb2Nlc3NJZD86IG51bWJlcjtcblx0XHRcdC8qKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgdGVybWluYWwgc2hlbGwuIFRoZSB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIxNDc0ODM2NDcgKDJeMzEtMSkuICovXG5cdFx0XHRzaGVsbFByb2Nlc3NJZD86IG51bWJlcjtcblx0XHR9O1xuXHR9XG5cblx0LyoqIEluaXRpYWxpemUgcmVxdWVzdDsgdmFsdWUgb2YgY29tbWFuZCBmaWVsZCBpcyAnaW5pdGlhbGl6ZScuXG5cdFx0VGhlICdpbml0aWFsaXplJyByZXF1ZXN0IGlzIHNlbnQgYXMgdGhlIGZpcnN0IHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBkZWJ1ZyBhZGFwdGVyXG5cdFx0aW4gb3JkZXIgdG8gY29uZmlndXJlIGl0IHdpdGggY2xpZW50IGNhcGFiaWxpdGllcyBhbmQgdG8gcmV0cmlldmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGRlYnVnIGFkYXB0ZXIuXG5cdFx0VW50aWwgdGhlIGRlYnVnIGFkYXB0ZXIgaGFzIHJlc3BvbmRlZCB0byB3aXRoIGFuICdpbml0aWFsaXplJyByZXNwb25zZSwgdGhlIGNsaWVudCBtdXN0IG5vdCBzZW5kIGFueSBhZGRpdGlvbmFsIHJlcXVlc3RzIG9yIGV2ZW50cyB0byB0aGUgZGVidWcgYWRhcHRlci5cblx0XHRJbiBhZGRpdGlvbiB0aGUgZGVidWcgYWRhcHRlciBpcyBub3QgYWxsb3dlZCB0byBzZW5kIGFueSByZXF1ZXN0cyBvciBldmVudHMgdG8gdGhlIGNsaWVudCB1bnRpbCBpdCBoYXMgcmVzcG9uZGVkIHdpdGggYW4gJ2luaXRpYWxpemUnIHJlc3BvbnNlLlxuXHRcdFRoZSAnaW5pdGlhbGl6ZScgcmVxdWVzdCBtYXkgb25seSBiZSBzZW50IG9uY2UuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlcXVlc3QgZXh0ZW5kcyBSZXF1ZXN0IHtcblx0XHQvLyBjb21tYW5kOiAnaW5pdGlhbGl6ZSc7XG5cdFx0YXJndW1lbnRzOiBJbml0aWFsaXplUmVxdWVzdEFyZ3VtZW50cztcblx0fVxuXG5cdC8qKiBBcmd1bWVudHMgZm9yICdpbml0aWFsaXplJyByZXF1ZXN0LiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEluaXRpYWxpemVSZXF1ZXN0QXJndW1lbnRzIHtcblx0XHQvKiogVGhlIElEIG9mIHRoZSAoZnJvbnRlbmQpIGNsaWVudCB1c2luZyB0aGlzIGFkYXB0ZXIuICovXG5cdFx0Y2xpZW50SUQ/OiBzdHJpbmc7XG5cdFx0LyoqIFRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoZSAoZnJvbnRlbmQpIGNsaWVudCB1c2luZyB0aGlzIGFkYXB0ZXIuICovXG5cdFx0Y2xpZW50TmFtZT86IHN0cmluZztcblx0XHQvKiogVGhlIElEIG9mIHRoZSBkZWJ1ZyBhZGFwdGVyLiAqL1xuXHRcdGFkYXB0ZXJJRDogc3RyaW5nO1xuXHRcdC8qKiBUaGUgSVNPLTYzOSBsb2NhbGUgb2YgdGhlIChmcm9udGVuZCkgY2xpZW50IHVzaW5nIHRoaXMgYWRhcHRlciwgZS5nLiBlbi1VUyBvciBkZS1DSC4gKi9cblx0XHRsb2NhbGU/OiBzdHJpbmc7XG5cdFx0LyoqIElmIHRydWUgYWxsIGxpbmUgbnVtYmVycyBhcmUgMS1iYXNlZCAoZGVmYXVsdCkuICovXG5cdFx0bGluZXNTdGFydEF0MT86IGJvb2xlYW47XG5cdFx0LyoqIElmIHRydWUgYWxsIGNvbHVtbiBudW1iZXJzIGFyZSAxLWJhc2VkIChkZWZhdWx0KS4gKi9cblx0XHRjb2x1bW5zU3RhcnRBdDE/OiBib29sZWFuO1xuXHRcdC8qKiBEZXRlcm1pbmVzIGluIHdoYXQgZm9ybWF0IHBhdGhzIGFyZSBzcGVjaWZpZWQuIFRoZSBkZWZhdWx0IGlzICdwYXRoJywgd2hpY2ggaXMgdGhlIG5hdGl2ZSBmb3JtYXQuXG5cdFx0XHRWYWx1ZXM6ICdwYXRoJywgJ3VyaScsIGV0Yy5cblx0XHQqL1xuXHRcdHBhdGhGb3JtYXQ/OiAncGF0aCcgfCAndXJpJyB8IHN0cmluZztcblx0XHQvKiogQ2xpZW50IHN1cHBvcnRzIHRoZSBvcHRpb25hbCB0eXBlIGF0dHJpYnV0ZSBmb3IgdmFyaWFibGVzLiAqL1xuXHRcdHN1cHBvcnRzVmFyaWFibGVUeXBlPzogYm9vbGVhbjtcblx0XHQvKiogQ2xpZW50IHN1cHBvcnRzIHRoZSBwYWdpbmcgb2YgdmFyaWFibGVzLiAqL1xuXHRcdHN1cHBvcnRzVmFyaWFibGVQYWdpbmc/OiBib29sZWFuO1xuXHRcdC8qKiBDbGllbnQgc3VwcG9ydHMgdGhlIHJ1bkluVGVybWluYWwgcmVxdWVzdC4gKi9cblx0XHRzdXBwb3J0c1J1bkluVGVybWluYWxSZXF1ZXN0PzogYm9vbGVhbjtcblx0XHQvKiogQ2xpZW50IHN1cHBvcnRzIG1lbW9yeSByZWZlcmVuY2VzLiAqL1xuXHRcdHN1cHBvcnRzTWVtb3J5UmVmZXJlbmNlcz86IGJvb2xlYW47XG5cdFx0LyoqIENsaWVudCBzdXBwb3J0cyBwcm9ncmVzcyByZXBvcnRpbmcuICovXG5cdFx0c3VwcG9ydHNQcm9ncmVzc1JlcG9ydGluZz86IGJvb2xlYW47XG5cdFx0LyoqIENsaWVudCBzdXBwb3J0cyB0aGUgaW52YWxpZGF0ZWQgZXZlbnQuICovXG5cdFx0c3VwcG9ydHNJbnZhbGlkYXRlZEV2ZW50PzogYm9vbGVhbjtcblx0XHQvKiogQ2xpZW50IHN1cHBvcnRzIHRoZSBtZW1vcnkgZXZlbnQuICovXG5cdFx0c3VwcG9ydHNNZW1vcnlFdmVudD86IGJvb2xlYW47XG5cdH1cblxuXHQvKiogUmVzcG9uc2UgdG8gJ2luaXRpYWxpemUnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHRcdC8qKiBUaGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMgZGVidWcgYWRhcHRlci4gKi9cblx0XHRib2R5PzogQ2FwYWJpbGl0aWVzO1xuXHR9XG5cblx0LyoqIENvbmZpZ3VyYXRpb25Eb25lIHJlcXVlc3Q7IHZhbHVlIG9mIGNvbW1hbmQgZmllbGQgaXMgJ2NvbmZpZ3VyYXRpb25Eb25lJy5cblx0XHRUaGlzIG9wdGlvbmFsIHJlcXVlc3QgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBoYXMgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRlYnVnIGFkYXB0ZXIuXG5cdFx0U28gaXQgaXMgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgc2VxdWVuY2Ugb2YgY29uZmlndXJhdGlvbiByZXF1ZXN0cyAod2hpY2ggd2FzIHN0YXJ0ZWQgYnkgdGhlICdpbml0aWFsaXplZCcgZXZlbnQpLlxuXHRcdENsaWVudHMgc2hvdWxkIG9ubHkgY2FsbCB0aGlzIHJlcXVlc3QgaWYgdGhlIGNhcGFiaWxpdHkgJ3N1cHBvcnRzQ29uZmlndXJhdGlvbkRvbmVSZXF1ZXN0JyBpcyB0cnVlLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25Eb25lUmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICdjb25maWd1cmF0aW9uRG9uZSc7XG5cdFx0YXJndW1lbnRzPzogQ29uZmlndXJhdGlvbkRvbmVBcmd1bWVudHM7XG5cdH1cblxuXHQvKiogQXJndW1lbnRzIGZvciAnY29uZmlndXJhdGlvbkRvbmUnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbkRvbmVBcmd1bWVudHMge1xuXHR9XG5cblx0LyoqIFJlc3BvbnNlIHRvICdjb25maWd1cmF0aW9uRG9uZScgcmVxdWVzdC4gVGhpcyBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudCwgc28gbm8gYm9keSBmaWVsZCBpcyByZXF1aXJlZC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uRG9uZVJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHR9XG5cblx0LyoqIExhdW5jaCByZXF1ZXN0OyB2YWx1ZSBvZiBjb21tYW5kIGZpZWxkIGlzICdsYXVuY2gnLlxuXHRcdFRoaXMgbGF1bmNoIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIGRlYnVnIGFkYXB0ZXIgdG8gc3RhcnQgdGhlIGRlYnVnZ2VlIHdpdGggb3Igd2l0aG91dCBkZWJ1Z2dpbmcgKGlmICdub0RlYnVnJyBpcyB0cnVlKS5cblx0XHRTaW5jZSBsYXVuY2hpbmcgaXMgZGVidWdnZXIvcnVudGltZSBzcGVjaWZpYywgdGhlIGFyZ3VtZW50cyBmb3IgdGhpcyByZXF1ZXN0IGFyZSBub3QgcGFydCBvZiB0aGlzIHNwZWNpZmljYXRpb24uXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoUmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICdsYXVuY2gnO1xuXHRcdGFyZ3VtZW50czogTGF1bmNoUmVxdWVzdEFyZ3VtZW50cztcblx0fVxuXG5cdC8qKiBBcmd1bWVudHMgZm9yICdsYXVuY2gnIHJlcXVlc3QuIEFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoUmVxdWVzdEFyZ3VtZW50cyB7XG5cdFx0LyoqIElmIG5vRGVidWcgaXMgdHJ1ZSB0aGUgbGF1bmNoIHJlcXVlc3Qgc2hvdWxkIGxhdW5jaCB0aGUgcHJvZ3JhbSB3aXRob3V0IGVuYWJsaW5nIGRlYnVnZ2luZy4gKi9cblx0XHRub0RlYnVnPzogYm9vbGVhbjtcblx0XHQvKiogT3B0aW9uYWwgZGF0YSBmcm9tIHRoZSBwcmV2aW91cywgcmVzdGFydGVkIHNlc3Npb24uXG5cdFx0XHRUaGUgZGF0YSBpcyBzZW50IGFzIHRoZSAncmVzdGFydCcgYXR0cmlidXRlIG9mIHRoZSAndGVybWluYXRlZCcgZXZlbnQuXG5cdFx0XHRUaGUgY2xpZW50IHNob3VsZCBsZWF2ZSB0aGUgZGF0YSBpbnRhY3QuXG5cdFx0Ki9cblx0XHRfX3Jlc3RhcnQ/OiBhbnk7XG5cdH1cblxuXHQvKiogUmVzcG9uc2UgdG8gJ2xhdW5jaCcgcmVxdWVzdC4gVGhpcyBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudCwgc28gbm8gYm9keSBmaWVsZCBpcyByZXF1aXJlZC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBMYXVuY2hSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcblx0fVxuXG5cdC8qKiBBdHRhY2ggcmVxdWVzdDsgdmFsdWUgb2YgY29tbWFuZCBmaWVsZCBpcyAnYXR0YWNoJy5cblx0XHRUaGUgYXR0YWNoIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIGRlYnVnIGFkYXB0ZXIgdG8gYXR0YWNoIHRvIGEgZGVidWdnZWUgdGhhdCBpcyBhbHJlYWR5IHJ1bm5pbmcuXG5cdFx0U2luY2UgYXR0YWNoaW5nIGlzIGRlYnVnZ2VyL3J1bnRpbWUgc3BlY2lmaWMsIHRoZSBhcmd1bWVudHMgZm9yIHRoaXMgcmVxdWVzdCBhcmUgbm90IHBhcnQgb2YgdGhpcyBzcGVjaWZpY2F0aW9uLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEF0dGFjaFJlcXVlc3QgZXh0ZW5kcyBSZXF1ZXN0IHtcblx0XHQvLyBjb21tYW5kOiAnYXR0YWNoJztcblx0XHRhcmd1bWVudHM6IEF0dGFjaFJlcXVlc3RBcmd1bWVudHM7XG5cdH1cblxuXHQvKiogQXJndW1lbnRzIGZvciAnYXR0YWNoJyByZXF1ZXN0LiBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEF0dGFjaFJlcXVlc3RBcmd1bWVudHMge1xuXHRcdC8qKiBPcHRpb25hbCBkYXRhIGZyb20gdGhlIHByZXZpb3VzLCByZXN0YXJ0ZWQgc2Vzc2lvbi5cblx0XHRcdFRoZSBkYXRhIGlzIHNlbnQgYXMgdGhlICdyZXN0YXJ0JyBhdHRyaWJ1dGUgb2YgdGhlICd0ZXJtaW5hdGVkJyBldmVudC5cblx0XHRcdFRoZSBjbGllbnQgc2hvdWxkIGxlYXZlIHRoZSBkYXRhIGludGFjdC5cblx0XHQqL1xuXHRcdF9fcmVzdGFydD86IGFueTtcblx0fVxuXG5cdC8qKiBSZXNwb25zZSB0byAnYXR0YWNoJyByZXF1ZXN0LiBUaGlzIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50LCBzbyBubyBib2R5IGZpZWxkIGlzIHJlcXVpcmVkLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEF0dGFjaFJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHR9XG5cblx0LyoqIFJlc3RhcnQgcmVxdWVzdDsgdmFsdWUgb2YgY29tbWFuZCBmaWVsZCBpcyAncmVzdGFydCcuXG5cdFx0UmVzdGFydHMgYSBkZWJ1ZyBzZXNzaW9uLiBDbGllbnRzIHNob3VsZCBvbmx5IGNhbGwgdGhpcyByZXF1ZXN0IGlmIHRoZSBjYXBhYmlsaXR5ICdzdXBwb3J0c1Jlc3RhcnRSZXF1ZXN0JyBpcyB0cnVlLlxuXHRcdElmIHRoZSBjYXBhYmlsaXR5IGlzIG1pc3Npbmcgb3IgaGFzIHRoZSB2YWx1ZSBmYWxzZSwgYSB0eXBpY2FsIGNsaWVudCB3aWxsIGVtdWxhdGUgJ3Jlc3RhcnQnIGJ5IHRlcm1pbmF0aW5nIHRoZSBkZWJ1ZyBhZGFwdGVyIGZpcnN0IGFuZCB0aGVuIGxhdW5jaGluZyBpdCBhbmV3LlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFJlc3RhcnRSZXF1ZXN0IGV4dGVuZHMgUmVxdWVzdCB7XG5cdFx0Ly8gY29tbWFuZDogJ3Jlc3RhcnQnO1xuXHRcdGFyZ3VtZW50cz86IFJlc3RhcnRBcmd1bWVudHM7XG5cdH1cblxuXHQvKiogQXJndW1lbnRzIGZvciAncmVzdGFydCcgcmVxdWVzdC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBSZXN0YXJ0QXJndW1lbnRzIHtcblx0XHQvKiogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSAnbGF1bmNoJyBvciAnYXR0YWNoJyBjb25maWd1cmF0aW9uLiAqL1xuXHRcdGFyZ3VtZW50cz86IExhdW5jaFJlcXVlc3RBcmd1bWVudHMgfCBBdHRhY2hSZXF1ZXN0QXJndW1lbnRzO1xuXHR9XG5cblx0LyoqIFJlc3BvbnNlIHRvICdyZXN0YXJ0JyByZXF1ZXN0LiBUaGlzIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50LCBzbyBubyBib2R5IGZpZWxkIGlzIHJlcXVpcmVkLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFJlc3RhcnRSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcblx0fVxuXG5cdC8qKiBEaXNjb25uZWN0IHJlcXVlc3Q7IHZhbHVlIG9mIGNvbW1hbmQgZmllbGQgaXMgJ2Rpc2Nvbm5lY3QnLlxuXHRcdFRoZSAnZGlzY29ubmVjdCcgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgZGVidWcgYWRhcHRlciBpbiBvcmRlciB0byBzdG9wIGRlYnVnZ2luZy5cblx0XHRJdCBhc2tzIHRoZSBkZWJ1ZyBhZGFwdGVyIHRvIGRpc2Nvbm5lY3QgZnJvbSB0aGUgZGVidWdnZWUgYW5kIHRvIHRlcm1pbmF0ZSB0aGUgZGVidWcgYWRhcHRlci5cblx0XHRJZiB0aGUgZGVidWdnZWUgaGFzIGJlZW4gc3RhcnRlZCB3aXRoIHRoZSAnbGF1bmNoJyByZXF1ZXN0LCB0aGUgJ2Rpc2Nvbm5lY3QnIHJlcXVlc3QgdGVybWluYXRlcyB0aGUgZGVidWdnZWUuXG5cdFx0SWYgdGhlICdhdHRhY2gnIHJlcXVlc3Qgd2FzIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZGVidWdnZWUsICdkaXNjb25uZWN0JyBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGRlYnVnZ2VlLlxuXHRcdFRoaXMgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgJ3Rlcm1pbmF0ZURlYnVnZ2VlJyBhcmd1bWVudCAoaWYgc3VwcG9ydGVkIGJ5IHRoZSBkZWJ1ZyBhZGFwdGVyKS5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBEaXNjb25uZWN0UmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICdkaXNjb25uZWN0Jztcblx0XHRhcmd1bWVudHM/OiBEaXNjb25uZWN0QXJndW1lbnRzO1xuXHR9XG5cblx0LyoqIEFyZ3VtZW50cyBmb3IgJ2Rpc2Nvbm5lY3QnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRGlzY29ubmVjdEFyZ3VtZW50cyB7XG5cdFx0LyoqIEEgdmFsdWUgb2YgdHJ1ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzICdkaXNjb25uZWN0JyByZXF1ZXN0IGlzIHBhcnQgb2YgYSByZXN0YXJ0IHNlcXVlbmNlLiAqL1xuXHRcdHJlc3RhcnQ/OiBib29sZWFuO1xuXHRcdC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGVidWdnZWUgc2hvdWxkIGJlIHRlcm1pbmF0ZWQgd2hlbiB0aGUgZGVidWdnZXIgaXMgZGlzY29ubmVjdGVkLlxuXHRcdFx0SWYgdW5zcGVjaWZpZWQsIHRoZSBkZWJ1ZyBhZGFwdGVyIGlzIGZyZWUgdG8gZG8gd2hhdGV2ZXIgaXQgdGhpbmtzIGlzIGJlc3QuXG5cdFx0XHRUaGUgYXR0cmlidXRlIGlzIG9ubHkgaG9ub3JlZCBieSBhIGRlYnVnIGFkYXB0ZXIgaWYgdGhlIGNhcGFiaWxpdHkgJ3N1cHBvcnRUZXJtaW5hdGVEZWJ1Z2dlZScgaXMgdHJ1ZS5cblx0XHQqL1xuXHRcdHRlcm1pbmF0ZURlYnVnZ2VlPzogYm9vbGVhbjtcblx0XHQvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRlYnVnZ2VlIHNob3VsZCBzdGF5IHN1c3BlbmRlZCB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBkaXNjb25uZWN0ZWQuXG5cdFx0XHRJZiB1bnNwZWNpZmllZCwgdGhlIGRlYnVnZ2VlIHNob3VsZCByZXN1bWUgZXhlY3V0aW9uLlxuXHRcdFx0VGhlIGF0dHJpYnV0ZSBpcyBvbmx5IGhvbm9yZWQgYnkgYSBkZWJ1ZyBhZGFwdGVyIGlmIHRoZSBjYXBhYmlsaXR5ICdzdXBwb3J0U3VzcGVuZERlYnVnZ2VlJyBpcyB0cnVlLlxuXHRcdCovXG5cdFx0c3VzcGVuZERlYnVnZ2VlPzogYm9vbGVhbjtcblx0fVxuXG5cdC8qKiBSZXNwb25zZSB0byAnZGlzY29ubmVjdCcgcmVxdWVzdC4gVGhpcyBpcyBqdXN0IGFuIGFja25vd2xlZGdlbWVudCwgc28gbm8gYm9keSBmaWVsZCBpcyByZXF1aXJlZC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBEaXNjb25uZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG5cdH1cblxuXHQvKiogVGVybWluYXRlIHJlcXVlc3Q7IHZhbHVlIG9mIGNvbW1hbmQgZmllbGQgaXMgJ3Rlcm1pbmF0ZScuXG5cdFx0VGhlICd0ZXJtaW5hdGUnIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIGRlYnVnIGFkYXB0ZXIgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgZGVidWdnZWUgYSBjaGFuY2UgZm9yIHRlcm1pbmF0aW5nIGl0c2VsZi5cblx0XHRDbGllbnRzIHNob3VsZCBvbmx5IGNhbGwgdGhpcyByZXF1ZXN0IGlmIHRoZSBjYXBhYmlsaXR5ICdzdXBwb3J0c1Rlcm1pbmF0ZVJlcXVlc3QnIGlzIHRydWUuXG5cdCovXG5cdGV4cG9ydCBpbnRlcmZhY2UgVGVybWluYXRlUmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICd0ZXJtaW5hdGUnO1xuXHRcdGFyZ3VtZW50cz86IFRlcm1pbmF0ZUFyZ3VtZW50cztcblx0fVxuXG5cdC8qKiBBcmd1bWVudHMgZm9yICd0ZXJtaW5hdGUnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgVGVybWluYXRlQXJndW1lbnRzIHtcblx0XHQvKiogQSB2YWx1ZSBvZiB0cnVlIGluZGljYXRlcyB0aGF0IHRoaXMgJ3Rlcm1pbmF0ZScgcmVxdWVzdCBpcyBwYXJ0IG9mIGEgcmVzdGFydCBzZXF1ZW5jZS4gKi9cblx0XHRyZXN0YXJ0PzogYm9vbGVhbjtcblx0fVxuXG5cdC8qKiBSZXNwb25zZSB0byAndGVybWluYXRlJyByZXF1ZXN0LiBUaGlzIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50LCBzbyBubyBib2R5IGZpZWxkIGlzIHJlcXVpcmVkLiAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuXHR9XG5cblx0LyoqIEJyZWFrcG9pbnRMb2NhdGlvbnMgcmVxdWVzdDsgdmFsdWUgb2YgY29tbWFuZCBmaWVsZCBpcyAnYnJlYWtwb2ludExvY2F0aW9ucycuXG5cdFx0VGhlICdicmVha3BvaW50TG9jYXRpb25zJyByZXF1ZXN0IHJldHVybnMgYWxsIHBvc3NpYmxlIGxvY2F0aW9ucyBmb3Igc291cmNlIGJyZWFrcG9pbnRzIGluIGEgZ2l2ZW4gcmFuZ2UuXG5cdFx0Q2xpZW50cyBzaG91bGQgb25seSBjYWxsIHRoaXMgcmVxdWVzdCBpZiB0aGUgY2FwYWJpbGl0eSAnc3VwcG9ydHNCcmVha3BvaW50TG9jYXRpb25zUmVxdWVzdCcgaXMgdHJ1ZS5cblx0Ki9cblx0ZXhwb3J0IGludGVyZmFjZSBCcmVha3BvaW50TG9jYXRpb25zUmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICdicmVha3BvaW50TG9jYXRpb25zJztcblx0XHRhcmd1bWVudHM/OiBCcmVha3BvaW50TG9jYXRpb25zQXJndW1lbnRzO1xuXHR9XG5cblx0LyoqIEFyZ3VtZW50cyBmb3IgJ2JyZWFrcG9pbnRMb2NhdGlvbnMnIHJlcXVlc3QuICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludExvY2F0aW9uc0FyZ3VtZW50cyB7XG5cdFx0LyoqIFRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGJyZWFrcG9pbnRzOyBlaXRoZXIgJ3NvdXJjZS5wYXRoJyBvciAnc291cmNlLnJlZmVyZW5jZScgbXVzdCBiZSBzcGVjaWZpZWQuICovXG5cdFx0c291cmNlOiBTb3VyY2U7XG5cdFx0LyoqIFN0YXJ0IGxpbmUgb2YgcmFuZ2UgdG8gc2VhcmNoIHBvc3NpYmxlIGJyZWFrcG9pbnQgbG9jYXRpb25zIGluLiBJZiBvbmx5IHRoZSBsaW5lIGlzIHNwZWNpZmllZCwgdGhlIHJlcXVlc3QgcmV0dXJucyBhbGwgcG9zc2libGUgbG9jYXRpb25zIGluIHRoYXQgbGluZS4gKi9cblx0XHRsaW5lOiBudW1iZXI7XG5cdFx0LyoqIE9wdGlvbmFsIHN0YXJ0IGNvbHVtbiBvZiByYW5nZSB0byBzZWFyY2ggcG9zc2libGUgYnJlYWtwb2ludCBsb2NhdGlvbnMgaW4uIElmIG5vIHN0YXJ0IGNvbHVtbiBpcyBnaXZlbiwgdGhlIGZpcnN0IGNvbHVtbiBpbiB0aGUgc3RhcnQgbGluZSBpcyBhc3N1bWVkLiAqL1xuXHRcdGNvbHVtbj86IG51bWJlcjtcblx0XHQvKiogT3B0aW9uYWwgZW5kIGxpbmUgb2YgcmFuZ2UgdG8gc2VhcmNoIHBvc3NpYmxlIGJyZWFrcG9pbnQgbG9jYXRpb25zIGluLiBJZiBubyBlbmQgbGluZSBpcyBnaXZlbiwgdGhlbiB0aGUgZW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc3RhcnQgbGluZS4gKi9cblx0XHRlbmRMaW5lPzogbnVtYmVyO1xuXHRcdC8qKiBPcHRpb25hbCBlbmQgY29sdW1uIG9mIHJhbmdlIHRvIHNlYXJjaCBwb3NzaWJsZSBicmVha3BvaW50IGxvY2F0aW9ucyBpbi4gSWYgbm8gZW5kIGNvbHVtbiBpcyBnaXZlbiwgdGhlbiBpdCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgZW5kIGxpbmUuICovXG5cdFx0ZW5kQ29sdW1uPzogbnVtYmVyO1xuXHR9XG5cblx0LyoqIFJlc3BvbnNlIHRvICdicmVha3BvaW50TG9jYXRpb25zJyByZXF1ZXN0LlxuXHRcdENvbnRhaW5zIHBvc3NpYmxlIGxvY2F0aW9ucyBmb3Igc291cmNlIGJyZWFrcG9pbnRzLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEJyZWFrcG9pbnRMb2NhdGlvbnNSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcblx0XHRib2R5OiB7XG5cdFx0XHQvKiogU29ydGVkIHNldCBvZiBwb3NzaWJsZSBicmVha3BvaW50IGxvY2F0aW9ucy4gKi9cblx0XHRcdGJyZWFrcG9pbnRzOiBCcmVha3BvaW50TG9jYXRpb25bXTtcblx0XHR9O1xuXHR9XG5cblx0LyoqIFNldEJyZWFrcG9pbnRzIHJlcXVlc3Q7IHZhbHVlIG9mIGNvbW1hbmQgZmllbGQgaXMgJ3NldEJyZWFrcG9pbnRzJy5cblx0XHRTZXRzIG11bHRpcGxlIGJyZWFrcG9pbnRzIGZvciBhIHNpbmdsZSBzb3VyY2UgYW5kIGNsZWFycyBhbGwgcHJldmlvdXMgYnJlYWtwb2ludHMgaW4gdGhhdCBzb3VyY2UuXG5cdFx0VG8gY2xlYXIgYWxsIGJyZWFrcG9pbnQgZm9yIGEgc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGFycmF5LlxuXHRcdFdoZW4gYSBicmVha3BvaW50IGlzIGhpdCwgYSAnc3RvcHBlZCcgZXZlbnQgKHdpdGggcmVhc29uICdicmVha3BvaW50JykgaXMgZ2VuZXJhdGVkLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFNldEJyZWFrcG9pbnRzUmVxdWVzdCBleHRlbmRzIFJlcXVlc3Qge1xuXHRcdC8vIGNvbW1hbmQ6ICdzZXRCcmVha3BvaW50cyc7XG5cdFx0YXJndW1lbnRzOiBTZXRCcmVha3BvaW50c0FyZ3VtZW50cztcblx0fVxuXG5cdC8qKiBBcmd1bWVudHMgZm9yICdzZXRCcmVha3BvaW50cycgcmVxdWVzdC4gKi9cblx0ZXhwb3J0IGludGVyZmFjZSBTZXRCcmVha3BvaW50c0FyZ3VtZW50cyB7XG5cdFx0LyoqIFRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGJyZWFrcG9pbnRzOyBlaXRoZXIgJ3NvdXJjZS5wYXRoJyBvciAnc291cmNlLnJlZmVyZW5jZScgbXVzdCBiZSBzcGVjaWZpZWQuICovXG5cdFx0c291cmNlOiBTb3VyY2U7XG5cdFx0LyoqIFRoZSBjb2RlIGxvY2F0aW9ucyBvZiB0aGUgYnJlYWtwb2ludHMuICovXG5cdFx0YnJlYWtwb2ludHM/OiBTb3VyY2VCcmVha3BvaW50W107XG5cdFx0LyoqIERlcHJlY2F0ZWQ6IFRoZSBjb2RlIGxvY2F0aW9ucyBvZiB0aGUgYnJlYWtwb2ludHMuICovXG5cdFx0bGluZXM/OiBudW1iZXJbXTtcblx0XHQvKiogQSB2YWx1ZSBvZiB0cnVlIGluZGljYXRlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBoYXMgYmVlbiBtb2RpZmllZCB3aGljaCByZXN1bHRzIGluIG5ldyBicmVha3BvaW50IGxvY2F0aW9ucy4gKi9cblx0XHRzb3VyY2VNb2RpZmllZD86IGJvb2xlYW47XG5cdH1cblxuXHQvKiogUmVzcG9uc2UgdG8gJ3NldEJyZWFrcG9pbnRzJyByZXF1ZXN0LlxuXHRcdFJldHVybmVkIGlzIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggYnJlYWtwb2ludCBjcmVhdGVkIGJ5IHRoaXMgcmVxdWVzdC5cblx0XHRUaGlzIGluY2x1ZGVzIHRoZSBhY3R1YWwgY29kZSBsb2NhdGlvbiBhbmQgd2hldGhlciB0aGUgYnJlYWtwb2ludCBjb3VsZCBiZSB2ZXJpZmllZC5cblx0XHRUaGUgYnJlYWtwb2ludHMgcmV0dXJuZWQgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBlbGVtZW50cyBvZiB0aGUgJ2JyZWFrcG9pbnRzJ1xuXHRcdChvciB0aGUgZGVwcmVjYXRlZCAnbGluZXMnKSBhcnJheSBpbiB0aGUgYXJndW1lbnRzLlxuXHQqL1xuXHRleHBvcnQgaW50ZXJmYWNlIFNldEJyZWFrcG9pbnRzUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG5cdFx0Ym9keToge1xuXHRcdFx0LyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50cy5cblx0XHRcdFx0VGhlIGFycmF5IGVsZW1lbnRzIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZWxlbWVudHMgb