diff --git "a/datalab/web/lsp/text_document_node.js" "b/datalab/web/lsp/text_document_node.js" new file mode 100644--- /dev/null +++ "b/datalab/web/lsp/text_document_node.js" @@ -0,0 +1,330 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.InlayHintKind = exports.SignatureHelpTriggerKind = exports.InsertTextMode = exports.InsertTextFormat = exports.CodeActionKind = exports.TextDocumentSyncKind = exports.CompletionTriggerKind = exports.LanguageIdentifier = exports.CompletionItemKind = exports.CompletionItemTag = exports.MarkupKind = void 0; +/** + * Describes the content type that a client supports in various + * result literals like `Hover`, `ParameterInfo` or `CompletionItem`. + * + * Please note that `MarkupKinds` must not start with a `$`. This kinds + * are reserved for internal usage. + */ +var MarkupKind; +(function (MarkupKind) { + /** + * Plain text is supported as a content format + */ + MarkupKind["PlainText"] = "plaintext"; + /** + * Markdown is supported as a content format + */ + MarkupKind["Markdown"] = "markdown"; +})(MarkupKind || (exports.MarkupKind = MarkupKind = {})); +/** + * Completion item tags are extra annotations that tweak the rendering of + * a completion item. + * + * @since 3.15.0 + */ +var CompletionItemTag; +(function (CompletionItemTag) { + /** + * Render a completion as obsolete, usually using a strike-out. + */ + CompletionItemTag[CompletionItemTag["Deprecated"] = 1] = "Deprecated"; +})(CompletionItemTag || (exports.CompletionItemTag = CompletionItemTag = {})); +/** + * The kind of a completion entry. + */ +var CompletionItemKind; +(function (CompletionItemKind) { + CompletionItemKind[CompletionItemKind["Text"] = 1] = "Text"; + CompletionItemKind[CompletionItemKind["Method"] = 2] = "Method"; + CompletionItemKind[CompletionItemKind["Function"] = 3] = "Function"; + CompletionItemKind[CompletionItemKind["Constructor"] = 4] = "Constructor"; + CompletionItemKind[CompletionItemKind["Field"] = 5] = "Field"; + CompletionItemKind[CompletionItemKind["Variable"] = 6] = "Variable"; + CompletionItemKind[CompletionItemKind["Class"] = 7] = "Class"; + CompletionItemKind[CompletionItemKind["Interface"] = 8] = "Interface"; + CompletionItemKind[CompletionItemKind["Module"] = 9] = "Module"; + CompletionItemKind[CompletionItemKind["Property"] = 10] = "Property"; + CompletionItemKind[CompletionItemKind["Unit"] = 11] = "Unit"; + CompletionItemKind[CompletionItemKind["Value"] = 12] = "Value"; + CompletionItemKind[CompletionItemKind["Enum"] = 13] = "Enum"; + CompletionItemKind[CompletionItemKind["Keyword"] = 14] = "Keyword"; + CompletionItemKind[CompletionItemKind["Snippet"] = 15] = "Snippet"; + CompletionItemKind[CompletionItemKind["Color"] = 16] = "Color"; + CompletionItemKind[CompletionItemKind["File"] = 17] = "File"; + CompletionItemKind[CompletionItemKind["Reference"] = 18] = "Reference"; + CompletionItemKind[CompletionItemKind["Folder"] = 19] = "Folder"; + CompletionItemKind[CompletionItemKind["EnumMember"] = 20] = "EnumMember"; + CompletionItemKind[CompletionItemKind["Constant"] = 21] = "Constant"; + CompletionItemKind[CompletionItemKind["Struct"] = 22] = "Struct"; + CompletionItemKind[CompletionItemKind["Event"] = 23] = "Event"; + CompletionItemKind[CompletionItemKind["Operator"] = 24] = "Operator"; + CompletionItemKind[CompletionItemKind["TypeParameter"] = 25] = "TypeParameter"; +})(CompletionItemKind || (exports.CompletionItemKind = CompletionItemKind = {})); +/** + * Known language identifiers. + * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentItem + */ +var LanguageIdentifier; +(function (LanguageIdentifier) { + LanguageIdentifier["ABAP"] = "abap"; + LanguageIdentifier["WindowsBat"] = "bat"; + LanguageIdentifier["BibTeX"] = "bibtex"; + LanguageIdentifier["Clojure"] = "clojure"; + LanguageIdentifier["Coffeescript"] = "coffeescript"; + LanguageIdentifier["C"] = "c"; + LanguageIdentifier["CPlusPlus"] = "cpp"; + LanguageIdentifier["CSharp"] = "csharp"; + LanguageIdentifier["CSS"] = "css"; + LanguageIdentifier["Diff"] = "diff"; + LanguageIdentifier["Dart"] = "dart"; + LanguageIdentifier["Dockerfile"] = "dockerfile"; + LanguageIdentifier["Elixir"] = "elixir"; + LanguageIdentifier["Erlang"] = "erlang"; + LanguageIdentifier["FSharp"] = "fsharp"; + LanguageIdentifier["GitCommit"] = "git-commit"; + LanguageIdentifier["GitRebase"] = "git-rebase"; + LanguageIdentifier["Go"] = "go"; + LanguageIdentifier["Groovy"] = "groovy"; + LanguageIdentifier["Handlebars"] = "handlebars"; + LanguageIdentifier["HTML"] = "html"; + LanguageIdentifier["Ini"] = "ini"; + LanguageIdentifier["Java"] = "java"; + LanguageIdentifier["JavaScript"] = "javascript"; + LanguageIdentifier["JavaScriptReact"] = "javascriptreact"; + LanguageIdentifier["JSON"] = "json"; + LanguageIdentifier["LaTeX"] = "latex"; + LanguageIdentifier["Less"] = "less"; + LanguageIdentifier["Lua"] = "lua"; + LanguageIdentifier["Makefile"] = "makefile"; + LanguageIdentifier["Markdown"] = "markdown"; + LanguageIdentifier["ObjectiveC"] = "c"; + LanguageIdentifier["ObjectiveCPlusPlus"] = "cpp"; + LanguageIdentifier["Perl"] = "perl"; + LanguageIdentifier["Perl6"] = "perl6"; + LanguageIdentifier["PHP"] = "php"; + LanguageIdentifier["Powershell"] = "powershell"; + LanguageIdentifier["Pug"] = "jade"; + LanguageIdentifier["Python"] = "python"; + LanguageIdentifier["R"] = "r"; + LanguageIdentifier["Razor"] = "razor"; + LanguageIdentifier["Ruby"] = "ruby"; + LanguageIdentifier["Rust"] = "rust"; + LanguageIdentifier["SCSS"] = "scss"; + LanguageIdentifier["Sass"] = "syntax"; + LanguageIdentifier["Scala"] = "scala"; + LanguageIdentifier["ShaderLab"] = "shaderlab"; + LanguageIdentifier["Shell"] = "shellscript"; + LanguageIdentifier["SQL"] = "sql"; + LanguageIdentifier["Swift"] = "swift"; + LanguageIdentifier["TypeScript"] = "typescript"; + LanguageIdentifier["TypeScriptReact"] = "typescriptreact"; + LanguageIdentifier["TeX"] = "tex"; + LanguageIdentifier["VisualBasic"] = "vb"; + LanguageIdentifier["XML"] = "xml"; + LanguageIdentifier["XSL"] = "xsl"; + LanguageIdentifier["YAML"] = "yaml"; +})(LanguageIdentifier || (exports.LanguageIdentifier = LanguageIdentifier = {})); +/** + * How a completion was triggered + * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_completion + */ +var CompletionTriggerKind; +(function (CompletionTriggerKind) { + /** + * Completion was triggered by typing an identifier (24x7 code + * complete), manual invocation (e.g Ctrl+Space) or via API. + */ + CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked"; + /** + * Completion was triggered by a trigger character specified by + * the `triggerCharacters` properties of the + * `CompletionRegistrationOptions`. + */ + CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter"; + /** + * Completion was re-triggered as the current completion list is incomplete. + */ + CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions"; +})(CompletionTriggerKind || (exports.CompletionTriggerKind = CompletionTriggerKind = {})); +/** + * Defines how the host (editor) should sync document changes + * to the language server. + */ +var TextDocumentSyncKind; +(function (TextDocumentSyncKind) { + /** + * Documents should not be synced at all. + */ + TextDocumentSyncKind[TextDocumentSyncKind["None"] = 0] = "None"; + /** + * Documents are synced by always sending the full content + * of the document. + */ + TextDocumentSyncKind[TextDocumentSyncKind["Full"] = 1] = "Full"; + /** + * Documents are synced by sending the full content on open. + * After that only incremental updates to the document are + * send. + */ + TextDocumentSyncKind[TextDocumentSyncKind["Incremental"] = 2] = "Incremental"; +})(TextDocumentSyncKind || (exports.TextDocumentSyncKind = TextDocumentSyncKind = {})); +/** + * The kind of a code action. + * + * Kinds are a hierarchical list of identifiers separated by `.`, + * e.g. `"refactor.extract.function"`. + * + * The set of kinds is open and the client needs to announce the kinds it + * supports to the server during initialization. + */ +var CodeActionKind; +(function (CodeActionKind) { + /** + * Empty kind. + */ + CodeActionKind["Empty"] = ""; + /** + * Base kind for quickfix actions: 'quickfix'. + */ + CodeActionKind["QuickFix"] = "quickfix"; + /** + * Base kind for refactoring actions: 'refactor'. + */ + CodeActionKind["Refactor"] = "refactor"; + /** + * Base kind for refactoring extraction actions: 'refactor.extract'. + * + * Example extract actions: + * + * - Extract method + * - Extract function + * - Extract variable + * - Extract interface from class + * - ... + */ + CodeActionKind["RefactorExtract"] = "refactor.extract"; + /** + * Base kind for refactoring inline actions: 'refactor.inline'. + * + * Example inline actions: + * + * - Inline function + * - Inline variable + * - Inline constant + * - ... + */ + CodeActionKind["RefactorInline"] = "refactor.inline"; + /** + * Base kind for refactoring rewrite actions: 'refactor.rewrite'. + * + * Example rewrite actions: + * + * - Convert JavaScript function to class + * - Add or remove parameter + * - Encapsulate field + * - Make method static + * - Move method to base class + * - ... + */ + CodeActionKind["RefactorRewrite"] = "refactor.rewrite"; + /** + * Base kind for source actions: `source`. + * + * Source code actions apply to the entire file. + */ + CodeActionKind["Source"] = "source"; + /** + * Base kind for an organize imports source action `source.organizeImports`. + */ + CodeActionKind["SourceOrganizeImports"] = "source.organizeImports"; +})(CodeActionKind || (exports.CodeActionKind = CodeActionKind = {})); +/** + * Defines whether the insert text in a completion item should be interpreted as + * plain text or a snippet. + */ +var InsertTextFormat; +(function (InsertTextFormat) { + /** + * The primary text to be inserted is treated as a plain string. + */ + InsertTextFormat[InsertTextFormat["PlainText"] = 1] = "PlainText"; + /** + * The primary text to be inserted is treated as a snippet. + * + * A snippet can define tab stops and placeholders with `$1`, `$2` + * and `${3:foo}`. `$0` defines the final tab stop, it defaults to + * the end of the snippet. Placeholders with equal identifiers are linked, + * that is typing in one will update others too. + */ + InsertTextFormat[InsertTextFormat["Snippet"] = 2] = "Snippet"; +})(InsertTextFormat || (exports.InsertTextFormat = InsertTextFormat = {})); +/** + * How whitespace and indentation is handled during completion + * item insertion. + * + * @since 3.16.0 + */ +var InsertTextMode; +(function (InsertTextMode) { + /** + * The insertion or replace strings is taken as it is. If the + * value is multi line the lines below the cursor will be + * inserted using the indentation defined in the string value. + * The client will not apply any kind of adjustments to the + * string. + */ + InsertTextMode[InsertTextMode["asIs"] = 1] = "asIs"; + /** + * The editor adjusts leading whitespace of new lines so that + * they match the indentation up to the cursor of the line for + * which the item is accepted. + * + * Consider a line like this: <2tabs><3tabs>foo. Accepting a + * multi line completion item is indented using 2 tabs and all + * following lines inserted will be indented using 2 tabs as well. + */ + InsertTextMode[InsertTextMode["adjustIndentation"] = 2] = "adjustIndentation"; +})(InsertTextMode || (exports.InsertTextMode = InsertTextMode = {})); +/** + * How a signature help was triggered. + * + * @since 3.15.0 + */ +var SignatureHelpTriggerKind; +(function (SignatureHelpTriggerKind) { + /** + * Signature help was invoked manually by the user or by a command. + */ + SignatureHelpTriggerKind[SignatureHelpTriggerKind["Invoked"] = 1] = "Invoked"; + /** + * Signature help was triggered by a trigger character. + */ + SignatureHelpTriggerKind[SignatureHelpTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter"; + /** + * Signature help was triggered by the cursor moving or by the document + * content changing. + */ + SignatureHelpTriggerKind[SignatureHelpTriggerKind["ContentChange"] = 3] = "ContentChange"; +})(SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {})); +/** + * Inlay hint kinds. + * + * @since 3.17.0 + */ +var InlayHintKind; +(function (InlayHintKind) { + InlayHintKind[InlayHintKind["Empty"] = 0] = "Empty"; + /** + * An inlay hint that for a type annotation. + */ + InlayHintKind[InlayHintKind["Type"] = 1] = "Type"; + /** + * An inlay hint that is for a parameter. + */ + InlayHintKind[InlayHintKind["Parameter"] = 2] = "Parameter"; +})(InlayHintKind || (exports.InlayHintKind = InlayHintKind = {})); +// tslint:enable:enforce-name-casing +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dF9kb2N1bWVudF9ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZ2VuZmlsZXMvdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9sc3AvdGV4dF9kb2N1bWVudF9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThOQTs7Ozs7O0dBTUc7QUFDSCxJQUFZLFVBVVg7QUFWRCxXQUFZLFVBQVU7SUFDcEI7O09BRUc7SUFDSCxxQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxVQUFVLDBCQUFWLFVBQVUsUUFVckI7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxxRUFBYyxDQUFBO0FBQ2hCLENBQUMsRUFMVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQUs1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUIsMkRBQVEsQ0FBQTtJQUNSLCtEQUFVLENBQUE7SUFDVixtRUFBWSxDQUFBO0lBQ1oseUVBQWUsQ0FBQTtJQUNmLDZEQUFTLENBQUE7SUFDVCxtRUFBWSxDQUFBO0lBQ1osNkRBQVMsQ0FBQTtJQUNULHFFQUFhLENBQUE7SUFDYiwrREFBVSxDQUFBO0lBQ1Ysb0VBQWEsQ0FBQTtJQUNiLDREQUFTLENBQUE7SUFDVCw4REFBVSxDQUFBO0lBQ1YsNERBQVMsQ0FBQTtJQUNULGtFQUFZLENBQUE7SUFDWixrRUFBWSxDQUFBO0lBQ1osOERBQVUsQ0FBQTtJQUNWLDREQUFTLENBQUE7SUFDVCxzRUFBYyxDQUFBO0lBQ2QsZ0VBQVcsQ0FBQTtJQUNYLHdFQUFlLENBQUE7SUFDZixvRUFBYSxDQUFBO0lBQ2IsZ0VBQVcsQ0FBQTtJQUNYLDhEQUFVLENBQUE7SUFDVixvRUFBYSxDQUFBO0lBQ2IsOEVBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQTFCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBCN0I7QUEwREQ7OztHQUdHO0FBQ0gsSUFBWSxrQkEwRFg7QUExREQsV0FBWSxrQkFBa0I7SUFDNUIsbUNBQWEsQ0FBQTtJQUNiLHdDQUFrQixDQUFBO0lBQ2xCLHVDQUFpQixDQUFBO0lBQ2pCLHlDQUFtQixDQUFBO0lBQ25CLG1EQUE2QixDQUFBO0lBQzdCLDZCQUFPLENBQUE7SUFDUCx1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQixpQ0FBVyxDQUFBO0lBQ1gsbUNBQWEsQ0FBQTtJQUNiLG1DQUFhLENBQUE7SUFDYiwrQ0FBeUIsQ0FBQTtJQUN6Qix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQiw4Q0FBd0IsQ0FBQTtJQUN4Qiw4Q0FBd0IsQ0FBQTtJQUN4QiwrQkFBUyxDQUFBO0lBQ1QsdUNBQWlCLENBQUE7SUFDakIsK0NBQXlCLENBQUE7SUFDekIsbUNBQWEsQ0FBQTtJQUNiLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsK0NBQXlCLENBQUE7SUFDekIseURBQW1DLENBQUE7SUFDbkMsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixtQ0FBYSxDQUFBO0lBQ2IsaUNBQVcsQ0FBQTtJQUNYLDJDQUFxQixDQUFBO0lBQ3JCLDJDQUFxQixDQUFBO0lBQ3JCLHNDQUFnQixDQUFBO0lBQ2hCLGdEQUEwQixDQUFBO0lBQzFCLG1DQUFhLENBQUE7SUFDYixxQ0FBZSxDQUFBO0lBQ2YsaUNBQVcsQ0FBQTtJQUNYLCtDQUF5QixDQUFBO0lBQ3pCLGtDQUFZLENBQUE7SUFDWix1Q0FBaUIsQ0FBQTtJQUNqQiw2QkFBTyxDQUFBO0lBQ1AscUNBQWUsQ0FBQTtJQUNmLG1DQUFhLENBQUE7SUFDYixtQ0FBYSxDQUFBO0lBQ2IsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixxQ0FBZSxDQUFBO0lBQ2YsNkNBQXVCLENBQUE7SUFDdkIsMkNBQXFCLENBQUE7SUFDckIsaUNBQVcsQ0FBQTtJQUNYLHFDQUFlLENBQUE7SUFDZiwrQ0FBeUIsQ0FBQTtJQUN6Qix5REFBbUMsQ0FBQTtJQUNuQyxpQ0FBVyxDQUFBO0lBQ1gsd0NBQWtCLENBQUE7SUFDbEIsaUNBQVcsQ0FBQTtJQUNYLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQTFEVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBEN0I7QUF3TEQ7OztHQUdHO0FBQ0gsSUFBWSxxQkFrQlg7QUFsQkQsV0FBWSxxQkFBcUI7SUFDL0I7OztPQUdHO0lBQ0gsdUVBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCx5RkFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILHVIQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFsQlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFrQmhDO0FBcVREOzs7R0FHRztBQUNILElBQVksb0JBa0JYO0FBbEJELFdBQVksb0JBQW9CO0lBQzlCOztPQUVHO0lBQ0gsK0RBQVEsQ0FBQTtJQUVSOzs7T0FHRztJQUNILCtEQUFRLENBQUE7SUFFUjs7OztPQUlHO0lBQ0gsNkVBQWUsQ0FBQTtBQUNqQixDQUFDLEVBbEJXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBa0IvQjtBQXlSRDs7Ozs7Ozs7R0FRRztBQUNILElBQVksY0FtRVg7QUFuRUQsV0FBWSxjQUFjO0lBRXhCOztPQUVHO0lBQ0gsNEJBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsdUNBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCx1Q0FBcUIsQ0FBQTtJQUVyQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsc0RBQW9DLENBQUE7SUFFcEM7Ozs7Ozs7OztPQVNHO0lBQ0gsb0RBQWtDLENBQUE7SUFFbEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxzREFBb0MsQ0FBQTtJQUVwQzs7OztPQUlHO0lBQ0gsbUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxrRUFBZ0QsQ0FBQTtBQUNsRCxDQUFDLEVBbkVXLGNBQWMsOEJBQWQsY0FBYyxRQW1FekI7QUEwRUQ7OztHQUdHO0FBQ0gsSUFBWSxnQkFlWDtBQWZELFdBQVksZ0JBQWdCO0lBQzFCOztPQUVHO0lBQ0gsaUVBQWEsQ0FBQTtJQUViOzs7Ozs7O09BT0c7SUFDSCw2REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWZXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBZTNCO0FBd0JEOzs7OztHQUtHO0FBQ0gsSUFBWSxjQW9CWDtBQXBCRCxXQUFZLGNBQWM7SUFDeEI7Ozs7OztPQU1HO0lBQ0gsbURBQVEsQ0FBQTtJQUVSOzs7Ozs7OztPQVFHO0lBQ0gsNkVBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQXBCVyxjQUFjLDhCQUFkLGNBQWMsUUFvQnpCO0FBbU5EOzs7O0dBSUc7QUFDSCxJQUFZLHdCQWNYO0FBZEQsV0FBWSx3QkFBd0I7SUFDbEM7O09BRUc7SUFDSCw2RUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCwrRkFBb0IsQ0FBQTtJQUNwQjs7O09BR0c7SUFDSCx5RkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBZFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFjbkM7QUFtV0Q7Ozs7R0FJRztBQUNILElBQVksYUFZWDtBQVpELFdBQVksYUFBYTtJQUN2QixtREFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxpREFBUSxDQUFBO0lBRVI7O09BRUc7SUFDSCwyREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVpXLGFBQWEsNkJBQWIsYUFBYSxRQVl4QjtBQTJFRCxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwcm90b2NvbCBmcm9tICcuL3Byb3RvY29sX25vZGUnO1xuaW1wb3J0ICogYXMgd29ya3NwYWNlIGZyb20gJy4vd29ya3NwYWNlX25vZGUnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG5cbi8qKlxuICogVGV4dCBkb2N1bWVudCBzcGVjaWZpYyBjbGllbnQgY2FwYWJpbGl0aWVzLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50Q2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgc3luY2hyb25pemF0aW9uPzogVGV4dERvY3VtZW50U3luY0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvbXBsZXRpb25gIHJlcXVlc3QuXG4gICAqL1xuICBjb21wbGV0aW9uPzogQ29tcGxldGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2hvdmVyYCByZXF1ZXN0LlxuICAgKi9cbiAgaG92ZXI/OiBIb3ZlckNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3NpZ25hdHVyZUhlbHBgIHJlcXVlc3QuXG4gICAqL1xuICBzaWduYXR1cmVIZWxwPzogU2lnbmF0dXJlSGVscENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RlY2xhcmF0aW9uYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy4xNC4wXG4gICAqL1xuICBkZWNsYXJhdGlvbj86IERlY2xhcmF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvZGVmaW5pdGlvbmAgcmVxdWVzdC5cbiAgICovXG4gIGRlZmluaXRpb24/OiBEZWZpbml0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvdHlwZURlZmluaXRpb25gIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjYuMFxuICAgKi9cbiAgdHlwZURlZmluaXRpb24/OiBUeXBlRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2ltcGxlbWVudGF0aW9uYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy42LjBcbiAgICovXG4gIGltcGxlbWVudGF0aW9uPzogSW1wbGVtZW50YXRpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9yZWZlcmVuY2VzYCByZXF1ZXN0LlxuICAgKi9cbiAgcmVmZXJlbmNlcz86IFJlZmVyZW5jZUNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RvY3VtZW50SGlnaGxpZ2h0YCByZXF1ZXN0LlxuICAgKi9cbiAgZG9jdW1lbnRIaWdobGlnaHQ/OiBEb2N1bWVudEhpZ2hsaWdodENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RvY3VtZW50U3ltYm9sYCByZXF1ZXN0LlxuICAgKi9cbiAgZG9jdW1lbnRTeW1ib2w/OiBEb2N1bWVudFN5bWJvbENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvZGVBY3Rpb25gIHJlcXVlc3QuXG4gICAqL1xuICBjb2RlQWN0aW9uPzogQ29kZUFjdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvZGVMZW5zYCByZXF1ZXN0LlxuICAgKi9cbiAgY29kZUxlbnM/OiBDb2RlTGVuc0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RvY3VtZW50TGlua2AgcmVxdWVzdC5cbiAgICovXG4gIGRvY3VtZW50TGluaz86IERvY3VtZW50TGlua0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RvY3VtZW50Q29sb3JgIGFuZCB0aGVcbiAgICogYHRleHREb2N1bWVudC9jb2xvclByZXNlbnRhdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuNi4wXG4gICAqL1xuICBjb2xvclByb3ZpZGVyPzogRG9jdW1lbnRDb2xvckNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2Zvcm1hdHRpbmdgIHJlcXVlc3QuXG4gICAqL1xuICBmb3JtYXR0aW5nPzogRG9jdW1lbnRGb3JtYXR0aW5nQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvcmFuZ2VGb3JtYXR0aW5nYCByZXF1ZXN0LlxuICAgKi9cbiAgcmFuZ2VGb3JtYXR0aW5nPzogRG9jdW1lbnRSYW5nZUZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QuXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9vblR5cGVGb3JtYXR0aW5nYCByZXF1ZXN0LlxuICAgKi9cbiAgb25UeXBlRm9ybWF0dGluZz86IERvY3VtZW50T25UeXBlRm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3JlbmFtZWAgcmVxdWVzdC5cbiAgICovXG4gIHJlbmFtZT86IFJlbmFtZUNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3B1Ymxpc2hEaWFnbm9zdGljc2BcbiAgICogbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcHVibGlzaERpYWdub3N0aWNzPzogUHVibGlzaERpYWdub3N0aWNzQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvZm9sZGluZ1JhbmdlYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy4xMC4wXG4gICAqL1xuICBmb2xkaW5nUmFuZ2U/OiBGb2xkaW5nUmFuZ2VDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9pbmxheUhpbnRgIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE3LjBcbiAgICovXG4gIGlubGF5SGludD86IElubGF5SGludENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3NlbGVjdGlvblJhbmdlYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICBzZWxlY3Rpb25SYW5nZT86IFNlbGVjdGlvblJhbmdlQ2xpZW50Q2FwYWJpbGl0aWVzO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29tcGxldGlvbkNsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGNvbXBsZXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGBDb21wbGV0aW9uSXRlbWAgc3BlY2lmaWNcbiAgICogY2FwYWJpbGl0aWVzLlxuICAgKi9cbiAgY29tcGxldGlvbkl0ZW0/OiB7XG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHNuaXBwZXRzIGFzIGluc2VydCB0ZXh0LlxuICAgICAqXG4gICAgICogQSBzbmlwcGV0IGNhbiBkZWZpbmUgdGFiIHN0b3BzIGFuZCBwbGFjZWhvbGRlcnMgd2l0aCBgJDFgLCBgJDJgXG4gICAgICogYW5kIGAkezM6Zm9vfWAuIGAkMGAgZGVmaW5lcyB0aGUgZmluYWwgdGFiIHN0b3AsIGl0IGRlZmF1bHRzIHRvXG4gICAgICogdGhlIGVuZCBvZiB0aGUgc25pcHBldC5cbiAgICAgKiBQbGFjZWhvbGRlcnMgd2l0aCBlcXVhbCBpZGVudGlmaWVycyBhcmUgbGlua2VkLCBzbyB0aGF0IHR5cGluZyBpblxuICAgICAqIG9uZSB3aWxsIHVwZGF0ZSBvdGhlcnMgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBzbmlwcGV0U3VwcG9ydD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgY29tbWl0IGNoYXJhY3RlcnMgb24gYSBjb21wbGV0aW9uIGl0ZW0uXG4gICAgICovXG4gICAgY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAqIHByb3BlcnR5LiBUaGUgb3JkZXIgZGVzY3JpYmVzIHRoZSBwcmVmZXJyZWQgZm9ybWF0IG9mIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgZG9jdW1lbnRhdGlvbkZvcm1hdD86IE1hcmt1cEtpbmRbXTtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgZGVwcmVjYXRlZCBwcm9wZXJ0eSBvbiBhIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKi9cbiAgICBkZXByZWNhdGVkU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIHByZXNlbGVjdCBwcm9wZXJ0eSBvbiBhIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKi9cbiAgICBwcmVzZWxlY3RTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgdGFnIHByb3BlcnR5IG9uIGEgY29tcGxldGlvbiBpdGVtLlxuICAgICAqIENsaWVudHMgc3VwcG9ydGluZyB0YWdzIGhhdmUgdG8gaGFuZGxlIHVua25vd24gdGFncyBncmFjZWZ1bGx5LlxuICAgICAqIENsaWVudHMgZXNwZWNpYWxseSBuZWVkIHRvIHByZXNlcnZlIHVua25vd24gdGFncyB3aGVuIHNlbmRpbmdcbiAgICAgKiBhIGNvbXBsZXRpb24gaXRlbSBiYWNrIHRvIHRoZSBzZXJ2ZXIgaW4gYSByZXNvbHZlIGNhbGwuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgdGFnU3VwcG9ydD86IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQuXG4gICAgICAgKi9cbiAgICAgIHZhbHVlU2V0OiBDb21wbGV0aW9uSXRlbVRhZ1tdXG4gICAgfVxuICB9O1xuXG4gIGNvbXBsZXRpb25JdGVtS2luZD86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29tcGxldGlvbiBpdGVtIGtpbmQgdmFsdWVzIHRoZSBjbGllbnQgc3VwcG9ydHMuIFdoZW4gdGhpc1xuICAgICAqIHByb3BlcnR5IGV4aXN0cyB0aGUgY2xpZW50IGFsc28gZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGxcbiAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICogdG8gYSBkZWZhdWx0IHZhbHVlIHdoZW4gdW5rbm93bi5cbiAgICAgKlxuICAgICAqIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgdGhlIGNsaWVudCBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIGNvbXBsZXRpb24gaXRlbXMga2luZHMgZnJvbSBgVGV4dGAgdG8gYFJlZmVyZW5jZWAgYXMgZGVmaW5lZCBpblxuICAgICAqIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLlxuICAgICAqL1xuICAgIHZhbHVlU2V0PzogQ29tcGxldGlvbkl0ZW1LaW5kW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdG8gc2VuZCBhZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGFcbiAgICogYHRleHREb2N1bWVudC9jb21wbGV0aW9uYCByZXF1ZXN0LlxuICAgKi9cbiAgY29udGV4dFN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgY29udGVudCB0eXBlIHRoYXQgYSBjbGllbnQgc3VwcG9ydHMgaW4gdmFyaW91c1xuICogcmVzdWx0IGxpdGVyYWxzIGxpa2UgYEhvdmVyYCwgYFBhcmFtZXRlckluZm9gIG9yIGBDb21wbGV0aW9uSXRlbWAuXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCBgTWFya3VwS2luZHNgIG11c3Qgbm90IHN0YXJ0IHdpdGggYSBgJGAuIFRoaXMga2luZHNcbiAqIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UuXG4gKi9cbmV4cG9ydCBlbnVtIE1hcmt1cEtpbmQge1xuICAvKipcbiAgICogUGxhaW4gdGV4dCBpcyBzdXBwb3J0ZWQgYXMgYSBjb250ZW50IGZvcm1hdFxuICAgKi9cbiAgUGxhaW5UZXh0ID0gJ3BsYWludGV4dCcsXG5cbiAgLyoqXG4gICAqIE1hcmtkb3duIGlzIHN1cHBvcnRlZCBhcyBhIGNvbnRlbnQgZm9ybWF0XG4gICAqL1xuICBNYXJrZG93biA9ICdtYXJrZG93bicsXG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9ob3ZlclxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSG92ZXJDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBob3ZlciBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIGZvbGxvdyBjb250ZW50IGZvcm1hdHMgZm9yIHRoZSBjb250ZW50XG4gICAqIHByb3BlcnR5LiBUaGUgb3JkZXIgZGVzY3JpYmVzIHRoZSBwcmVmZXJyZWQgZm9ybWF0IG9mIHRoZSBjbGllbnQuXG4gICAqL1xuICBjb250ZW50Rm9ybWF0PzogTWFya3VwS2luZFtdO1xufVxuXG4vKipcbiAqIENvbXBsZXRpb24gaXRlbSB0YWdzIGFyZSBleHRyYSBhbm5vdGF0aW9ucyB0aGF0IHR3ZWFrIHRoZSByZW5kZXJpbmcgb2ZcbiAqIGEgY29tcGxldGlvbiBpdGVtLlxuICpcbiAqIEBzaW5jZSAzLjE1LjBcbiAqL1xuZXhwb3J0IGVudW0gQ29tcGxldGlvbkl0ZW1UYWcge1xuICAvKipcbiAgICogUmVuZGVyIGEgY29tcGxldGlvbiBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAqL1xuICBEZXByZWNhdGVkID0gMSxcbn1cblxuLyoqXG4gKiBUaGUga2luZCBvZiBhIGNvbXBsZXRpb24gZW50cnkuXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBsZXRpb25JdGVtS2luZCB7XG4gIFRleHQgPSAxLFxuICBNZXRob2QgPSAyLFxuICBGdW5jdGlvbiA9IDMsXG4gIENvbnN0cnVjdG9yID0gNCxcbiAgRmllbGQgPSA1LFxuICBWYXJpYWJsZSA9IDYsXG4gIENsYXNzID0gNyxcbiAgSW50ZXJmYWNlID0gOCxcbiAgTW9kdWxlID0gOSxcbiAgUHJvcGVydHkgPSAxMCxcbiAgVW5pdCA9IDExLFxuICBWYWx1ZSA9IDEyLFxuICBFbnVtID0gMTMsXG4gIEtleXdvcmQgPSAxNCxcbiAgU25pcHBldCA9IDE1LFxuICBDb2xvciA9IDE2LFxuICBGaWxlID0gMTcsXG4gIFJlZmVyZW5jZSA9IDE4LFxuICBGb2xkZXIgPSAxOSxcbiAgRW51bU1lbWJlciA9IDIwLFxuICBDb25zdGFudCA9IDIxLFxuICBTdHJ1Y3QgPSAyMixcbiAgRXZlbnQgPSAyMyxcbiAgT3BlcmF0b3IgPSAyNCxcbiAgVHlwZVBhcmFtZXRlciA9IDI1LFxufVxuXG5cbi8qKlxuICogQW4gaXRlbSB0byB0cmFuc2ZlciBhIHRleHQgZG9jdW1lbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50SXRlbVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50SXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBkb2N1bWVudCdzIFVSSS5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGRvY3VtZW50J3MgbGFuZ3VhZ2UgaWRlbnRpZmllci5cbiAgICovXG4gIGxhbmd1YWdlSWQ6IExhbmd1YWdlSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZG9jdW1lbnQgKGl0IHdpbGwgaW5jcmVhc2UgYWZ0ZXIgZWFjaFxuICAgKiBjaGFuZ2UsIGluY2x1ZGluZyB1bmRvL3JlZG8pLlxuICAgKi9cbiAgdmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgb3BlbmVkIHRleHQgZG9jdW1lbnQuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRPcGVuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRPcGVuVGV4dERvY3VtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCB0aGF0IHdhcyBvcGVuZWQuXG4gICAqL1xuICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudEl0ZW07XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRPcGVuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRPcGVuVGV4dERvY3VtZW50IGV4dGVuZHNcbiAgICBwcm90b2NvbC5Ob3RpZmljYXRpb25NZXNzYWdlPERpZE9wZW5UZXh0RG9jdW1lbnRQYXJhbXM+IHtcbiAgbWV0aG9kOiBwcm90b2NvbC5NZXRob2QuVGV4dERvY3VtZW50RGlkT3Blbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRDbG9zZVRleHREb2N1bWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnQgdGhhdCB3YXMgY2xvc2VkLlxuICAgKi9cbiAgdGV4dERvY3VtZW50OiBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xufVxuXG4vKipcbiAqIEtub3duIGxhbmd1YWdlIGlkZW50aWZpZXJzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudEl0ZW1cbiAqL1xuZXhwb3J0IGVudW0gTGFuZ3VhZ2VJZGVudGlmaWVyIHtcbiAgQUJBUCA9ICdhYmFwJyxcbiAgV2luZG93c0JhdCA9ICdiYXQnLFxuICBCaWJUZVggPSAnYmlidGV4JyxcbiAgQ2xvanVyZSA9ICdjbG9qdXJlJyxcbiAgQ29mZmVlc2NyaXB0ID0gJ2NvZmZlZXNjcmlwdCcsXG4gIEMgPSAnYycsXG4gIENQbHVzUGx1cyA9ICdjcHAnLFxuICBDU2hhcnAgPSAnY3NoYXJwJyxcbiAgQ1NTID0gJ2NzcycsXG4gIERpZmYgPSAnZGlmZicsXG4gIERhcnQgPSAnZGFydCcsXG4gIERvY2tlcmZpbGUgPSAnZG9ja2VyZmlsZScsXG4gIEVsaXhpciA9ICdlbGl4aXInLFxuICBFcmxhbmcgPSAnZXJsYW5nJyxcbiAgRlNoYXJwID0gJ2ZzaGFycCcsXG4gIEdpdENvbW1pdCA9ICdnaXQtY29tbWl0JyxcbiAgR2l0UmViYXNlID0gJ2dpdC1yZWJhc2UnLFxuICBHbyA9ICdnbycsXG4gIEdyb292eSA9ICdncm9vdnknLFxuICBIYW5kbGViYXJzID0gJ2hhbmRsZWJhcnMnLFxuICBIVE1MID0gJ2h0bWwnLFxuICBJbmkgPSAnaW5pJyxcbiAgSmF2YSA9ICdqYXZhJyxcbiAgSmF2YVNjcmlwdCA9ICdqYXZhc2NyaXB0JyxcbiAgSmF2YVNjcmlwdFJlYWN0ID0gJ2phdmFzY3JpcHRyZWFjdCcsXG4gIEpTT04gPSAnanNvbicsXG4gIExhVGVYID0gJ2xhdGV4JyxcbiAgTGVzcyA9ICdsZXNzJyxcbiAgTHVhID0gJ2x1YScsXG4gIE1ha2VmaWxlID0gJ21ha2VmaWxlJyxcbiAgTWFya2Rvd24gPSAnbWFya2Rvd24nLFxuICBPYmplY3RpdmVDID0gJ2MnLFxuICBPYmplY3RpdmVDUGx1c1BsdXMgPSAnY3BwJyxcbiAgUGVybCA9ICdwZXJsJyxcbiAgUGVybDYgPSAncGVybDYnLFxuICBQSFAgPSAncGhwJyxcbiAgUG93ZXJzaGVsbCA9ICdwb3dlcnNoZWxsJyxcbiAgUHVnID0gJ2phZGUnLFxuICBQeXRob24gPSAncHl0aG9uJyxcbiAgUiA9ICdyJyxcbiAgUmF6b3IgPSAncmF6b3InLFxuICBSdWJ5ID0gJ3J1YnknLFxuICBSdXN0ID0gJ3J1c3QnLFxuICBTQ1NTID0gJ3Njc3MnLFxuICBTYXNzID0gJ3N5bnRheCcsXG4gIFNjYWxhID0gJ3NjYWxhJyxcbiAgU2hhZGVyTGFiID0gJ3NoYWRlcmxhYicsXG4gIFNoZWxsID0gJ3NoZWxsc2NyaXB0JyxcbiAgU1FMID0gJ3NxbCcsXG4gIFN3aWZ0ID0gJ3N3aWZ0JyxcbiAgVHlwZVNjcmlwdCA9ICd0eXBlc2NyaXB0JyxcbiAgVHlwZVNjcmlwdFJlYWN0ID0gJ3R5cGVzY3JpcHRyZWFjdCcsXG4gIFRlWCA9ICd0ZXgnLFxuICBWaXN1YWxCYXNpYyA9ICd2YicsXG4gIFhNTCA9ICd4bWwnLFxuICBYU0wgPSAneHNsJyxcbiAgWUFNTCA9ICd5YW1sJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3B1Ymxpc2hEaWFnbm9zdGljc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHVibGlzaERpYWdub3N0aWNzQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsaWVudHMgYWNjZXB0cyBkaWFnbm9zdGljcyB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24uXG4gICAqL1xuICByZWxhdGVkSW5mb3JtYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIHRhZyBwcm9wZXJ0eSB0byBwcm92aWRlIG1ldGEgZGF0YSBhYm91dCBhIGRpYWdub3N0aWMuXG4gICAqIENsaWVudHMgc3VwcG9ydGluZyB0YWdzIGhhdmUgdG8gaGFuZGxlIHVua25vd24gdGFncyBncmFjZWZ1bGx5LlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB0YWdTdXBwb3J0Pzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0YWdzIHN1cHBvcnRlZCBieSB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIHZhbHVlU2V0OiBwcm90b2NvbC5EaWFnbm9zdGljVGFnW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsaWVudCBpbnRlcnByZXRzIHRoZSB2ZXJzaW9uIHByb3BlcnR5IG9mIHRoZVxuICAgKiBgdGV4dERvY3VtZW50L3B1Ymxpc2hEaWFnbm9zdGljc2Agbm90aWZpY2F0aW9uJ3MgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB2ZXJzaW9uU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGlhZ25vc3RpY3Mgbm90aWZpY2F0aW9uIGFyZSBzZW50IGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50IHRvIHNpZ25hbFxuICogcmVzdWx0cyBvZiB2YWxpZGF0aW9uIHJ1bnMuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3B1Ymxpc2hEaWFnbm9zdGljc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHVibGlzaERpYWdub3N0aWNzIGV4dGVuZHNcbiAgICBwcm90b2NvbC5Ob3RpZmljYXRpb25NZXNzYWdlPFB1Ymxpc2hEaWFnbm9zdGljc1BhcmFtcz4ge1xuICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5UZXh0RG9jdW1lbnRQdWJsaXNoRGlhZ25vc3RpY3M7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9wdWJsaXNoRGlhZ25vc3RpY3NcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFB1Ymxpc2hEaWFnbm9zdGljc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVVJJIGZvciB3aGljaCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGlzIHJlcG9ydGVkLlxuICAgKi9cbiAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkb2N1bWVudCB0aGUgZGlhZ25vc3RpY3MgYXJlIHB1Ymxpc2hlZCBmb3IuXG4gICAqIE9wdGlvbmFsLlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGl0ZW1zLlxuICAgKi9cbiAgZGlhZ25vc3RpY3M6IHByb3RvY29sLkRpYWdub3N0aWNbXTtcbn1cblxuLyoqXG4gKiBUZXh0IGRvY3VtZW50cyBhcmUgaWRlbnRpZmllZCB1c2luZyBhIFVSSS4gT24gdGhlIHByb3RvY29sIGxldmVsLCBVUklzIGFyZVxuICogcGFzc2VkIGFzIHN0cmluZ3MuIFRoZSBjb3JyZXNwb25kaW5nIEpTT04gc3RydWN0dXJlIGxvb2tzIGxpa2UgdGhpczpcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRJZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRJZGVudGlmaWVyIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGRvY3VtZW50J3MgVVJJLlxuICAgKi9cbiAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbn1cblxuLyoqXG4gKiBBbiBpZGVudGlmaWVyIHRvIGRlbm90ZSBhIHNwZWNpZmljIHZlcnNpb24gb2YgYSB0ZXh0IGRvY3VtZW50LiBUaGlzXG4gKiBpbmZvcm1hdGlvbiB1c3VhbGx5IGZsb3dzIGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciBleHRlbmRzXG4gICAgVGV4dERvY3VtZW50SWRlbnRpZmllciB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBkb2N1bWVudC5cbiAgICpcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgZG9jdW1lbnQgd2lsbCBpbmNyZWFzZSBhZnRlciBlYWNoIGNoYW5nZSxcbiAgICogaW5jbHVkaW5nIHVuZG8vcmVkby4gVGhlIG51bWJlciBkb2Vzbid0IG5lZWQgdG8gYmUgY29uc2VjdXRpdmUuXG4gICAqL1xuICB2ZXJzaW9uOiBwcm90b2NvbC5pbnRlZ2VyO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIHRleHQgZG9jdW1lbnQuXG4gICAqL1xuICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHRleHQgZG9jdW1lbnQuXG4gICAqL1xuICBwb3NpdGlvbjogcHJvdG9jb2wuUG9zaXRpb247XG59XG5cbi8qKlxuICogVGhlIENvbXBsZXRpb24gcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHRvIGNvbXB1dGVcbiAqIGNvbXBsZXRpb24gaXRlbXMgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24uIENvbXBsZXRpb24gaXRlbXMgYXJlIHByZXNlbnRlZFxuICogaW4gdGhlIEludGVsbGlTZW5zZSB1c2VyIGludGVyZmFjZS4gSWYgY29tcHV0aW5nIGZ1bGwgY29tcGxldGlvbiBpdGVtcyBpc1xuICogZXhwZW5zaXZlLCBzZXJ2ZXJzIGNhbiBhZGRpdGlvbmFsbHkgcHJvdmlkZSBhIGhhbmRsZXIgZm9yIHRoZSBjb21wbGV0aW9uXG4gKiBpdGVtIHJlc29sdmUgcmVxdWVzdCAoYGNvbXBsZXRpb25JdGVtL3Jlc29sdmVgKS4gVGhpcyByZXF1ZXN0IGlzIHNlbnQgd2hlbiBhXG4gKiBjb21wbGV0aW9uIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiBBIHR5cGljYWwgdXNlIGNhc2UgaXMgZm9yXG4gKiBleGFtcGxlOiB0aGUgYHRleHREb2N1bWVudC9jb21wbGV0aW9uYCByZXF1ZXN0IGRvZXNu4oCZdCBmaWxsIGluIHRoZVxuICogZG9jdW1lbnRhdGlvbiBwcm9wZXJ0eSBmb3IgcmV0dXJuZWQgY29tcGxldGlvbiBpdGVtcyBzaW5jZSBpdCBpcyBleHBlbnNpdmVcbiAqIHRvIGNvbXB1dGUuIFdoZW4gdGhlIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlIHRoZW4gYVxuICogYGNvbXBsZXRpb25JdGVtL3Jlc29sdmVgIHJlcXVlc3QgaXMgc2VudCB3aXRoIHRoZSBzZWxlY3RlZCBjb21wbGV0aW9uIGl0ZW1cbiAqIGFzIGEgcGFyYW1ldGVyLiBUaGUgcmV0dXJuZWQgY29tcGxldGlvbiBpdGVtIHNob3VsZCBoYXZlIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBwcm9wZXJ0eSBmaWxsZWQgaW4uIEJ5IGRlZmF1bHQgdGhlIHJlcXVlc3QgY2FuIG9ubHkgZGVsYXkgdGhlIGNvbXB1dGF0aW9uIG9mXG4gKiB0aGUgZGV0YWlsIGFuZCBkb2N1bWVudGF0aW9uIHByb3BlcnRpZXMuIFNpbmNlIDMuMTYuMCB0aGUgY2xpZW50IGNhbiBzaWduYWxcbiAqIHRoYXQgaXQgY2FuIHJlc29sdmUgbW9yZSBwcm9wZXJ0aWVzIGxhemlseS4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZVxuICogY29tcGxldGlvbkl0ZW0jcmVzb2x2ZVN1cHBvcnQgY2xpZW50IGNhcGFiaWxpdHkgd2hpY2ggbGlzdHMgYWxsIHByb3BlcnRpZXNcbiAqIHRoYXQgY2FuIGJlIGZpbGxlZCBpbiBkdXJpbmcgYSBgY29tcGxldGlvbkl0ZW0vcmVzb2x2ZWAgcmVxdWVzdC4gQWxsIG90aGVyXG4gKiBwcm9wZXJ0aWVzICh1c3VhbGx5IHNvcnRUZXh0LCBmaWx0ZXJUZXh0LCBpbnNlcnRUZXh0IGFuZCB0ZXh0RWRpdCkgbXVzdCBiZVxuICogcHJvdmlkZWQgaW4gdGhlIHRleHREb2N1bWVudC9jb21wbGV0aW9uIHJlc3BvbnNlIGFuZCBtdXN0IG5vdCBiZSBjaGFuZ2VkXG4gKiBkdXJpbmcgcmVzb2x2ZS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29tcGxldGlvbiBleHRlbmRzXG4gICAgcHJvdG9jb2wuUmVxdWVzdE1lc3NhZ2U8Q29tcGxldGlvblBhcmFtcz4ge1xuICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5UZXh0RG9jdW1lbnRDb21wbGV0aW9uO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIGF1dG9FeGVjdXRlQ2hlY2sgY2FsbC4gVGhpcyBpcyBhIGN1c3RvbSBMU1AgY29tbWFuZCB0aGF0XG4gKiB2ZXJpZmllcyB0aGF0IHRoZSBwcm92aWRlZCBjb2RlIHBhc3NlcyBhIG51bWJlciBvZiBMU1AtcmVsYXRlZCBjaGVja3MuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBdXRvRXhlY3V0ZUNoZWNrUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50SWRlbnRpZmllciB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSB0byBjaGVjayB3aGV0aGVyIGl0IGNhbiBiZSBhdXRvIGV4ZWN1dGVkIGluIHRoZSBjdXJyZW50XG4gICAqIGRvY3VtZW50LlxuICAgKi9cbiAgY29kZVRvQ2hlY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgY29kZSBhdC4gSWYgbm90IHNldCwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlXG4gICAqIG5vdGVib29rLlxuICAgKi9cbiAgcG9zaXRpb24/OiBwcm90b2NvbC5Qb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGF1dG9FeGVjdXRlQ2hlY2sgY2FsbC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEF1dG9FeGVjdXRlQ2hlY2tSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBFcnJvcnMgZm91bmQgd2hlbiBjaGVja2luZyB0aGUgY29kZSBpbiB0aGUgcmVxdWVzdC4gQW4gZW1wdHkgbGlzdCBtZWFuc1xuICAgKiB0aGF0IGFsbCBjaGVja3MgcGFzc2VkIGFuZCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVycm9yczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgY29kZSB0aGF0IHNob3VsZCBiZSBleGVjdXRlZC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNvZGVcbiAgICogdGhhdCB3YXMgcGFzc2VkIGluIHRoZSByZXF1ZXN0LCBidXQgbWF5IGluY2x1ZGUgYWRkaXRpb25hbCBlZGl0cyB0byBtYWtlXG4gICAqIHRoZSBjb2RlIHNhZmVyIHRvIHJ1bi5cbiAgICovXG4gIGNvZGVUb0V4ZWN1dGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvbXBsZXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbXBsZXRpb25QYXJhbXMgZXh0ZW5kc1xuICAgIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zLCBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zLFxuICAgIHByb3RvY29sLlBhcnRpYWxSZXN1bHRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbXBsZXRpb24gY29udGV4dC4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgY2xpZW50IHNwZWNpZmllc1xuICAgKiB0byBzZW5kIHRoaXMgdXNpbmcgdGhlIGNsaWVudCBjYXBhYmlsaXR5XG4gICAqIGBjb21wbGV0aW9uLmNvbnRleHRTdXBwb3J0ID09PSB0cnVlYFxuICAgKi9cbiAgY29udGV4dD86IENvbXBsZXRpb25Db250ZXh0O1xufVxuXG4vKipcbiAqIEhvdyBhIGNvbXBsZXRpb24gd2FzIHRyaWdnZXJlZFxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBsZXRpb25UcmlnZ2VyS2luZCB7XG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgdHlwaW5nIGFuIGlkZW50aWZpZXIgKDI0eDcgY29kZVxuICAgKiBjb21wbGV0ZSksIG1hbnVhbCBpbnZvY2F0aW9uIChlLmcgQ3RybCtTcGFjZSkgb3IgdmlhIEFQSS5cbiAgICovXG4gIEludm9rZWQgPSAxLFxuXG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSB0cmlnZ2VyIGNoYXJhY3RlciBzcGVjaWZpZWQgYnlcbiAgICogdGhlIGB0cmlnZ2VyQ2hhcmFjdGVyc2AgcHJvcGVydGllcyBvZiB0aGVcbiAgICogYENvbXBsZXRpb25SZWdpc3RyYXRpb25PcHRpb25zYC5cbiAgICovXG4gIFRyaWdnZXJDaGFyYWN0ZXIgPSAyLFxuXG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIHdhcyByZS10cmlnZ2VyZWQgYXMgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBsaXN0IGlzIGluY29tcGxldGUuXG4gICAqL1xuICBUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zID0gMyxcbn1cblxuXG4vKipcbiAqIENvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYSBjb21wbGV0aW9uXG4gKiByZXF1ZXN0IGlzIHRyaWdnZXJlZC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29tcGxldGlvbkNvbnRleHQge1xuICAvKipcbiAgICogSG93IHRoZSBjb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWQuXG4gICAqL1xuICB0cmlnZ2VyS2luZDogQ29tcGxldGlvblRyaWdnZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciBjaGFyYWN0ZXIgKGEgc2luZ2xlIGNoYXJhY3RlcikgdGhhdCBoYXMgdHJpZ2dlciBjb2RlXG4gICAqIGNvbXBsZXRlLiBJcyB1bmRlZmluZWQgaWZcbiAgICogYHRyaWdnZXJLaW5kICE9PSBDb21wbGV0aW9uVHJpZ2dlcktpbmQuVHJpZ2dlckNoYXJhY3RlcmBcbiAgICovXG4gIHRyaWdnZXJDaGFyYWN0ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGNoYW5nZSBub3RpZmljYXRpb24gaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0b1xuICogc2lnbmFsIGNoYW5nZXMgdG8gYSB0ZXh0IGRvY3VtZW50LiBCZWZvcmUgYSBjbGllbnQgY2FuIGNoYW5nZSBhIHRleHRcbiAqIGRvY3VtZW50IGl0IG11c3QgY2xhaW0gb3duZXJzaGlwIG9mIGl0cyBjb250ZW50IHVzaW5nIHRoZVxuICogdGV4dERvY3VtZW50L2RpZE9wZW4gbm90aWZpY2F0aW9uLiBJbiAyLjAgdGhlIHNoYXBlIG9mIHRoZSBwYXJhbXMgaGFzXG4gKiBjaGFuZ2VkIHRvIGluY2x1ZGUgcHJvcGVyIHZlcnNpb24gbnVtYmVycyBhbmQgbGFuZ3VhZ2UgaWRzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRDaGFuZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZVRleHREb2N1bWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnQgdGhhdCBkaWQgY2hhbmdlLiBUaGUgdmVyc2lvbiBudW1iZXIgcG9pbnRzXG4gICAqIHRvIHRoZSB2ZXJzaW9uIGFmdGVyIGFsbCBwcm92aWRlZCBjb250ZW50IGNoYW5nZXMgaGF2ZVxuICAgKiBiZWVuIGFwcGxpZWQuXG4gICAqL1xuICB0ZXh0RG9jdW1lbnQ6IFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgY29udGVudCBjaGFuZ2VzLiBUaGUgY29udGVudCBjaGFuZ2VzIGRlc2NyaWJlIHNpbmdsZSBzdGF0ZVxuICAgKiBjaGFuZ2VzIHRvIHRoZSBkb2N1bWVudC4gU28gaWYgdGhlcmUgYXJlIHR3byBjb250ZW50IGNoYW5nZXMgYzEgKGF0XG4gICAqIGFycmF5IGluZGV4IDApIGFuZCBjMiAoYXQgYXJyYXkgaW5kZXggMSkgZm9yIGEgZG9jdW1lbnQgaW4gc3RhdGUgUyB0aGVuXG4gICAqIGMxIG1vdmVzIHRoZSBkb2N1bWVudCBmcm9tIFMgdG8gUycgYW5kIGMyIGZyb20gUycgdG8gUycnLiBTbyBjMSBpc1xuICAgKiBjb21wdXRlZCBvbiB0aGUgc3RhdGUgUyBhbmQgYzIgaXMgY29tcHV0ZWQgb24gdGhlIHN0YXRlIFMnLlxuICAgKlxuICAgKiBUbyBtaXJyb3IgdGhlIGNvbnRlbnQgb2YgYSBkb2N1bWVudCB1c2luZyBjaGFuZ2UgZXZlbnRzIHVzZSB0aGUgZm9sbG93aW5nXG4gICAqIGFwcHJvYWNoOlxuICAgKiAtIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW5pdGlhbCBjb250ZW50XG4gICAqIC0gYXBwbHkgdGhlICd0ZXh0RG9jdW1lbnQvZGlkQ2hhbmdlJyBub3RpZmljYXRpb25zIGluIHRoZSBvcmRlciB5b3VcbiAgICogICByZWNlaXZlIHRoZW0uXG4gICAqIC0gYXBwbHkgdGhlIGBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRgcyBpbiBhIHNpbmdsZSBub3RpZmljYXRpb25cbiAgICogICBpbiB0aGUgb3JkZXIgeW91IHJlY2VpdmUgdGhlbS5cbiAgICovXG4gIGNvbnRlbnRDaGFuZ2VzOiBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBBbiBldmVudCBkZXNjcmliaW5nIGEgY2hhbmdlIHRvIGEgdGV4dCBkb2N1bWVudC4gSWYgcmFuZ2UgYW5kIHJhbmdlTGVuZ3RoIGFyZVxuICogb21pdHRlZCB0aGUgbmV3IHRleHQgaXMgY29uc2lkZXJlZCB0byBiZSB0aGUgZnVsbCBjb250ZW50IG9mIHRoZSBkb2N1bWVudC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfZGlkQ2hhbmdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgVGV4dERvY3VtZW50Q29udGVudENoYW5nZUV2ZW50ID0ge1xuICAvKipcbiAgICogVGhlIHJhbmdlIG9mIHRoZSBkb2N1bWVudCB0aGF0IGNoYW5nZWQuXG4gICAqL1xuICByYW5nZTogcHJvdG9jb2wuUmFuZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBsZW5ndGggb2YgdGhlIHJhbmdlIHRoYXQgZ290IHJlcGxhY2VkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgcmFuZ2UgaW5zdGVhZC5cbiAgICovXG4gIHJhbmdlTGVuZ3RoPzogcHJvdG9jb2wudWludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgdGV4dCBmb3IgdGhlIHByb3ZpZGVkIHJhbmdlLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xufSB8XG57XG4gIC8qKlxuICAgKiBUaGUgbmV3IHRleHQgb2YgdGhlIHdob2xlIGRvY3VtZW50LlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50RWRpdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50RWRpdCB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBkb2N1bWVudCB0byBjaGFuZ2UuXG4gICAqL1xuICB0ZXh0RG9jdW1lbnQ6IFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0cyB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZWRpdHM6IFRleHRFZGl0W107XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHRFZGl0XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RWRpdCB7XG4gIC8qKlxuICAgKiBUaGUgcmFuZ2Ugb2YgdGhlIHRleHQgZG9jdW1lbnQgdG8gYmUgbWFuaXB1bGF0ZWQuIFRvIGluc2VydFxuICAgKiB0ZXh0IGludG8gYSBkb2N1bWVudCBjcmVhdGUgYSByYW5nZSB3aGVyZSBzdGFydCA9PT0gZW5kLlxuICAgKi9cbiAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGJlIGluc2VydGVkLiBGb3IgZGVsZXRlIG9wZXJhdGlvbnMgdXNlIGFuXG4gICAqIGVtcHR5IHN0cmluZy5cbiAgICovXG4gIG5ld1RleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2ZvbGRpbmdSYW5nZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRm9sZGluZ1JhbmdlQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uIGZvclxuICAgKiBmb2xkaW5nIHJhbmdlIHByb3ZpZGVycy5cbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICogYEZvbGRpbmdSYW5nZVJlZ2lzdHJhdGlvbk9wdGlvbnNgIHJldHVybiB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICogc2VydmVyIGNhcGFiaWxpdHkgYXMgd2VsbC5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZvbGRpbmcgcmFuZ2VzIHRoYXQgdGhlIGNsaWVudCBwcmVmZXJzIHRvXG4gICAqIHJlY2VpdmUgcGVyIGRvY3VtZW50LlxuICAgKiBUaGUgdmFsdWUgc2VydmVzIGFzIGEgaGludCwgc2VydmVycyBhcmUgZnJlZSB0byBmb2xsb3cgdGhlIGxpbWl0LlxuICAgKi9cbiAgcmFuZ2VMaW1pdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIElmIHNldCwgdGhlIGNsaWVudCBzaWduYWxzIHRoYXQgaXQgb25seSBzdXBwb3J0cyBmb2xkaW5nIGNvbXBsZXRlIGxpbmVzLlxuICAgKiBJZiBzZXQsIHRoZSBjbGllbnQgd2lsbCBpZ25vcmUgc3BlY2lmaWVkIGBzdGFydENoYXJhY3RlcmAgYW5kXG4gICAqIGBlbmRDaGFyYWN0ZXJgIHByb3BlcnRpZXMgaW4gYSBGb2xkaW5nUmFuZ2UuXG4gICAqL1xuICBsaW5lRm9sZGluZ09ubHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCByYW5nZSBmb3JtYXR0aW5nIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlclxuICogdG8gZm9ybWF0IGEgZ2l2ZW4gcmFuZ2UgaW4gYSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50UmFuZ2VGb3JtYXR0aW5nQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgZm9ybWF0dGluZyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfc2VsZWN0aW9uUmFuZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNlbGVjdGlvblJhbmdlQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24gZm9yIHNlbGVjdGlvblxuICAgKiByYW5nZSBwcm92aWRlcnMuXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ld1xuICAgKiBgU2VsZWN0aW9uUmFuZ2VSZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NpZ25hdHVyZUhlbHBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNpZ25hdHVyZUhlbHBDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBzaWduYXR1cmUgaGVscCBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYFNpZ25hdHVyZUluZm9ybWF0aW9uYFxuICAgKiBzcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc2lnbmF0dXJlSW5mb3JtYXRpb24/OiB7XG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAqIHByb3BlcnR5LiBUaGUgb3JkZXIgZGVzY3JpYmVzIHRoZSBwcmVmZXJyZWQgZm9ybWF0IG9mIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgZG9jdW1lbnRhdGlvbkZvcm1hdD86IE1hcmt1cEtpbmRbXTtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBjYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gcGFyYW1ldGVyIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHBhcmFtZXRlckluZm9ybWF0aW9uPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHByb2Nlc3NpbmcgbGFiZWwgb2Zmc2V0cyBpbnN0ZWFkIG9mIGFcbiAgICAgICAqIHNpbXBsZSBsYWJlbCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHNpbmNlIDMuMTQuMFxuICAgICAgICovXG4gICAgICBsYWJlbE9mZnNldFN1cHBvcnQ/OiBib29sZWFuO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHRoZSBgYWN0aXZlUGFyYW1ldGVyYCBwcm9wZXJ0eSBvblxuICAgICAqIGBTaWduYXR1cmVJbmZvcm1hdGlvbmAgbGl0ZXJhbC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjAgLSBwcm9wb3NlZCBzdGF0ZVxuICAgICAqL1xuICAgIGFjdGl2ZVBhcmFtZXRlclN1cHBvcnQ/OiBib29sZWFuO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHRvIHNlbmQgYWRkaXRpb25hbCBjb250ZXh0IGluZm9ybWF0aW9uIGZvciBhXG4gICAqIGB0ZXh0RG9jdW1lbnQvc2lnbmF0dXJlSGVscGAgcmVxdWVzdC4gQSBjbGllbnQgdGhhdCBvcHRzIGludG9cbiAgICogY29udGV4dFN1cHBvcnQgd2lsbCBhbHNvIHN1cHBvcnQgdGhlIGByZXRyaWdnZXJDaGFyYWN0ZXJzYCBvblxuICAgKiBgU2lnbmF0dXJlSGVscE9wdGlvbnNgLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICBjb250ZXh0U3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9pbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW1wbGVtZW50YXRpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICogYEltcGxlbWVudGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc2AgcmV0dXJuIHZhbHVlIGZvciB0aGVcbiAgICogY29ycmVzcG9uZGluZyBzZXJ2ZXIgY2FwYWJpbGl0eSBhcyB3ZWxsLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBkZWZpbml0aW9uIGxpbmtzLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNC4wXG4gICAqL1xuICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlbmFtZSByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gYXNrIHRoZSBzZXJ2ZXIgdG9cbiAqIGNvbXB1dGUgYSB3b3Jrc3BhY2UgY2hhbmdlIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gcGVyZm9ybSBhIHdvcmtzcGFjZS13aWRlXG4gKiByZW5hbWUgb2YgYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZW5hbWVDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciByZW5hbWUgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2xpZW50IHN1cHBvcnRzIHRlc3RpbmcgZm9yIHZhbGlkaXR5IG9mIHJlbmFtZSBvcGVyYXRpb25zXG4gICAqIGJlZm9yZSBleGVjdXRpb24uXG4gICAqXG4gICAqIEBzaW5jZSB2ZXJzaW9uIDMuMTIuMFxuICAgKi9cbiAgcHJlcGFyZVN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfdHlwZURlZmluaXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFR5cGVEZWZpbml0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgbmV3IGBcbiAgICogVHlwZURlZmluaXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhZGRpdGlvbmFsIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGRlZmluaXRpb24gbGlua3MuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE0LjBcbiAgICovXG4gIGxpbmtTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGV4dCBkb2N1bWVudCBzeW5jaHJvbml6YXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBzZW5kaW5nIHdpbGwgc2F2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgd2lsbFNhdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHNlbmRpbmcgYSB3aWxsIHNhdmUgcmVxdWVzdCBhbmRcbiAgICogd2FpdHMgZm9yIGEgcmVzcG9uc2UgcHJvdmlkaW5nIHRleHQgZWRpdHMgd2hpY2ggd2lsbFxuICAgKiBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgaXQgaXMgc2F2ZWQuXG4gICAqL1xuICB3aWxsU2F2ZVdhaXRVbnRpbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgZGlkIHNhdmUgbm90aWZpY2F0aW9ucy5cbiAgICovXG4gIGRpZFNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlZmluZXMgaG93IHRoZSBob3N0IChlZGl0b3IpIHNob3VsZCBzeW5jIGRvY3VtZW50IGNoYW5nZXNcbiAqIHRvIHRoZSBsYW5ndWFnZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBlbnVtIFRleHREb2N1bWVudFN5bmNLaW5kIHtcbiAgLyoqXG4gICAqIERvY3VtZW50cyBzaG91bGQgbm90IGJlIHN5bmNlZCBhdCBhbGwuXG4gICAqL1xuICBOb25lID0gMCxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgYWx3YXlzIHNlbmRpbmcgdGhlIGZ1bGwgY29udGVudFxuICAgKiBvZiB0aGUgZG9jdW1lbnQuXG4gICAqL1xuICBGdWxsID0gMSxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgc2VuZGluZyB0aGUgZnVsbCBjb250ZW50IG9uIG9wZW4uXG4gICAqIEFmdGVyIHRoYXQgb25seSBpbmNyZW1lbnRhbCB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudCBhcmVcbiAgICogc2VuZC5cbiAgICovXG4gIEluY3JlbWVudGFsID0gMixcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcGVuIGFuZCBjbG9zZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAqIElmIG9taXR0ZWQsIG9wZW4gY2xvc2Ugbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICovXG4gIG9wZW5DbG9zZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDaGFuZ2Ugbm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgKiBTZWUgVGV4dERvY3VtZW50U3luY0tpbmQuTm9uZSwgVGV4dERvY3VtZW50U3luY0tpbmQuRnVsbCxcbiAgICogYW5kIFRleHREb2N1bWVudFN5bmNLaW5kLkluY3JlbWVudGFsLlxuICAgKiBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBUZXh0RG9jdW1lbnRTeW5jS2luZC5Ob25lLlxuICAgKi9cbiAgY2hhbmdlPzogbnVtYmVyO1xuICAvKipcbiAgICogSWYgcHJlc2VudCB3aWxsIHNhdmUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgKiBJZiBvbWl0dGVkLCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICovXG4gIHdpbGxTYXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHByZXNlbnQgd2lsbCBzYXZlIHdhaXQgdW50aWwgcmVxdWVzdHMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICogSWYgb21pdHRlZCwgdGhlIHJlcXVlc3Qgc2hvdWxkIG5vdCBiZSBzZW50LlxuICAgKi9cbiAgd2lsbFNhdmVXYWl0VW50aWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgcHJlc2VudCBzYXZlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICogSWYgb21pdHRlZCwgdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgbm90IGJlIHNlbnQuXG4gICAqL1xuICBzYXZlPzogYm9vbGVhbnxTYXZlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZFNhdmVcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNhdmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgaXMgc3VwcG9zZWQgdG8gaW5jbHVkZSB0aGUgY29udGVudCBvbiBzYXZlLlxuICAgKi9cbiAgaW5jbHVkZVRleHQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfZGVmaW5pdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGRlZmluaXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhZGRpdGlvbmFsIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGRlZmluaXRpb24gbGlua3MuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE0LjBcbiAgICovXG4gIGxpbmtTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RlY2xhcmF0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEZWNsYXJhdGlvbkNsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGRlY2xhcmF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ld1xuICAgKiBgRGVjbGFyYXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhZGRpdGlvbmFsIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGRlY2xhcmF0aW9uIGxpbmtzLlxuICAgKi9cbiAgbGlua1N1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfZG9jdW1lbnRIaWdobGlnaHRcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50SGlnaGxpZ2h0Q2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgZG9jdW1lbnQgaGlnaGxpZ2h0IHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9yZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZWZlcmVuY2VDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciByZWZlcmVuY2VzIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kb2N1bWVudFN5bWJvbFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBkb2N1bWVudCBzeW1ib2wgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGUgYFN5bWJvbEtpbmRgIGluIHRoZVxuICAgKiBgdGV4dERvY3VtZW50L2RvY3VtZW50U3ltYm9sYCByZXF1ZXN0LlxuICAgKi9cbiAgc3ltYm9sS2luZD86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ltYm9sIGtpbmQgdmFsdWVzIHRoZSBjbGllbnQgc3VwcG9ydHMuIFdoZW4gdGhpc1xuICAgICAqIHByb3BlcnR5IGV4aXN0cyB0aGUgY2xpZW50IGFsc28gZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGxcbiAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICogdG8gYSBkZWZhdWx0IHZhbHVlIHdoZW4gdW5rbm93bi5cbiAgICAgKlxuICAgICAqIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgdGhlIGNsaWVudCBvbmx5IHN1cHBvcnRzXG4gICAgICogdGhlIHN5bWJvbCBraW5kcyBmcm9tIGBGaWxlYCB0byBgQXJyYXlgIGFzIGRlZmluZWQgaW5cbiAgICAgKiB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC5cbiAgICAgKi9cbiAgICB2YWx1ZVNldD86IHByb3RvY29sLlN5bWJvbEtpbmRbXTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBoaWVyYXJjaGljYWwgZG9jdW1lbnQgc3ltYm9scy5cbiAgICovXG4gIGhpZXJhcmNoaWNhbERvY3VtZW50U3ltYm9sU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGFncyBvbiBgU3ltYm9sSW5mb3JtYXRpb25gLiBUYWdzIGFyZSBzdXBwb3J0ZWQgb25cbiAgICogYERvY3VtZW50U3ltYm9sYCBpZiBgaGllcmFyY2hpY2FsRG9jdW1lbnRTeW1ib2xTdXBwb3J0YCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogQ2xpZW50cyBzdXBwb3J0aW5nIHRhZ3MgaGF2ZSB0byBoYW5kbGUgdW5rbm93biB0YWdzIGdyYWNlZnVsbHkuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE2LjBcbiAgICovXG4gIHRhZ1N1cHBvcnQ/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgdmFsdWVTZXQ6IHByb3RvY29sLlN5bWJvbFRhZ1tdXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYW4gYWRkaXRpb25hbCBsYWJlbCBwcmVzZW50ZWQgaW4gdGhlIFVJIHdoZW5cbiAgICogcmVnaXN0ZXJpbmcgYSBkb2N1bWVudCBzeW1ib2wgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE2LjBcbiAgICovXG4gIGxhYmVsU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IG9uIHR5cGUgZm9ybWF0dGluZyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAqIHRvIGZvcm1hdCBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHR5cGluZy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50T25UeXBlRm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9uIHR5cGUgZm9ybWF0dGluZyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBmb3JtYXR0aW5nIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0b1xuICogZm9ybWF0IGEgd2hvbGUgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudEZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBmb3JtYXR0aW5nIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGNvbG9yIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0byBsaXN0IGFsbFxuICogY29sb3IgcmVmZXJlbmNlcyBmb3VuZCBpbiBhIGdpdmVuIHRleHQgZG9jdW1lbnQuIEFsb25nIHdpdGggdGhlIHJhbmdlLCBhXG4gKiBjb2xvciB2YWx1ZSBpbiBSR0IgaXMgcmV0dXJuZWQuIENsaWVudHMgY2FuIHVzZSB0aGUgcmVzdWx0IHRvIGRlY29yYXRlIGNvbG9yXG4gKiByZWZlcmVuY2VzIGluIGFuIGVkaXRvci4gRm9yIGV4YW1wbGU6IENvbG9yIGJveGVzIHNob3dpbmcgdGhlIGFjdHVhbCBjb2xvclxuICogbmV4dCB0byB0aGUgcmVmZXJlbmNlIFNob3cgYSBjb2xvciBwaWNrZXIgd2hlbiBhIGNvbG9yIHJlZmVyZW5jZSBpcyBlZGl0ZWRcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50Q29sb3JDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBkb2N1bWVudCBjb2xvciBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBsaW5rcyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gcmVxdWVzdFxuICogdGhlIGxvY2F0aW9uIG9mIGxpbmtzIGluIGEgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudExpbmtDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBkb2N1bWVudCBsaW5rIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgYHRvb2x0aXBgIHByb3BlcnR5IG9uIGBEb2N1bWVudExpbmtgLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB0b29sdGlwU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIENvZGVMZW5zIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0byBjb21wdXRlXG4gKiBDb2RlTGVucyBmb3IgYSBnaXZlbiB0ZXh0IGRvY3VtZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29kZUxlbnNDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBDb2RlTGVucyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfaW5sYXlIaW50XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJbmxheUhpbnRDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBpbmxheSBoaW50cyBzdXBwb3J0IGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIGEgY2xpZW50IGNhbiByZXNvbHZlIGxhemlseSBvbiBhbiBpbmxheVxuICAgKiBoaW50LlxuICAgKi9cbiAgcmVzb2x2ZVN1cHBvcnQ/OiB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydGllcyB0aGF0IGEgY2xpZW50IGNhbiByZXNvbHZlIGxhemlseS5cbiAgICAgKi9cbiAgICBwcm9wZXJ0aWVzOiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvZGVBY3Rpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvZGVBY3Rpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogV2hldGhlciBjb2RlIGFjdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGNvZGUgYWN0aW9uIGxpdGVyYWxzIGFzIGEgdmFsaWRcbiAgICogcmVzcG9uc2Ugb2YgdGhlIGB0ZXh0RG9jdW1lbnQvY29kZUFjdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuOC4wXG4gICAqL1xuICBjb2RlQWN0aW9uTGl0ZXJhbFN1cHBvcnQ/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgYWN0aW9uIGtpbmQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZVxuICAgICAqIHNldC5cbiAgICAgKi9cbiAgICBjb2RlQWN0aW9uS2luZDoge1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjb2RlIGFjdGlvbiBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgICAqIHByb3BlcnR5IGV4aXN0cyB0aGUgY2xpZW50IGFsc28gZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGxcbiAgICAgICAqIGhhbmRsZSB2YWx1ZXMgb3V0c2lkZSBpdHMgc2V0IGdyYWNlZnVsbHkgYW5kIGZhbGxzIGJhY2tcbiAgICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICAgKi9cbiAgICAgIHZhbHVlU2V0OiBDb2RlQWN0aW9uS2luZFtdO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY29kZSBhY3Rpb24gc3VwcG9ydHMgdGhlIGBpc1ByZWZlcnJlZGAgcHJvcGVydHkuXG4gICAqIEBzaW5jZSAzLjE1LjBcbiAgICovXG4gIGlzUHJlZmVycmVkU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYSBjb2RlIGFjdGlvbi5cbiAqXG4gKiBLaW5kcyBhcmUgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBpZGVudGlmaWVycyBzZXBhcmF0ZWQgYnkgYC5gLFxuICogZS5nLiBgXCJyZWZhY3Rvci5leHRyYWN0LmZ1bmN0aW9uXCJgLlxuICpcbiAqIFRoZSBzZXQgb2Yga2luZHMgaXMgb3BlbiBhbmQgdGhlIGNsaWVudCBuZWVkcyB0byBhbm5vdW5jZSB0aGUga2luZHMgaXRcbiAqIHN1cHBvcnRzIHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZW51bSBDb2RlQWN0aW9uS2luZCB7XG5cbiAgLyoqXG4gICAqIEVtcHR5IGtpbmQuXG4gICAqL1xuICBFbXB0eSA9ICcnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHF1aWNrZml4IGFjdGlvbnM6ICdxdWlja2ZpeCcuXG4gICAqL1xuICBRdWlja0ZpeCA9ICdxdWlja2ZpeCcsXG5cbiAgLyoqXG4gICAqIEJhc2Uga2luZCBmb3IgcmVmYWN0b3JpbmcgYWN0aW9uczogJ3JlZmFjdG9yJy5cbiAgICovXG4gIFJlZmFjdG9yID0gJ3JlZmFjdG9yJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBleHRyYWN0aW9uIGFjdGlvbnM6ICdyZWZhY3Rvci5leHRyYWN0Jy5cbiAgICpcbiAgICogRXhhbXBsZSBleHRyYWN0IGFjdGlvbnM6XG4gICAqXG4gICAqIC0gRXh0cmFjdCBtZXRob2RcbiAgICogLSBFeHRyYWN0IGZ1bmN0aW9uXG4gICAqIC0gRXh0cmFjdCB2YXJpYWJsZVxuICAgKiAtIEV4dHJhY3QgaW50ZXJmYWNlIGZyb20gY2xhc3NcbiAgICogLSAuLi5cbiAgICovXG4gIFJlZmFjdG9yRXh0cmFjdCA9ICdyZWZhY3Rvci5leHRyYWN0JyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBpbmxpbmUgYWN0aW9uczogJ3JlZmFjdG9yLmlubGluZScuXG4gICAqXG4gICAqIEV4YW1wbGUgaW5saW5lIGFjdGlvbnM6XG4gICAqXG4gICAqIC0gSW5saW5lIGZ1bmN0aW9uXG4gICAqIC0gSW5saW5lIHZhcmlhYmxlXG4gICAqIC0gSW5saW5lIGNvbnN0YW50XG4gICAqIC0gLi4uXG4gICAqL1xuICBSZWZhY3RvcklubGluZSA9ICdyZWZhY3Rvci5pbmxpbmUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIHJld3JpdGUgYWN0aW9uczogJ3JlZmFjdG9yLnJld3JpdGUnLlxuICAgKlxuICAgKiBFeGFtcGxlIHJld3JpdGUgYWN0aW9uczpcbiAgICpcbiAgICogLSBDb252ZXJ0IEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gY2xhc3NcbiAgICogLSBBZGQgb3IgcmVtb3ZlIHBhcmFtZXRlclxuICAgKiAtIEVuY2Fwc3VsYXRlIGZpZWxkXG4gICAqIC0gTWFrZSBtZXRob2Qgc3RhdGljXG4gICAqIC0gTW92ZSBtZXRob2QgdG8gYmFzZSBjbGFzc1xuICAgKiAtIC4uLlxuICAgKi9cbiAgUmVmYWN0b3JSZXdyaXRlID0gJ3JlZmFjdG9yLnJld3JpdGUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHNvdXJjZSBhY3Rpb25zOiBgc291cmNlYC5cbiAgICpcbiAgICogU291cmNlIGNvZGUgYWN0aW9ucyBhcHBseSB0byB0aGUgZW50aXJlIGZpbGUuXG4gICAqL1xuICBTb3VyY2UgPSAnc291cmNlJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciBhbiBvcmdhbml6ZSBpbXBvcnRzIHNvdXJjZSBhY3Rpb24gYHNvdXJjZS5vcmdhbml6ZUltcG9ydHNgLlxuICAgKi9cbiAgU291cmNlT3JnYW5pemVJbXBvcnRzID0gJ3NvdXJjZS5vcmdhbml6ZUltcG9ydHMnLFxufVxuXG4vKipcbiAqIENvbnRhaW5zIGFkZGl0aW9uYWwgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaFxuICogYSBjb2RlIGFjdGlvbiBpcyBydW4uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlQWN0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBkaWFnbm9zdGljcyBrbm93biBvbiB0aGUgY2xpZW50IHNpZGUgb3ZlcmxhcHBpbmcgdGhlIHJhbmdlXG4gICAqIHByb3ZpZGVkIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvZGVBY3Rpb25gIHJlcXVlc3QuXG4gICAqIFRoZXkgYXJlIHByb3ZpZGVkIHNvIHRoYXQgdGhlIHNlcnZlciBrbm93cyB3aGljaCBlcnJvcnMgYXJlIGN1cnJlbnRseVxuICAgKiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiByYW5nZS4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXRcbiAgICogdGhlc2UgYWNjdXJhdGVseSByZWZsZWN0IHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgcmVzb3VyY2UuXG4gICAqIFRoZSBwcmltYXJ5IHBhcmFtZXRlciB0byBjb21wdXRlIGNvZGUgYWN0aW9ucyBpcyB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gICAqL1xuICBkaWFnbm9zdGljczogcHJvdG9jb2wuRGlhZ25vc3RpY1tdO1xuXG4gIC8qKlxuICAgKiBSZXF1ZXN0ZWQga2luZCBvZiBhY3Rpb25zIHRvIHJldHVybi5cbiAgICpcbiAgICogQWN0aW9ucyBub3Qgb2YgdGhpcyBraW5kIGFyZSBmaWx0ZXJlZCBvdXQgYnkgdGhlIGNsaWVudCBiZWZvcmVcbiAgICogYmVpbmcgc2hvd24sIHNvIHNlcnZlcnMgY2FuIG9taXQgY29tcHV0aW5nIHRoZW0uXG4gICAqL1xuICBvbmx5PzogQ29kZUFjdGlvbktpbmRbXTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3B1Ymxpc2hEaWFnbm9zdGljc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHVibGlzaERpYWdub3N0aWNzQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsaWVudHMgYWNjZXB0cyBkaWFnbm9zdGljcyB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24uXG4gICAqL1xuICByZWxhdGVkSW5mb3JtYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIHRhZyBwcm9wZXJ0eSB0byBwcm92aWRlIG1ldGEgZGF0YSBhYm91dCBhIGRpYWdub3N0aWMuXG4gICAqIENsaWVudHMgc3VwcG9ydGluZyB0YWdzIGhhdmUgdG8gaGFuZGxlIHVua25vd24gdGFncyBncmFjZWZ1bGx5LlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB0YWdTdXBwb3J0Pzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0YWdzIHN1cHBvcnRlZCBieSB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIHZhbHVlU2V0OiBwcm90b2NvbC5EaWFnbm9zdGljVGFnW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsaWVudCBpbnRlcnByZXRzIHRoZSB2ZXJzaW9uIHByb3BlcnR5IG9mIHRoZVxuICAgKiBgdGV4dERvY3VtZW50L3B1Ymxpc2hEaWFnbm9zdGljc2Agbm90aWZpY2F0aW9uJ3MgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB2ZXJzaW9uU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgW2NvbXBsZXRpb24gaXRlbXNdKCNDb21wbGV0aW9uSXRlbSkgdG8gYmVcbiAqIHByZXNlbnRlZCBpbiB0aGUgZWRpdG9yLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29tcGxldGlvbkxpc3Qge1xuICAvKipcbiAgICogVGhpcyBsaXN0IGl0IG5vdCBjb21wbGV0ZS4gRnVydGhlciB0eXBpbmcgc2hvdWxkIHJlc3VsdCBpbiByZWNvbXB1dGluZ1xuICAgKiB0aGlzIGxpc3QuXG4gICAqL1xuICBpc0luY29tcGxldGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wbGV0aW9uIGl0ZW1zLlxuICAgKi9cbiAgaXRlbXM6IENvbXBsZXRpb25JdGVtW107XG59XG5cbi8qKlxuICogRGVmaW5lcyB3aGV0aGVyIHRoZSBpbnNlcnQgdGV4dCBpbiBhIGNvbXBsZXRpb24gaXRlbSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXNcbiAqIHBsYWluIHRleHQgb3IgYSBzbmlwcGV0LlxuICovXG5leHBvcnQgZW51bSBJbnNlcnRUZXh0Rm9ybWF0IHtcbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IHRleHQgdG8gYmUgaW5zZXJ0ZWQgaXMgdHJlYXRlZCBhcyBhIHBsYWluIHN0cmluZy5cbiAgICovXG4gIFBsYWluVGV4dCA9IDEsXG5cbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IHRleHQgdG8gYmUgaW5zZXJ0ZWQgaXMgdHJlYXRlZCBhcyBhIHNuaXBwZXQuXG4gICAqXG4gICAqIEEgc25pcHBldCBjYW4gZGVmaW5lIHRhYiBzdG9wcyBhbmQgcGxhY2Vob2xkZXJzIHdpdGggYCQxYCwgYCQyYFxuICAgKiBhbmQgYCR7Mzpmb299YC4gYCQwYCBkZWZpbmVzIHRoZSBmaW5hbCB0YWIgc3RvcCwgaXQgZGVmYXVsdHMgdG9cbiAgICogdGhlIGVuZCBvZiB0aGUgc25pcHBldC4gUGxhY2Vob2xkZXJzIHdpdGggZXF1YWwgaWRlbnRpZmllcnMgYXJlIGxpbmtlZCxcbiAgICogdGhhdCBpcyB0eXBpbmcgaW4gb25lIHdpbGwgdXBkYXRlIG90aGVycyB0b28uXG4gICAqL1xuICBTbmlwcGV0ID0gMixcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWwgdGV4dCBlZGl0IHRvIHByb3ZpZGUgYW4gaW5zZXJ0IGFuZCBhIHJlcGxhY2Ugb3BlcmF0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjE2LjBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluc2VydFJlcGxhY2VFZGl0IHtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQuXG4gICAqL1xuICBuZXdUZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSBpZiB0aGUgaW5zZXJ0IGlzIHJlcXVlc3RlZFxuICAgKi9cbiAgaW5zZXJ0OiBwcm90b2NvbC5SYW5nZTtcblxuICAvKipcbiAgICogVGhlIHJhbmdlIGlmIHRoZSByZXBsYWNlIGlzIHJlcXVlc3RlZC5cbiAgICovXG4gIHJlcGxhY2U6IHByb3RvY29sLlJhbmdlO1xufVxuXG4vKipcbiAqIEhvdyB3aGl0ZXNwYWNlIGFuZCBpbmRlbnRhdGlvbiBpcyBoYW5kbGVkIGR1cmluZyBjb21wbGV0aW9uXG4gKiBpdGVtIGluc2VydGlvbi5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCBlbnVtIEluc2VydFRleHRNb2RlIHtcbiAgLyoqXG4gICAqIFRoZSBpbnNlcnRpb24gb3IgcmVwbGFjZSBzdHJpbmdzIGlzIHRha2VuIGFzIGl0IGlzLiBJZiB0aGVcbiAgICogdmFsdWUgaXMgbXVsdGkgbGluZSB0aGUgbGluZXMgYmVsb3cgdGhlIGN1cnNvciB3aWxsIGJlXG4gICAqIGluc2VydGVkIHVzaW5nIHRoZSBpbmRlbnRhdGlvbiBkZWZpbmVkIGluIHRoZSBzdHJpbmcgdmFsdWUuXG4gICAqIFRoZSBjbGllbnQgd2lsbCBub3QgYXBwbHkgYW55IGtpbmQgb2YgYWRqdXN0bWVudHMgdG8gdGhlXG4gICAqIHN0cmluZy5cbiAgICovXG4gIGFzSXMgPSAxLFxuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGFkanVzdHMgbGVhZGluZyB3aGl0ZXNwYWNlIG9mIG5ldyBsaW5lcyBzbyB0aGF0XG4gICAqIHRoZXkgbWF0Y2ggdGhlIGluZGVudGF0aW9uIHVwIHRvIHRoZSBjdXJzb3Igb2YgdGhlIGxpbmUgZm9yXG4gICAqIHdoaWNoIHRoZSBpdGVtIGlzIGFjY2VwdGVkLlxuICAgKlxuICAgKiBDb25zaWRlciBhIGxpbmUgbGlrZSB0aGlzOiA8MnRhYnM+PGN1cnNvcj48M3RhYnM+Zm9vLiBBY2NlcHRpbmcgYVxuICAgKiBtdWx0aSBsaW5lIGNvbXBsZXRpb24gaXRlbSBpcyBpbmRlbnRlZCB1c2luZyAyIHRhYnMgYW5kIGFsbFxuICAgKiBmb2xsb3dpbmcgbGluZXMgaW5zZXJ0ZWQgd2lsbCBiZSBpbmRlbnRlZCB1c2luZyAyIHRhYnMgYXMgd2VsbC5cbiAgICovXG4gIGFkanVzdEluZGVudGF0aW9uID0gMixcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvbXBsZXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbXBsZXRpb25JdGVtIHtcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBvZiB0aGlzIGNvbXBsZXRpb24gaXRlbS4gQnkgZGVmYXVsdFxuICAgKiBhbHNvIHRoZSB0ZXh0IHRoYXQgaXMgaW5zZXJ0ZWQgd2hlbiBzZWxlY3RpbmdcbiAgICogdGhpcyBjb21wbGV0aW9uLlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhpcyBjb21wbGV0aW9uIGl0ZW0uIEJhc2VkIG9mIHRoZSBraW5kXG4gICAqIGFuIGljb24gaXMgY2hvc2VuIGJ5IHRoZSBlZGl0b3IuIFRoZSBzdGFuZGFyZGl6ZWQgc2V0XG4gICAqIG9mIGF2YWlsYWJsZSB2YWx1ZXMgaXMgZGVmaW5lZCBpbiBgQ29tcGxldGlvbkl0ZW1LaW5kYC5cbiAgICovXG4gIGtpbmQ/OiBDb21wbGV0aW9uSXRlbUtpbmQ7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoaXMgY29tcGxldGlvbiBpdGVtLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICB0YWdzPzogQ29tcGxldGlvbkl0ZW1UYWdbXTtcblxuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gICAqIGFib3V0IHRoaXMgaXRlbSwgbGlrZSB0eXBlIG9yIHN5bWJvbCBpbmZvcm1hdGlvbi5cbiAgICovXG4gIGRldGFpbD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgZG9jLWNvbW1lbnQuXG4gICAqL1xuICBkb2N1bWVudGF0aW9uPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGlzIGl0ZW0gaXMgZGVwcmVjYXRlZC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGB0YWdzYCBpbnN0ZWFkIGlmIHN1cHBvcnRlZC5cbiAgICovXG4gIGRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhpcyBpdGVtIHdoZW4gc2hvd2luZy5cbiAgICpcbiAgICogKk5vdGUqIHRoYXQgb25seSBvbmUgY29tcGxldGlvbiBpdGVtIGNhbiBiZSBzZWxlY3RlZCBhbmQgdGhhdCB0aGVcbiAgICogdG9vbCAvIGNsaWVudCBkZWNpZGVzIHdoaWNoIGl0ZW0gdGhhdCBpcy4gVGhlIHJ1bGUgaXMgdGhhdCB0aGUgKmZpcnN0KlxuICAgKiBpdGVtIG9mIHRob3NlIHRoYXQgbWF0Y2ggYmVzdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHByZXNlbGVjdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBjb21wYXJpbmcgdGhpcyBpdGVtXG4gICAqIHdpdGggb3RoZXIgaXRlbXMuIFdoZW4gYGZhbHN5YCB0aGUgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHNvcnRUZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZmlsdGVyaW5nIGEgc2V0IG9mXG4gICAqIGNvbXBsZXRpb24gaXRlbXMuIFdoZW4gYGZhbHN5YCB0aGUgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIGZpbHRlclRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGludG8gYSBkb2N1bWVudCB3aGVuIHNlbGVjdGluZ1xuICAgKiB0aGlzIGNvbXBsZXRpb24uIFdoZW4gYGZhbHN5YCB0aGUgbGFiZWwgaXMgdXNlZC5cbiAgICpcbiAgICogVGhlIGBpbnNlcnRUZXh0YCBpcyBzdWJqZWN0IHRvIGludGVycHJldGF0aW9uIGJ5IHRoZSBjbGllbnQgc2lkZS5cbiAgICogU29tZSB0b29scyBtaWdodCBub3QgdGFrZSB0aGUgc3RyaW5nIGxpdGVyYWxseS4gRm9yIGV4YW1wbGVcbiAgICogVlMgQ29kZSB3aGVuIGNvZGUgY29tcGxldGUgaXMgcmVxdWVzdGVkIGluIHRoaXMgZXhhbXBsZVxuICAgKiBgY29uPGN1cnNvciBwb3NpdGlvbj5gIGFuZCBhIGNvbXBsZXRpb24gaXRlbSB3aXRoIGFuIGBpbnNlcnRUZXh0YCBvZlxuICAgKiBgY29uc29sZWAgaXMgcHJvdmlkZWQgaXQgd2lsbCBvbmx5IGluc2VydCBgc29sZWAuIFRoZXJlZm9yZSBpdCBpc1xuICAgKiByZWNvbW1lbmRlZCB0byB1c2UgYHRleHRFZGl0YCBpbnN0ZWFkIHNpbmNlIGl0IGF2b2lkcyBhZGRpdGlvbmFsIGNsaWVudFxuICAgKiBzaWRlIGludGVycHJldGF0aW9uLlxuICAgKi9cbiAgaW5zZXJ0VGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiB0aGUgaW5zZXJ0IHRleHQuIFRoZSBmb3JtYXQgYXBwbGllcyB0byBib3RoIHRoZVxuICAgKiBgaW5zZXJ0VGV4dGAgcHJvcGVydHkgYW5kIHRoZSBgbmV3VGV4dGAgcHJvcGVydHkgb2YgYSBwcm92aWRlZFxuICAgKiBgdGV4dEVkaXRgLiBJZiBvbWl0dGVkIGRlZmF1bHRzIHRvIGBJbnNlcnRUZXh0Rm9ybWF0LlBsYWluVGV4dGAuXG4gICAqL1xuICBpbnNlcnRUZXh0Rm9ybWF0PzogSW5zZXJ0VGV4dEZvcm1hdDtcblxuICAvKipcbiAgICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAgICogaXRlbSBpbnNlcnRpb24uIElmIG5vdCBwcm92aWRlZCB0aGUgY2xpZW50J3MgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uXG4gICAqIHRoZSBgdGV4dERvY3VtZW50LmNvbXBsZXRpb24uaW5zZXJ0VGV4dE1vZGVgIGNsaWVudCBjYXBhYmlsaXR5LlxuICAgKlxuICAgKiBAc2luY2UgMy4xNi4wXG4gICAqL1xuICBpbnNlcnRUZXh0TW9kZT86IEluc2VydFRleHRNb2RlO1xuXG4gIC8qKlxuICAgKiBBbiBlZGl0IHdoaWNoIGlzIGFwcGxpZWQgdG8gYSBkb2N1bWVudCB3aGVuIHNlbGVjdGluZyB0aGlzIGNvbXBsZXRpb24uXG4gICAqIFdoZW4gYW4gZWRpdCBpcyBwcm92aWRlZCB0aGUgdmFsdWUgb2YgYGluc2VydFRleHRgIGlzIGlnbm9yZWQuXG4gICAqXG4gICAqICpOb3RlOiogVGhlIHJhbmdlIG9mIHRoZSBlZGl0IG11c3QgYmUgYSBzaW5nbGUgbGluZSByYW5nZSBhbmQgaXQgbXVzdFxuICAgKiBjb250YWluIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICpcbiAgICogTW9zdCBlZGl0b3JzIHN1cHBvcnQgdHdvIGRpZmZlcmVudCBvcGVyYXRpb25zIHdoZW4gYWNjZXB0aW5nIGEgY29tcGxldGlvblxuICAgKiBpdGVtLiBPbmUgaXMgdG8gaW5zZXJ0IGEgY29tcGxldGlvbiB0ZXh0IGFuZCB0aGUgb3RoZXIgaXMgdG8gcmVwbGFjZSBhblxuICAgKiBleGlzdGluZyB0ZXh0IHdpdGggYSBjb21wbGV0aW9uIHRleHQuIFNpbmNlIHRoaXMgY2FuIHVzdWFsbHkgbm90IGJlXG4gICAqIHByZWRldGVybWluZWQgYnkgYSBzZXJ2ZXIgaXQgY2FuIHJlcG9ydCBib3RoIHJhbmdlcy4gQ2xpZW50cyBuZWVkIHRvXG4gICAqIHNpZ25hbCBzdXBwb3J0IGZvciBgSW5zZXJ0UmVwbGFjZUVkaXRzYCB2aWEgdGhlXG4gICAqIGB0ZXh0RG9jdW1lbnQuY29tcGxldGlvbi5pbnNlcnRSZXBsYWNlU3VwcG9ydGAgY2xpZW50IGNhcGFiaWxpdHlcbiAgICogcHJvcGVydHkuXG4gICAqXG4gICAqICpOb3RlIDE6KiBUaGUgdGV4dCBlZGl0J3MgcmFuZ2UgYXMgd2VsbCBhcyBib3RoIHJhbmdlcyBmcm9tIGFuIGluc2VydFxuICAgKiByZXBsYWNlIGVkaXQgbXVzdCBiZSBhIFtzaW5nbGUgbGluZV0gYW5kIHRoZXkgbXVzdCBjb250YWluIHRoZSBwb3NpdGlvblxuICAgKiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICogKk5vdGUgMjoqIElmIGFuIGBJbnNlcnRSZXBsYWNlRWRpdGAgaXMgcmV0dXJuZWQgdGhlIGVkaXQncyBpbnNlcnQgcmFuZ2VcbiAgICogbXVzdCBiZSBhIHByZWZpeCBvZiB0aGUgZWRpdCdzIHJlcGxhY2UgcmFuZ2UsIHRoYXQgbWVhbnMgaXQgbXVzdCBiZVxuICAgKiBjb250YWluZWQgYW5kIHN0YXJ0aW5nIGF0IHRoZSBzYW1lIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAc2luY2UgMy4xNi4wIGFkZGl0aW9uYWwgdHlwZSBgSW5zZXJ0UmVwbGFjZUVkaXRgXG4gICAqL1xuICB0ZXh0RWRpdD86IFRleHRFZGl0fEluc2VydFJlcGxhY2VFZGl0O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBhcnJheSBvZiBhZGRpdGlvbmFsIHRleHQgZWRpdHMgdGhhdCBhcmUgYXBwbGllZCB3aGVuXG4gICAqIHNlbGVjdGluZyB0aGlzIGNvbXBsZXRpb24uIEVkaXRzIG11c3Qgbm90IG92ZXJsYXAgKGluY2x1ZGluZyB0aGUgc2FtZVxuICAgKiBpbnNlcnQgcG9zaXRpb24pIHdpdGggdGhlIG1haW4gZWRpdCBub3Igd2l0aCB0aGVtc2VsdmVzLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsIHRleHQgZWRpdHMgc2hvdWxkIGJlIHVzZWQgdG8gY2hhbmdlIHRleHQgdW5yZWxhdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoZm9yIGV4YW1wbGUgYWRkaW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQgYXQgdGhlXG4gICAqIHRvcCBvZiB0aGUgZmlsZSBpZiB0aGUgY29tcGxldGlvbiBpdGVtIHdpbGwgaW5zZXJ0IGFuIHVucXVhbGlmaWVkIHR5cGUpLlxuICAgKi9cbiAgYWRkaXRpb25hbFRleHRFZGl0cz86IFRleHRFZGl0W107XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgd2hlbiBwcmVzc2VkIHdoaWxlIHRoaXMgY29tcGxldGlvbiBpc1xuICAgKiBhY3RpdmUgd2lsbCBhY2NlcHQgaXQgZmlyc3QgYW5kIHRoZW4gdHlwZSB0aGF0IGNoYXJhY3Rlci4gKk5vdGUqIHRoYXQgYWxsXG4gICAqIGNvbW1pdCBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIGBsZW5ndGg9MWAgYW5kIHRoYXQgc3VwZXJmbHVvdXMgY2hhcmFjdGVyc1xuICAgKiB3aWxsIGJlIGlnbm9yZWQuXG4gICAqL1xuICBjb21taXRDaGFyYWN0ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGNvbW1hbmQgdGhhdCBpcyBleGVjdXRlZCAqYWZ0ZXIqIGluc2VydGluZyB0aGlzIGNvbXBsZXRpb24uXG4gICAqICpOb3RlKiB0aGF0IGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgY3VycmVudCBkb2N1bWVudCBzaG91bGQgYmVcbiAgICogZGVzY3JpYmVkIHdpdGggdGhlIGFkZGl0aW9uYWxUZXh0RWRpdHMtcHJvcGVydHkuXG4gICAqL1xuICBjb21tYW5kPzogcHJvdG9jb2wuQ29tbWFuZDtcblxuICAvKipcbiAgICogQSBkYXRhIGVudHJ5IGZpZWxkIHRoYXQgaXMgcHJlc2VydmVkIG9uIGEgY29tcGxldGlvbiBpdGVtIGJldHdlZW5cbiAgICogYSBjb21wbGV0aW9uIGFuZCBhIGNvbXBsZXRpb24gcmVzb2x2ZSByZXF1ZXN0LlxuICAgKi9cbiAgZGF0YT86IHVua25vd247XG59XG5cblxuLy8gdHNsaW50OmRpc2FibGU6anNkb2MtZm9ybWF0XG4vKipcbiAqIEEgYE1hcmt1cENvbnRlbnRgIGxpdGVyYWwgcmVwcmVzZW50cyBhIHN0cmluZyB2YWx1ZSB3aGljaCBjb250ZW50IGlzXG4gKiBpbnRlcnByZXRlZCBiYXNlIG9uIGl0cyBraW5kIGZsYWcuIEN1cnJlbnRseSB0aGUgcHJvdG9jb2wgc3VwcG9ydHNcbiAqIGBwbGFpbnRleHRgIGFuZCBgbWFya2Rvd25gIGFzIG1hcmt1cCBraW5kcy5cbiAqXG4gKiBJZiB0aGUga2luZCBpcyBgbWFya2Rvd25gIHRoZW4gdGhlIHZhbHVlIGNhbiBjb250YWluIGZlbmNlZCBjb2RlIGJsb2NrcyBsaWtlXG4gKiBpbiBHaXRIdWIgaXNzdWVzLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBob3cgc3VjaCBhIHN0cmluZyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmdcbiAqIEphdmFTY3JpcHQgLyBUeXBlU2NyaXB0OlxuICogYGBgdHlwZXNjcmlwdFxuICogbGV0IG1hcmtkb3duOiBNYXJrZG93bkNvbnRlbnQgPSB7XG4gKiAga2luZDogTWFya3VwS2luZC5NYXJrZG93bixcbiAqICB2YWx1ZTogW1xuICogICAgJyMgSGVhZGVyJyxcbiAqICAgICdTb21lIHRleHQnLFxuICogICAgJ2BgYHR5cGVzY3JpcHQnLFxuICogICAgJ3NvbWVDb2RlKCk7JyxcbiAqICAgICdgYGAnXG4gKiAgXS5qb2luKCdcXG4nKVxuICogfTtcbiAqIGBgYFxuICpcbiAqICpQbGVhc2UgTm90ZSogdGhhdCBjbGllbnRzIG1pZ2h0IHNhbml0aXplIHRoZSByZXR1cm4gbWFya2Rvd24uIEEgY2xpZW50IGNvdWxkXG4gKiBkZWNpZGUgdG8gcmVtb3ZlIEhUTUwgZnJvbSB0aGUgbWFya2Rvd24gdG8gYXZvaWQgc2NyaXB0IGV4ZWN1dGlvbi5cbiAqL1xuLy8gdHNsaW50OmVuYWJsZTpqc2RvYy1mb3JtYXRcbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBNYXJrdXBDb250ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBNYXJrdXBcbiAgICovXG4gIGtpbmQ6IE1hcmt1cEtpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IGl0c2VsZlxuICAgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NpZ25hdHVyZUhlbHBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNpZ25hdHVyZUhlbHBQYXJhbXMgZXh0ZW5kc1xuICAgIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zLCBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzaWduYXR1cmUgaGVscCBjb250ZXh0LiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjbGllbnRcbiAgICogc3BlY2lmaWVzIHRvIHNlbmQgdGhpcyB1c2luZyB0aGUgY2xpZW50IGNhcGFiaWxpdHlcbiAgICogYHRleHREb2N1bWVudC5zaWduYXR1cmVIZWxwLmNvbnRleHRTdXBwb3J0ID09PSB0cnVlYFxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICBjb250ZXh0PzogU2lnbmF0dXJlSGVscENvbnRleHQ7XG59XG5cbi8qKlxuICogSG93IGEgc2lnbmF0dXJlIGhlbHAgd2FzIHRyaWdnZXJlZC5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCBlbnVtIFNpZ25hdHVyZUhlbHBUcmlnZ2VyS2luZCB7XG4gIC8qKlxuICAgKiBTaWduYXR1cmUgaGVscCB3YXMgaW52b2tlZCBtYW51YWxseSBieSB0aGUgdXNlciBvciBieSBhIGNvbW1hbmQuXG4gICAqL1xuICBJbnZva2VkID0gMSxcbiAgLyoqXG4gICAqIFNpZ25hdHVyZSBoZWxwIHdhcyB0cmlnZ2VyZWQgYnkgYSB0cmlnZ2VyIGNoYXJhY3Rlci5cbiAgICovXG4gIFRyaWdnZXJDaGFyYWN0ZXIgPSAyLFxuICAvKipcbiAgICogU2lnbmF0dXJlIGhlbHAgd2FzIHRyaWdnZXJlZCBieSB0aGUgY3Vyc29yIG1vdmluZyBvciBieSB0aGUgZG9jdW1lbnRcbiAgICogY29udGVudCBjaGFuZ2luZy5cbiAgICovXG4gIENvbnRlbnRDaGFuZ2UgPSAzLFxufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYSBzaWduYXR1cmUgaGVscCByZXF1ZXN0XG4gKiB3YXMgdHJpZ2dlcmVkLlxuICpcbiAqIEBzaW5jZSAzLjE1LjBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNpZ25hdHVyZUhlbHBDb250ZXh0IHtcbiAgLyoqXG4gICAqIEFjdGlvbiB0aGF0IGNhdXNlZCBzaWduYXR1cmUgaGVscCB0byBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICB0cmlnZ2VyS2luZDogU2lnbmF0dXJlSGVscFRyaWdnZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgdGhhdCBjYXVzZWQgc2lnbmF0dXJlIGhlbHAgdG8gYmUgdHJpZ2dlcmVkLlxuICAgKlxuICAgKiBUaGlzIGlzIHVuZGVmaW5lZCB3aGVuIHRyaWdnZXJLaW5kICE9PVxuICAgKiBTaWduYXR1cmVIZWxwVHJpZ2dlcktpbmQuVHJpZ2dlckNoYXJhY3RlclxuICAgKi9cbiAgdHJpZ2dlckNoYXJhY3Rlcj86IHN0cmluZztcblxuICAvKipcbiAgICogYHRydWVgIGlmIHNpZ25hdHVyZSBoZWxwIHdhcyBhbHJlYWR5IHNob3dpbmcgd2hlbiBpdCB3YXMgdHJpZ2dlcmVkLlxuICAgKlxuICAgKiBSZXRyaWdnZXJzIG9jY3VyIHdoZW4gdGhlIHNpZ25hdHVyZSBoZWxwIGlzIGFscmVhZHkgYWN0aXZlIGFuZCBjYW4gYmVcbiAgICogY2F1c2VkIGJ5IGFjdGlvbnMgc3VjaCBhcyB0eXBpbmcgYSB0cmlnZ2VyIGNoYXJhY3RlciwgYSBjdXJzb3IgbW92ZSwgb3JcbiAgICogZG9jdW1lbnQgY29udGVudCBjaGFuZ2VzLlxuICAgKi9cbiAgaXNSZXRyaWdnZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGBTaWduYXR1cmVIZWxwYC5cbiAgICpcbiAgICogVGhlIGBhY3RpdmVTaWduYXR1cmVIZWxwYCBoYXMgaXRzIGBTaWduYXR1cmVIZWxwLmFjdGl2ZVNpZ25hdHVyZWAgZmllbGRcbiAgICogdXBkYXRlZCBiYXNlZCBvbiB0aGUgdXNlciBuYXZpZ2F0aW5nIHRocm91Z2ggYXZhaWxhYmxlIHNpZ25hdHVyZXMuXG4gICAqL1xuICBhY3RpdmVTaWduYXR1cmVIZWxwPzogU2lnbmF0dXJlSGVscDtcbn1cblxuLyoqXG4gKiBTaWduYXR1cmUgaGVscCByZXByZXNlbnRzIHRoZSBzaWduYXR1cmUgb2Ygc29tZXRoaW5nXG4gKiBjYWxsYWJsZS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlIHNpZ25hdHVyZSBidXQgb25seSBvbmVcbiAqIGFjdGl2ZSBhbmQgb25seSBvbmUgYWN0aXZlIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNpZ25hdHVyZUhlbHAge1xuICAvKipcbiAgICogT25lIG9yIG1vcmUgc2lnbmF0dXJlcy4gSWYgbm8gc2lnbmF0dXJlcyBhcmUgYXZhaWxhYmxlIHRoZSBzaWduYXR1cmUgaGVscFxuICAgKiByZXF1ZXN0IHNob3VsZCByZXR1cm4gYG51bGxgLlxuICAgKi9cbiAgc2lnbmF0dXJlczogU2lnbmF0dXJlSW5mb3JtYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlIGxpZXMgb3V0c2lkZSB0aGVcbiAgICogcmFuZ2Ugb2YgYHNpZ25hdHVyZXNgIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byB6ZXJvIG9yIGlzIGlnbm9yZWQgaWZcbiAgICogdGhlIGBTaWduYXR1cmVIZWxwYCBoYXMgbm8gc2lnbmF0dXJlcy5cbiAgICpcbiAgICogV2hlbmV2ZXIgcG9zc2libGUgaW1wbGVtZW50b3JzIHNob3VsZCBtYWtlIGFuIGFjdGl2ZSBkZWNpc2lvbiBhYm91dFxuICAgKiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBhbmQgc2hvdWxkbid0IHJlbHkgb24gYSBkZWZhdWx0IHZhbHVlLlxuICAgKlxuICAgKiBJbiBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgdGhpcyBwcm9wZXJ0eSBtaWdodCBiZWNvbWVcbiAgICogbWFuZGF0b3J5IHRvIGJldHRlciBleHByZXNzIHRoaXMuXG4gICAqL1xuICBhY3RpdmVTaWduYXR1cmU/OiBwcm90b2NvbC51aW50ZWdlcjtcblxuICAvKipcbiAgICogVGhlIGFjdGl2ZSBwYXJhbWV0ZXIgb2YgdGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlXG4gICAqIGxpZXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgYHNpZ25hdHVyZXNbYWN0aXZlU2lnbmF0dXJlXS5wYXJhbWV0ZXJzYFxuICAgKiBkZWZhdWx0cyB0byAwIGlmIHRoZSBhY3RpdmUgc2lnbmF0dXJlIGhhcyBwYXJhbWV0ZXJzLiBJZlxuICAgKiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBoYXMgbm8gcGFyYW1ldGVycyBpdCBpcyBpZ25vcmVkLlxuICAgKiBJbiBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgdGhpcyBwcm9wZXJ0eSBtaWdodCBiZWNvbWVcbiAgICogbWFuZGF0b3J5IHRvIGJldHRlciBleHByZXNzIHRoZSBhY3RpdmUgcGFyYW1ldGVyIGlmIHRoZVxuICAgKiBhY3RpdmUgc2lnbmF0dXJlIGRvZXMgaGF2ZSBhbnkuXG4gICAqL1xuICBhY3RpdmVQYXJhbWV0ZXI/OiBwcm90b2NvbC51aW50ZWdlcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzaWduYXR1cmUgb2Ygc29tZXRoaW5nIGNhbGxhYmxlLiBBIHNpZ25hdHVyZVxuICogY2FuIGhhdmUgYSBsYWJlbCwgbGlrZSBhIGZ1bmN0aW9uLW5hbWUsIGEgZG9jLWNvbW1lbnQsIGFuZFxuICogYSBzZXQgb2YgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNpZ25hdHVyZUluZm9ybWF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBvZiB0aGlzIHNpZ25hdHVyZS4gV2lsbCBiZSBzaG93biBpblxuICAgKiB0aGUgVUkuXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZG9jLWNvbW1lbnQgb2YgdGhpcyBzaWduYXR1cmUuIFdpbGwgYmUgc2hvd25cbiAgICogaW4gdGhlIFVJIGJ1dCBjYW4gYmUgb21pdHRlZC5cbiAgICovXG4gIGRvY3VtZW50YXRpb24/OiBzdHJpbmd8TWFya3VwQ29udGVudDtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlcnMgb2YgdGhpcyBzaWduYXR1cmUuXG4gICAqL1xuICBwYXJhbWV0ZXJzPzogUGFyYW1ldGVySW5mb3JtYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBhY3RpdmUgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgdGhpcyBpcyB1c2VkIGluIHBsYWNlIG9mIGBTaWduYXR1cmVIZWxwLmFjdGl2ZVBhcmFtZXRlcmAuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE2LjBcbiAgICovXG4gIGFjdGl2ZVBhcmFtZXRlcj86IHByb3RvY29sLnVpbnRlZ2VyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXJhbWV0ZXIgb2YgYSBjYWxsYWJsZS1zaWduYXR1cmUuIEEgcGFyYW1ldGVyIGNhblxuICogaGF2ZSBhIGxhYmVsIGFuZCBhIGRvYy1jb21tZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFyYW1ldGVySW5mb3JtYXRpb24ge1xuICAvKipcbiAgICogVGhlIGxhYmVsIG9mIHRoaXMgcGFyYW1ldGVyIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgb3IgYW4gaW5jbHVzaXZlIHN0YXJ0IGFuZCBleGNsdXNpdmUgZW5kIG9mZnNldHMgd2l0aGluXG4gICAqIGl0cyBjb250YWluaW5nIHNpZ25hdHVyZSBsYWJlbC4gKHNlZSBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbCkuIFRoZVxuICAgKiBvZmZzZXRzIGFyZSBiYXNlZCBvbiBhIFVURi0xNiBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYFBvc2l0aW9uYCBhbmRcbiAgICogYFJhbmdlYCBkb2VzLlxuICAgKlxuICAgKiAqTm90ZSo6IGEgbGFiZWwgb2YgdHlwZSBzdHJpbmcgc2hvdWxkIGJlIGEgc3Vic3RyaW5nIG9mIGl0cyBjb250YWluaW5nXG4gICAqIHNpZ25hdHVyZSBsYWJlbC4gSXRzIGludGVuZGVkIHVzZSBjYXNlIGlzIHRvIGhpZ2hsaWdodCB0aGUgcGFyYW1ldGVyXG4gICAqIGxhYmVsIHBhcnQgaW4gdGhlIGBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbGAuXG4gICAqL1xuICBsYWJlbDogc3RyaW5nfFtwcm90b2NvbC51aW50ZWdlciwgcHJvdG9jb2wudWludGVnZXJdO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZG9jLWNvbW1lbnQgb2YgdGhpcyBwYXJhbWV0ZXIuIFdpbGwgYmUgc2hvd25cbiAgICogaW4gdGhlIFVJIGJ1dCBjYW4gYmUgb21pdHRlZC5cbiAgICovXG4gIGRvY3VtZW50YXRpb24/OiBzdHJpbmd8TWFya3VwQ29udGVudDtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2hvdmVyXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBIb3ZlclBhcmFtcyBleHRlbmRzIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyB7fVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgYSBob3ZlciByZXF1ZXN0LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSG92ZXIge1xuICAvKipcbiAgICogVGhlIGhvdmVyJ3MgY29udGVudFxuICAgKi9cbiAgY29udGVudHM6IE1hcmt1cENvbnRlbnQ7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHJhbmdlIGlzIGEgcmFuZ2UgaW5zaWRlIGEgdGV4dCBkb2N1bWVudFxuICAgKiB0aGF0IGlzIHVzZWQgdG8gdmlzdWFsaXplIGEgaG92ZXIsIGUuZy4gYnkgY2hhbmdpbmcgdGhlIGJhY2tncm91bmQgY29sb3IuXG4gICAqL1xuICByYW5nZT86IHByb3RvY29sLlJhbmdlO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi0zLTE3LyNkZWZpbml0aW9uUGFyYW1zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEZWZpbml0aW9uUGFyYW1zIGV4dGVuZHNcbiAgICBUZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtcywgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyxcbiAgICBwcm90b2NvbC5QYXJ0aWFsUmVzdWx0UGFyYW1zIHt9XG5cbi8qKlxuICogUGFyYW1zIGZvciB0aGUgY3VzdG9tICdlY2hvRG9jdW1lbnQnIGNvbW1lbnQgd2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZVxuICogb2YgdGhlIHNlcnZlcidzIHZpZXcgb2YgdGhlIExTUCBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVjaG9Eb2N1bWVudFBhcmFtcyB7fVxuXG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgbGl0ZXJhbCB1c2VkIGluIGlubGF5IGhpbnQgcmVxdWVzdHMuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5sYXlIaW50UGFyYW1zIGV4dGVuZHNcbiAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGRvY3VtZW50LlxuICAgKi9cbiAgdGV4dERvY3VtZW50OiBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSBkb2N1bWVudCByYW5nZSBmb3Igd2hpY2ggaW5sYXkgaGludHMgc2hvdWxkIGJlIGNvbXB1dGVkLlxuICAgKi9cbiAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIENvZGVBY3Rpb25SZXF1ZXN0XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlQWN0aW9uUGFyYW1zIGV4dGVuZHNcbiAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zLCBwcm90b2NvbC5QYXJ0aWFsUmVzdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCBpbiB3aGljaCB0aGUgY29tbWFuZCB3YXMgaW52b2tlZC5cbiAgICovXG4gIHRleHREb2N1bWVudDogVGV4dERvY3VtZW50SWRlbnRpZmllcjtcblxuICAvKipcbiAgICogVGhlIHJhbmdlIGZvciB3aGljaCB0aGUgY29tbWFuZCB3YXMgaW52b2tlZC5cbiAgICovXG4gIHJhbmdlOiBwcm90b2NvbC5SYW5nZTtcblxuICAvKipcbiAgICogQ29udGV4dCBjYXJyeWluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgY29udGV4dDogQ29kZUFjdGlvbkNvbnRleHQ7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB0aGUgUmVuYW1lUmVxdWVzdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVuYW1lUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHN5bWJvbC4gSWYgdGhlIGdpdmVuIG5hbWUgaXMgbm90IHZhbGlkIHRoZVxuICAgKiByZXF1ZXN0IG11c3QgcmV0dXJuIGEgW1Jlc3BvbnNlRXJyb3JdKCNSZXNwb25zZUVycm9yKSB3aXRoIGFuXG4gICAqIGFwcHJvcHJpYXRlIG1lc3NhZ2Ugc2V0LlxuICAgKi9cbiAgbmV3TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgY29kZSBhY3Rpb24gcmVwcmVzZW50cyBhIGNoYW5nZSB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgaW4gY29kZSwgZS5nLiB0byBmaXhcbiAqIGEgcHJvYmxlbSBvciB0byByZWZhY3RvciBjb2RlLlxuICpcbiAqIEEgQ29kZUFjdGlvbiBtdXN0IHNldCBlaXRoZXIgYGVkaXRgIGFuZC9vciBhIGBjb21tYW5kYC4gSWYgYm90aCBhcmUgc3VwcGxpZWQsXG4gKiB0aGUgYGVkaXRgIGlzIGFwcGxpZWQgZmlyc3QsIHRoZW4gdGhlIGBjb21tYW5kYCBpcyBleGVjdXRlZC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvZGVBY3Rpb24ge1xuICAvKipcbiAgICogQSBzaG9ydCwgaHVtYW4tcmVhZGFibGUsIHRpdGxlIGZvciB0aGlzIGNvZGUgYWN0aW9uLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIGNvZGUgYWN0aW9uLlxuICAgKlxuICAgKiBVc2VkIHRvIGZpbHRlciBjb2RlIGFjdGlvbnMuXG4gICAqL1xuICBraW5kPzogQ29kZUFjdGlvbktpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljcyB0aGF0IHRoaXMgY29kZSBhY3Rpb24gcmVzb2x2ZXMuXG4gICAqL1xuICBkaWFnbm9zdGljcz86IHByb3RvY29sLkRpYWdub3N0aWNbXTtcblxuICAvKipcbiAgICogTWFya3MgdGhpcyBhcyBhIHByZWZlcnJlZCBhY3Rpb24uIFByZWZlcnJlZCBhY3Rpb25zIGFyZSB1c2VkIGJ5IHRoZVxuICAgKiBgYXV0byBmaXhgIGNvbW1hbmQgYW5kIGNhbiBiZSB0YXJnZXRlZCBieSBrZXliaW5kaW5ncy5cbiAgICpcbiAgICogQSBxdWljayBmaXggc2hvdWxkIGJlIG1hcmtlZCBwcmVmZXJyZWQgaWYgaXQgcHJvcGVybHkgYWRkcmVzc2VzIHRoZVxuICAgKiB1bmRlcmx5aW5nIGVycm9yLiBBIHJlZmFjdG9yaW5nIHNob3VsZCBiZSBtYXJrZWQgcHJlZmVycmVkIGlmIGl0IGlzIHRoZVxuICAgKiBtb3N0IHJlYXNvbmFibGUgY2hvaWNlIG9mIGFjdGlvbnMgdG8gdGFrZS5cbiAgICpcbiAgICogQHNpbmNlIDMuMTUuMFxuICAgKi9cbiAgaXNQcmVmZXJyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGF0IHRoZSBjb2RlIGFjdGlvbiBjYW5ub3QgY3VycmVudGx5IGJlIGFwcGxpZWQuXG4gICAqXG4gICAqIENsaWVudHMgc2hvdWxkIGZvbGxvdyB0aGUgZm9sbG93aW5nIGd1aWRlbGluZXMgcmVnYXJkaW5nIGRpc2FibGVkIGNvZGVcbiAgICogYWN0aW9uczpcbiAgICpcbiAgICogLSBEaXNhYmxlZCBjb2RlIGFjdGlvbnMgYXJlIG5vdCBzaG93biBpbiBhdXRvbWF0aWMgbGlnaHRidWxicyBjb2RlXG4gICAqICAgYWN0aW9uIG1lbnVzLlxuICAgKlxuICAgKiAtIERpc2FibGVkIGFjdGlvbnMgYXJlIHNob3duIGFzIGZhZGVkIG91dCBpbiB0aGUgY29kZSBhY3Rpb24gbWVudSB3aGVuXG4gICAqICAgdGhlIHVzZXIgcmVxdWVzdCBhIG1vcmUgc3BlY2lmaWMgdHlwZSBvZiBjb2RlIGFjdGlvbiwgc3VjaCBhc1xuICAgKiAgIHJlZmFjdG9yaW5ncy5cbiAgICpcbiAgICogLSBJZiB0aGUgdXNlciBoYXMgYSBrZXliaW5kaW5nIHRoYXQgYXV0byBhcHBsaWVzIGEgY29kZSBhY3Rpb24gYW5kIG9ubHlcbiAgICogICBhIGRpc2FibGVkIGNvZGUgYWN0aW9ucyBhcmUgcmV0dXJuZWQsIHRoZSBjbGllbnQgc2hvdWxkIHNob3cgdGhlIHVzZXJcbiAgICogICBhbiBlcnJvciBtZXNzYWdlIHdpdGggYHJlYXNvbmAgaW4gdGhlIGVkaXRvci5cbiAgICpcbiAgICogQHNpbmNlIDMuMTYuMFxuICAgKi9cbiAgZGlzYWJsZWQ/OiB7XG5cbiAgICAvKipcbiAgICAgKiBIdW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIGNvZGUgYWN0aW9uIGlzIGN1cnJlbnRseVxuICAgICAqIGRpc2FibGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBkaXNwbGF5ZWQgaW4gdGhlIGNvZGUgYWN0aW9ucyBVSS5cbiAgICAgKi9cbiAgICByZWFzb246IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBlZGl0IHRoaXMgY29kZSBhY3Rpb24gcGVyZm9ybXMuXG4gICAqL1xuICBlZGl0Pzogd29ya3NwYWNlLldvcmtzcGFjZUVkaXQ7XG5cbiAgLyoqXG4gICAqIEEgY29tbWFuZCB0aGlzIGNvZGUgYWN0aW9uIGV4ZWN1dGVzLiBJZiBhIGNvZGUgYWN0aW9uXG4gICAqIHByb3ZpZGVzIGFuIGVkaXQgYW5kIGEgY29tbWFuZCwgZmlyc3QgdGhlIGVkaXQgaXNcbiAgICogZXhlY3V0ZWQgYW5kIHRoZW4gdGhlIGNvbW1hbmQuXG4gICAqL1xuICBjb21tYW5kPzogcHJvdG9jb2wuQ29tbWFuZDtcblxuICAvKipcbiAgICogQSBkYXRhIGVudHJ5IGZpZWxkIHRoYXQgaXMgcHJlc2VydmVkIG9uIGEgY29kZSBhY3Rpb24gYmV0d2VlblxuICAgKiBhIGB0ZXh0RG9jdW1lbnQvY29kZUFjdGlvbmAgYW5kIGEgYGNvZGVBY3Rpb24vcmVzb2x2ZWAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuMTYuMFxuICAgKi9cbiAgZGF0YT86IHVua25vd247XG59XG5cbi8qKlxuICogQW4gaW5sYXkgaGludCBsYWJlbCBwYXJ0IGFsbG93cyBmb3IgaW50ZXJhY3RpdmUgYW5kIGNvbXBvc2l0ZSBsYWJlbHNcbiAqIG9mIGlubGF5IGhpbnRzLlxuICpcbiAqIEBzaW5jZSAzLjE3LjBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElubGF5SGludExhYmVsUGFydCB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBsYWJlbCBwYXJ0LlxuICAgKi9cbiAgdmFsdWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRvb2x0aXAgdGV4dCB3aGVuIHlvdSBob3ZlciBvdmVyIHRoaXMgbGFiZWwgcGFydC4gRGVwZW5kaW5nIG9uXG4gICAqIHRoZSBjbGllbnQgY2FwYWJpbGl0eSBgaW5sYXlIaW50LnJlc29sdmVTdXBwb3J0YCBjbGllbnRzIG1pZ2h0IHJlc29sdmVcbiAgICogdGhpcyBwcm9wZXJ0eSBsYXRlIHVzaW5nIHRoZSByZXNvbHZlIHJlcXVlc3QuXG4gICAqL1xuICB0b29sdGlwPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHNvdXJjZSBjb2RlIGxvY2F0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGlzXG4gICAqIGxhYmVsIHBhcnQuXG4gICAqXG4gICAqIFRoZSBlZGl0b3Igd2lsbCB1c2UgdGhpcyBsb2NhdGlvbiBmb3IgdGhlIGhvdmVyIGFuZCBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gICAqIGZlYXR1cmVzOiBUaGlzIHBhcnQgd2lsbCBiZWNvbWUgYSBjbGlja2FibGUgbGluayB0aGF0IHJlc29sdmVzIHRvIHRoZVxuICAgKiBkZWZpbml0aW9uIG9mIHRoZSBzeW1ib2wgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIChub3QgbmVjZXNzYXJpbHkgdGhlXG4gICAqIGxvY2F0aW9uIGl0c2VsZiksIGl0IHNob3dzIHRoZSBob3ZlciB0aGF0IHNob3dzIGF0IHRoZSBnaXZlbiBsb2NhdGlvbixcbiAgICogYW5kIGl0IHNob3dzIGEgY29udGV4dCBtZW51IHdpdGggZnVydGhlciBjb2RlIG5hdmlnYXRpb24gY29tbWFuZHMuXG4gICAqXG4gICAqIERlcGVuZGluZyBvbiB0aGUgY2xpZW50IGNhcGFiaWxpdHkgYGlubGF5SGludC5yZXNvbHZlU3VwcG9ydGAgY2xpZW50c1xuICAgKiBtaWdodCByZXNvbHZlIHRoaXMgcHJvcGVydHkgbGF0ZSB1c2luZyB0aGUgcmVzb2x2ZSByZXF1ZXN0LlxuICAgKi9cbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgY29tbWFuZCBmb3IgdGhpcyBsYWJlbCBwYXJ0LlxuICAgKlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIGNsaWVudCBjYXBhYmlsaXR5IGBpbmxheUhpbnQucmVzb2x2ZVN1cHBvcnRgIGNsaWVudHNcbiAgICogbWlnaHQgcmVzb2x2ZSB0aGlzIHByb3BlcnR5IGxhdGUgdXNpbmcgdGhlIHJlc29sdmUgcmVxdWVzdC5cbiAgICovXG4gIGNvbW1hbmQ/OiBwcm90b2NvbC5Db21tYW5kO1xufVxuXG4vKipcbiAqIElubGF5IGhpbnQga2luZHMuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgZW51bSBJbmxheUhpbnRLaW5kIHtcbiAgRW1wdHkgPSAwLFxuXG4gIC8qKlxuICAgKiBBbiBpbmxheSBoaW50IHRoYXQgZm9yIGEgdHlwZSBhbm5vdGF0aW9uLlxuICAgKi9cbiAgVHlwZSA9IDEsXG5cbiAgLyoqXG4gICAqIEFuIGlubGF5IGhpbnQgdGhhdCBpcyBmb3IgYSBwYXJhbWV0ZXIuXG4gICAqL1xuICBQYXJhbWV0ZXIgPSAyLFxufVxuXG4vKipcbiAqIElubGF5IGhpbnQgaW5mb3JtYXRpb24uXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5sYXlIaW50IHtcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGlzIGhpbnQuXG4gICAqXG4gICAqIElmIG11bHRpcGxlIGhpbnRzIGhhdmUgdGhlIHNhbWUgcG9zaXRpb24sIHRoZXkgd2lsbCBiZSBzaG93biBpbiB0aGUgb3JkZXJcbiAgICogdGhleSBhcHBlYXIgaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgcG9zaXRpb246IHByb3RvY29sLlBvc2l0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhpcyBoaW50LiBBIGh1bWFuIHJlYWRhYmxlIHN0cmluZyBvciBhbiBhcnJheSBvZlxuICAgKiBJbmxheUhpbnRMYWJlbFBhcnQgbGFiZWwgcGFydHMuXG4gICAqXG4gICAqICpOb3RlKiB0aGF0IG5laXRoZXIgdGhlIHN0cmluZyBub3IgdGhlIGxhYmVsIHBhcnQgY2FuIGJlIGVtcHR5LlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZ3xJbmxheUhpbnRMYWJlbFBhcnRbXTtcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhpcyBoaW50LiBDYW4gYmUgb21pdHRlZCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnRcbiAgICogc2hvdWxkIGZhbGwgYmFjayB0byBhIHJlYXNvbmFibGUgZGVmYXVsdC5cbiAgICovXG4gIGtpbmQ/OiBJbmxheUhpbnRLaW5kO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0ZXh0IGVkaXRzIHRoYXQgYXJlIHBlcmZvcm1lZCB3aGVuIGFjY2VwdGluZyB0aGlzIGlubGF5IGhpbnQuXG4gICAqXG4gICAqICpOb3RlKiB0aGF0IGVkaXRzIGFyZSBleHBlY3RlZCB0byBjaGFuZ2UgdGhlIGRvY3VtZW50IHNvIHRoYXQgdGhlIGlubGF5XG4gICAqIGhpbnQgKG9yIGl0cyBuZWFyZXN0IHZhcmlhbnQpIGlzIG5vdyBwYXJ0IG9mIHRoZSBkb2N1bWVudCBhbmQgdGhlIGlubGF5XG4gICAqIGhpbnQgaXRzZWxmIGlzIG5vdyBvYnNvbGV0ZS5cbiAgICpcbiAgICogRGVwZW5kaW5nIG9uIHRoZSBjbGllbnQgY2FwYWJpbGl0eSBgaW5sYXlIaW50LnJlc29sdmVTdXBwb3J0YCBjbGllbnRzXG4gICAqIG1pZ2h0IHJlc29sdmUgdGhpcyBwcm9wZXJ0eSBsYXRlIHVzaW5nIHRoZSByZXNvbHZlIHJlcXVlc3QuXG4gICAqL1xuICB0ZXh0RWRpdHM/OiBUZXh0RWRpdFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0IHdoZW4geW91IGhvdmVyIG92ZXIgdGhpcyBpdGVtLlxuICAgKlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIGNsaWVudCBjYXBhYmlsaXR5IGBpbmxheUhpbnQucmVzb2x2ZVN1cHBvcnRgIGNsaWVudHNcbiAgICogbWlnaHQgcmVzb2x2ZSB0aGlzIHByb3BlcnR5IGxhdGUgdXNpbmcgdGhlIHJlc29sdmUgcmVxdWVzdC5cbiAgICovXG4gIHRvb2x0aXA/OiBzdHJpbmd8TWFya3VwQ29udGVudDtcblxuICAvKipcbiAgICogUmVuZGVyIHBhZGRpbmcgYmVmb3JlIHRoZSBoaW50LlxuICAgKlxuICAgKiBOb3RlOiBQYWRkaW5nIHNob3VsZCB1c2UgdGhlIGVkaXRvcidzIGJhY2tncm91bmQgY29sb3IsIG5vdCB0aGVcbiAgICogYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgaGludCBpdHNlbGYuIFRoYXQgbWVhbnMgcGFkZGluZyBjYW4gYmUgdXNlZFxuICAgKiB0byB2aXN1YWxseSBhbGlnbi9zZXBhcmF0ZSBhbiBpbmxheSBoaW50LlxuICAgKi9cbiAgcGFkZGluZ0xlZnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgcGFkZGluZyBhZnRlciB0aGUgaGludC5cbiAgICpcbiAgICogTm90ZTogUGFkZGluZyBzaG91bGQgdXNlIHRoZSBlZGl0b3IncyBiYWNrZ3JvdW5kIGNvbG9yLCBub3QgdGhlXG4gICAqIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGhpbnQgaXRzZWxmLiBUaGF0IG1lYW5zIHBhZGRpbmcgY2FuIGJlIHVzZWRcbiAgICogdG8gdmlzdWFsbHkgYWxpZ24vc2VwYXJhdGUgYW4gaW5sYXkgaGludC5cbiAgICovXG4gIHBhZGRpbmdSaWdodD86IGJvb2xlYW47XG5cblxuICAvKipcbiAgICogQSBkYXRhIGVudHJ5IGZpZWxkIHRoYXQgaXMgcHJlc2VydmVkIG9uIGFuIGlubGF5IGhpbnQgYmV0d2VlblxuICAgKiBhIGB0ZXh0RG9jdW1lbnQvaW5sYXlIaW50YCBhbmQgYSBgaW5sYXlIaW50L3Jlc29sdmVgIHJlcXVlc3QuXG4gICAqL1xuICBkYXRhPzogdW5rbm93bjtcbn1cbi8vIHRzbGludDplbmFibGU6ZW5mb3JjZS1uYW1lLWNhc2luZ1xuIl19 \ No newline at end of file