UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

150 lines (148 loc) 42.4 kB
/* * Copyright (c) 2018 by Filestack * Some rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { __awaiter, __generator } from "tslib"; import { loadModule, FILESTACK_MODULES } from '@filestack/loader'; import { FilestackError, FilestackErrorType } from './../filestack_error'; import { getValidator, PickerParamsSchema } from './../schema'; export var RotateDirection; (function (RotateDirection) { RotateDirection["cw"] = "CW"; RotateDirection["ccw"] = "CCW"; })(RotateDirection || (RotateDirection = {})); export var PickerDisplayMode; (function (PickerDisplayMode) { PickerDisplayMode["inline"] = "inline"; PickerDisplayMode["overlay"] = "overlay"; PickerDisplayMode["dropPane"] = "dropPane"; })(PickerDisplayMode || (PickerDisplayMode = {})); /** * @private * A synchronous-looking wrapper for loading the picker and calling its methods. * This is currently needed because the picker module is loaded asynchronously. * Eventually we should offer a bundle with the picker module included. */ var PickerLoader = /** @class */ (function () { function PickerLoader(client, options) { var validateRes = getValidator(PickerParamsSchema)(options); if (validateRes.errors.length) { validateRes.errors.forEach(function (error) { if (error.path.includes('fromSources')) { console.warn("Warning: Invalid source \"".concat(error.instance, "\" found and removed!")); options.fromSources = options.fromSources.filter(function (source) { return source !== error.instance; }); } else { throw new FilestackError("Invalid picker params", validateRes.errors, FilestackErrorType.VALIDATION); } }); if (!options.fromSources.length) { delete options.fromSources; } } this._initialized = this.loadModule(client, options); } PickerLoader.prototype.open = function () { return __awaiter(this, void 0, void 0, function () { var picker; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this._initialized]; case 1: picker = _a.sent(); return [4 /*yield*/, picker.open()]; case 2: _a.sent(); return [2 /*return*/]; } }); }); }; PickerLoader.prototype.crop = function (files) { return __awaiter(this, void 0, void 0, function () { var picker; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this._initialized]; case 1: picker = _a.sent(); return [4 /*yield*/, picker.crop(files)]; case 2: _a.sent(); return [2 /*return*/]; } }); }); }; PickerLoader.prototype.close = function () { return __awaiter(this, void 0, void 0, function () { var picker; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this._initialized]; case 1: picker = _a.sent(); return [4 /*yield*/, picker.close()]; case 2: _a.sent(); return [2 /*return*/]; } }); }); }; PickerLoader.prototype.cancel = function () { return __awaiter(this, void 0, void 0, function () { var picker; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this._initialized]; case 1: picker = _a.sent(); return [4 /*yield*/, picker.cancel()]; case 2: _a.sent(); return [2 /*return*/]; } }); }); }; PickerLoader.prototype.loadModule = function (client, options) { return __awaiter(this, void 0, void 0, function () { var url, Picker; return __generator(this, function (_a) { switch (_a.label) { case 0: url = client.session.urls.pickerUrl; return [4 /*yield*/, loadModule(FILESTACK_MODULES.PICKER, url)]; case 1: Picker = _a.sent(); return [2 /*return*/, new Picker(client, options)]; } }); }); }; return PickerLoader; }()); /** * Loads and creates picker instance * * @private * @param client * @param options */ export var picker = function (client, options) { return new PickerLoader(client, options); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUErRC9ELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDekIsNEJBQVMsQ0FBQTtJQUNULDhCQUFVLENBQUE7QUFDWixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFtSEQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQix3Q0FBbUIsQ0FBQTtJQUNuQiwwQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUk1QjtBQTBrQkQ7Ozs7O0dBS0c7QUFDSDtJQUdFLHNCQUFZLE1BQWMsRUFBRSxPQUF1QjtRQUNqRCxJQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQzdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztnQkFDOUIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtvQkFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBNkIsS0FBSyxDQUFDLFFBQVEsMEJBQXVCLENBQUMsQ0FBQztvQkFDakYsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sS0FBSyxLQUFLLENBQUMsUUFBUSxFQUF6QixDQUF5QixDQUFDLENBQUM7aUJBQ3ZGO3FCQUFNO29CQUNMLE1BQU0sSUFBSSxjQUFjLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdEc7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFSywyQkFBSSxHQUFWOzs7Ozs0QkFDaUIscUJBQU0sSUFBSSxDQUFDLFlBQVksRUFBQTs7d0JBQWhDLE1BQU0sR0FBRyxTQUF1Qjt3QkFDdEMscUJBQU0sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFBOzt3QkFBbkIsU0FBbUIsQ0FBQzs7Ozs7S0FDckI7SUFFSywyQkFBSSxHQUFWLFVBQVcsS0FBWTs7Ozs7NEJBQ04scUJBQU0sSUFBSSxDQUFDLFlBQVksRUFBQTs7d0JBQWhDLE1BQU0sR0FBRyxTQUF1Qjt3QkFDdEMscUJBQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQTs7d0JBQXhCLFNBQXdCLENBQUM7Ozs7O0tBQzFCO0lBRUssNEJBQUssR0FBWDs7Ozs7NEJBQ2lCLHFCQUFNLElBQUksQ0FBQyxZQUFZLEVBQUE7O3dCQUFoQyxNQUFNLEdBQUcsU0FBdUI7d0JBQ3RDLHFCQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBQTs7d0JBQXBCLFNBQW9CLENBQUM7Ozs7O0tBQ3RCO0lBRUssNkJBQU0sR0FBWjs7Ozs7NEJBQ2lCLHFCQUFNLElBQUksQ0FBQyxZQUFZLEVBQUE7O3dCQUFoQyxNQUFNLEdBQUcsU0FBdUI7d0JBQ3RDLHFCQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTs7d0JBQXJCLFNBQXFCLENBQUM7Ozs7O0tBQ3ZCO0lBRWEsaUNBQVUsR0FBeEIsVUFBeUIsTUFBYyxFQUFFLE9BQXVCOzs7Ozs7d0JBQ3hCLEdBQUcsR0FBUyxNQUFNLHVCQUFmLENBQWdCO3dCQUMxQyxxQkFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFBOzt3QkFBeEQsTUFBTSxHQUFHLFNBQStDO3dCQUM5RCxzQkFBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUM7Ozs7S0FDcEM7SUFDSCxtQkFBQztBQUFELENBaERBLEFBZ0RDLElBQUE7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsSUFBTSxNQUFNLEdBQUcsVUFBQyxNQUFjLEVBQUUsT0FBdUI7SUFDNUQsT0FBTyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDIiwiZmlsZSI6ImxpYi9waWNrZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGxvYWRNb2R1bGUsIEZJTEVTVEFDS19NT0RVTEVTIH0gZnJvbSAnQGZpbGVzdGFjay9sb2FkZXInO1xuaW1wb3J0IHsgRmlsZXN0YWNrRXJyb3IsIEZpbGVzdGFja0Vycm9yVHlwZSB9IGZyb20gJy4vLi4vZmlsZXN0YWNrX2Vycm9yJztcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IEZTUHJvZ3Jlc3NFdmVudCwgVXBsb2FkT3B0aW9ucywgV29ya2Zsb3dDb25maWcgfSBmcm9tICcuL2FwaS91cGxvYWQvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdG9yLCBQaWNrZXJQYXJhbXNTY2hlbWEgfSBmcm9tICcuLy4uL3NjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VySW5zdGFuY2Uge1xuICAvKipcbiAgICogQ2xvc2UgcGlja2VyLiBUaGlzIG9wZXJhdGlvbiBpcyBpZGVtcG90ZW50LlxuICAgKi9cbiAgY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIENhbmNlbCBwaWNrZXIgdXBsb2Fkcy4gVGhpcyBvcGVyYXRpb24gaXMgaWRlbXBvdGVudC5cbiAgICovXG4gIGNhbmNlbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogT3BlbiBwaWNrZXIuIFRoaXMgb3BlcmF0aW9uIGlzIGlkZW1wb3RlbnQuXG4gICAqL1xuICBvcGVuOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgbGlzdCBvZiBmaWxlcyB0byBvcGVuIGluIHRoZSBwaWNrZXIgZm9yIGNyb3BwaW5nXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIDxpbnB1dCBpZD1cImZpbGVTZWxlY3RcIiB0eXBlPVwiZmlsZVwiPlxuICAgKlxuICAgKiBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVTZWxlY3QnKTtcbiAgICogY29uc3QgcGlja2VyID0gY2xpZW50LnBpY2tlcih7XG4gICAqICAgb25VcGxvYWREb25lOiByZXMgPT4gY29uc29sZS5sb2cocmVzKSxcbiAgICogfSk7XG4gICAqXG4gICAqIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICogICBwaWNrZXIuY3JvcChlLnRhcmdldC5maWxlcyk7XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBPciBwYXNzIGFuIGFycmF5IG9mIFVSTCBzdHJpbmdzXG4gICAqIGNvbnN0IHVybHMgPSBbXG4gICAqICAgJ2h0dHBzOi8vZDF3dHFhZmZhYWo2M3ouY2xvdWRmcm9udC5uZXQvaW1hZ2VzL2ZveF9pbl9mb3Jlc3QxLmpwZycsXG4gICAqICAgJ2h0dHBzOi8vZDF3dHFhZmZhYWo2M3ouY2xvdWRmcm9udC5uZXQvaW1hZ2VzL3NhaWwuanBnJyxcbiAgICogXTtcbiAgICogcGlja2VyLmNyb3AodXJscyk7XG4gICAqIGBgYFxuICAgKi9cbiAgY3JvcDogKGZpbGVzOiBhbnlbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJDcm9wcGVkRGF0YSB7XG4gIGNyb3BBcmVhOiB7XG4gICAgLyoqXG4gICAgICogW3gsIHldXG4gICAgICovXG4gICAgcG9zaXRpb246IFtudW1iZXIsIG51bWJlcl07XG4gICAgLyoqXG4gICAgICogW3dpZHRoLCBoZWlnaHRdXG4gICAgICovXG4gICAgc2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgfTtcbiAgICAvKipcbiAgICAgKiBbd2lkdGgsIGhlaWdodF1cbiAgICAgKi9cbiAgb3JpZ2luYWxJbWFnZVNpemU6IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBlbnVtIFJvdGF0ZURpcmVjdGlvbiB7XG4gIGN3ID0gJ0NXJyxcbiAgY2N3PSAnQ0NXJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJSb3RhdGVkRGF0YSB7XG4gIC8qKlxuICAgKiBBbW91bnQgcm90YXRlZCBpbiBkZWdyZWVzLlxuICAgKi9cbiAgdmFsdWU6IG51bWJlcjtcbiAgLyoqXG4gICAqIENhbiBiZSBDVyBvciBDQ1cgKGNsb2Nrd2lzZSAvIGNvdW50ZXItY2xvY2t3aXNlKVxuICAgKi9cbiAgZGlyZWN0aW9uOiBSb3RhdGVEaXJlY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyRmlsZU1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBjbG91ZCBjb250YWluZXIgZm9yIHRoZSB1cGxvYWRlZCBmaWxlLlxuICAgKi9cbiAgY29udGFpbmVyPzogc3RyaW5nO1xuICAvKipcbiAgICogUG9zaXRpb24gYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIGNyb3BwZWQgaW1hZ2VzLlxuICAgKi9cbiAgY3JvcHBlZD86IFBpY2tlckNyb3BwZWREYXRhO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZmlsZS5cbiAgICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGaWxlc3RhY2sgaGFuZGxlIGZvciB0aGUgdXBsb2FkZWQgZmlsZS5cbiAgICovXG4gIGhhbmRsZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGhhc2gtcHJlZml4ZWQgY2xvdWQgc3RvcmFnZSBwYXRoLlxuICAgKi9cbiAga2V5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG1pbWV0eXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIG9mIHRoZSBsb2NhbCBiaW5hcnkgZmlsZS4gQWxzbyBzZWUgdGhlIHBpY2sgb3B0aW9uIGBleHBvc2VPcmlnaW5hbEZpbGVgIGlmIHlvdSB3YW50IHRoZSB1bmRlcmx5aW5nIGBGaWxlYCBvYmplY3QuXG4gICAqL1xuICBvcmlnaW5hbEZpbGU/OiBvYmplY3QgfCBGaWxlO1xuICAvKipcbiAgICogVGhlIG9yaWdpbiBvZiB0aGUgZmlsZSwgZS5nLiAvRm9sZGVyL2ZpbGUuanBnLlxuICAgKi9cbiAgb3JpZ2luYWxQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXJlY3Rpb24gYW5kIHZhbHVlIGluZm9ybWF0aW9uIGZvciByb3RhdGVkIGltYWdlcy5cbiAgICovXG4gIHJvdGF0ZWQ/OiBQaWNrZXJSb3RhdGVkRGF0YTtcbiAgLyoqXG4gICAqIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHVwbG9hZGVkIGZpbGUuXG4gICAqL1xuICBzaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZyb20gd2hlcmUgdGhlIGZpbGUgd2FzIHBpY2tlZC5cbiAgICovXG4gIHNvdXJjZTogc3RyaW5nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIEZpbGVzdGFjayB0cmFuc2l0IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgdXVpZCBmb3IgdHJhY2tpbmcgdGhpcyBmaWxlIGluIGNhbGxiYWNrcy5cbiAgICovXG4gIHVwbG9hZElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgRmlsZXN0YWNrIENETiBVUkwgZm9yIHRoZSB1cGxvYWRlZCBmaWxlLlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbHQgdGV4dCBmb3IgaW1hZ2VzXG4gICAqL1xuICBhbHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21BdXRoVGV4dE9wdGlvbnMge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgdG9wPzogc3RyaW5nW10sXG4gICAgYm90dG9tPzogc3RyaW5nW11cbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJSZXNwb25zZSB7XG4gIGZpbGVzVXBsb2FkZWQ6IFBpY2tlckZpbGVNZXRhZGF0YVtdO1xuICBmaWxlc0ZhaWxlZDogUGlja2VyRmlsZU1ldGFkYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyRmlsZUNhbGxiYWNrIHtcbiAgKGZpbGU6IFBpY2tlckZpbGVNZXRhZGF0YSk6IHZvaWQgfCBQcm9taXNlPGFueT47XG59XG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckZpbGVXaXRoVG9rZW5DYWxsYmFjayB7XG4gIChmaWxlOiBQaWNrZXJGaWxlTWV0YWRhdGEsIHRva2VuPzoge3BhdXNlPzogKCkgPT4gdm9pZCwgcmVzdW1lPzogKCkgPT4gdm9pZCwgY2FuY2VsPzogKCkgPT4gdm9pZH0pOiB2b2lkIHwgUHJvbWlzZTxhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckZpbGVDYW5jZWxDYWxsYmFjayB7XG4gIChmaWxlOiBQaWNrZXJGaWxlTWV0YWRhdGEpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckZpbGVFcnJvckNhbGxiYWNrIHtcbiAgKGZpbGU6IFBpY2tlckZpbGVNZXRhZGF0YSwgZXJyb3I6IEVycm9yKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJGaWxlUHJvZ3Jlc3NDYWxsYmFjayB7XG4gIChmaWxlOiBQaWNrZXJGaWxlTWV0YWRhdGEsIGV2ZW50OiBGU1Byb2dyZXNzRXZlbnQpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlclVwbG9hZFN0YXJ0ZWRDYWxsYmFjayB7XG4gIChmaWxlczogUGlja2VyRmlsZU1ldGFkYXRhW10pOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlclVwbG9hZERvbmVDYWxsYmFjayB7XG4gIChmaWxlczogUGlja2VyUmVzcG9uc2UpOiB2b2lkO1xufVxuXG5leHBvcnQgZW51bSBQaWNrZXJEaXNwbGF5TW9kZSB7XG4gIGlubGluZSA9ICdpbmxpbmUnLFxuICBvdmVybGF5ID0gJ292ZXJsYXknLFxuICBkcm9wUGFuZSA9ICdkcm9wUGFuZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyRHJvcFBhbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgY3JvcCBVSSBmb3IgZHJvcHBlZCBmaWxlcy5cbiAgICovXG4gIGNyb3BGaWxlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b21pemUgdGhlIHRleHQgY29udGVudCBpbiB0aGUgZHJvcCBwYW5lLlxuICAgKi9cbiAgY3VzdG9tVGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGZpbGUgaW5wdXQgb24gY2xpY2suIFRoaXMgZG9lcyBub3QgZGlzYWJsZSB0aGUgYG9uQ2xpY2tgIGNhbGxiYWNrLlxuICAgKi9cbiAgZGlzYWJsZUNsaWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZnVsbC1wYWdlIGRyb3Agem9uZSBvdmVybGF5LlxuICAgKi9cbiAgb3ZlcmxheT86IGJvb2xlYW47XG4gIG9uRHJhZ0VudGVyPzogKGV2dDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBvbkRyYWdMZWF2ZT86ICgpID0+IHZvaWQ7XG4gIG9uRHJhZ092ZXI/OiAoZXZ0OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gIG9uRHJvcD86IChldnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGBvblN1Y2Nlc3NgIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGBvblVwbG9hZERvbmVgLiBUaGUgZHJvcCBwYW5lIHVzZXMgaXRzIG93biBjYWxsYmFja3MgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuIFRoaXMgbWlnaHQgZXZlbnR1YWxseSBjaGFuZ2UuXG4gICAqL1xuICBvblN1Y2Nlc3M/OiAoZmlsZXM6IFBpY2tlckZpbGVNZXRhZGF0YVtdKSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGZpbGVzOiBQaWNrZXJGaWxlTWV0YWRhdGFbXSkgPT4gdm9pZDtcbiAgb25Qcm9ncmVzcz86IChwZXJjZW50OiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uQ2xpY2s/OiAoZXZ0OiBhbnkpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUb2dnbGUgaWNvbiBlbGVtZW50IGluIGRyb3AgcGFuZS5cbiAgICovXG4gIHNob3dJY29uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvZ2dsZSB1cGxvYWQgcHJvZ3Jlc3MgZGlzcGxheS5cbiAgICovXG4gIHNob3dQcm9ncmVzcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyU3RvcmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIExvY2F0aW9uIGZvciBzdG9yZWQgZmlsZS4gT25lIG9mICdzMycsICdnY3MnLCAnYXp1cmUnLCAncmFja3NwYWNlJywgb3IgJ2Ryb3Bib3gnLlxuICAgKi9cbiAgbG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHN0b3JhZ2UgY29udGFpbmVyLlxuICAgKi9cbiAgY29udGFpbmVyPzogc3RyaW5nO1xuICAvKipcbiAgICogU2V0IGNvbnRhaW5lciBwYXRoLiBJbmRpY2F0ZSBhIGZvbGRlciBieSBhZGRpbmcgYSB0cmFpbGluZyBzbGFzaC4gV2l0aG91dCBhIHRyYWlsaW5nIHNsYXNoIGFsbCBmaWxlcyB3aWxsIGJlIHN0b3JlZCB0byB0aGUgc2FtZSBvYmplY3QuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmeSBTMyByZWdpb24uXG4gICAqL1xuICByZWdpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTMyBjb250YWluZXIgYWNjZXNzLiAncHVibGljJyBvciAncHJpdmF0ZScuXG4gICAqL1xuICBhY2Nlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93cyBpZHMgdG8gcnVuIGFmdGVyIHVwbG9hZFxuICAgKi9cbiAgd29ya2Zsb3dzPzogc3RyaW5nW10gfCBXb3JrZmxvd0NvbmZpZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckN1c3RvbVRleHQge1xuICAvLyBBY3Rpb25zXG4gIFVwbG9hZD86IHN0cmluZztcbiAgJ1VwbG9hZCBtb3JlJz86IHN0cmluZztcbiAgJ0Rlc2VsZWN0IEFsbCc/OiBzdHJpbmc7XG4gICdWaWV3L0VkaXQgU2VsZWN0ZWQnPzogc3RyaW5nO1xuICAnU2lnbiBPdXQnPzogc3RyaW5nO1xuXG4gIC8vIFNvdXJjZSBMYWJlbHNcbiAgJ015IERldmljZSc/OiBzdHJpbmc7XG4gICdXZWIgU2VhcmNoJz86IHN0cmluZztcbiAgJ1Rha2UgUGhvdG8nPzogc3RyaW5nO1xuICAnTGluayAoVVJMKSc/OiBzdHJpbmc7XG4gICdSZWNvcmQgVmlkZW8nPzogc3RyaW5nO1xuICAnUmVjb3JkIEF1ZGlvJz86IHN0cmluZztcblxuICAvLyBDdXN0b20gU291cmNlXG4gICdDdXN0b20gU291cmNlJz86IHN0cmluZztcblxuICAvLyBGb290ZXIgVGV4dFxuICBBZGQ/OiBzdHJpbmc7XG4gICdtb3JlIGZpbGUnPzogc3RyaW5nO1xuICAnbW9yZSBmaWxlcyc/OiBzdHJpbmc7XG5cbiAgLy8gQ2xvdWRcbiAgJ0Nvbm5lY3Qge3Byb3ZpZGVyTmFtZX0nPzogc3RyaW5nO1xuICAnU2VsZWN0IEZpbGVzIGZyb20ge3Byb3ZpZGVyTmFtZX0nPzogc3RyaW5nO1xuICAnWW91IG5lZWQgdG8gYXV0aGVudGljYXRlIHdpdGgge3Byb3ZpZGVyTmFtZX0uJz86IHN0cmluZztcbiAgJ0EgbmV3IHBhZ2Ugd2lsbCBvcGVuIHRvIGNvbm5lY3QgeW91ciBhY2NvdW50Lic/OiBzdHJpbmc7XG4gICdXZSBvbmx5IGV4dHJhY3QgaW1hZ2VzIGFuZCBuZXZlciBtb2RpZnkgb3IgZGVsZXRlIHRoZW0uJz86IHN0cmluZztcbiAgJ1RvIGRpc2Nvbm5lY3QgZnJvbSB7cHJvdmlkZXJOYW1lfSBjbGljayBcIlNpZ24gb3V0XCIgYnV0dG9uIGluIHRoZSBtZW51Lic/OiBzdHJpbmc7XG4gICdTaWduIGluIHdpdGggR29vZ2xlJz86IHN0cmluZztcbiAgJ0dvIGJhY2snPzogc3RyaW5nO1xuICAnVGhpcyBmb2xkZXIgaXMgZW1wdHkuJz86IHN0cmluZztcblxuICAvLyBTdW1tYXJ5XG4gIEZpbGVzPzogc3RyaW5nO1xuICBJbWFnZXM/OiBzdHJpbmc7XG4gIFVwbG9hZGVkPzogc3RyaW5nO1xuICBVcGxvYWRpbmc/OiBzdHJpbmc7XG4gIENvbXBsZXRlZD86IHN0cmluZztcbiAgRmlsdGVyPzogc3RyaW5nO1xuICAnQ3JvcHBlZCBJbWFnZXMnPzogc3RyaW5nO1xuICAnRWRpdGVkIEltYWdlcyc/OiBzdHJpbmc7XG4gICdTZWxlY3RlZCBGaWxlcyc/OiBzdHJpbmc7XG4gICdDcm9wIGlzIHJlcXVpcmVkIG9uIGltYWdlcyc/OiBzdHJpbmc7XG5cbiAgLy8gVHJhbnNmb3JtXG4gIENyb3A/OiBzdHJpbmc7XG4gIENpcmNsZT86IHN0cmluZztcbiAgUm90YXRlPzogc3RyaW5nO1xuICBNYXNrPzogc3RyaW5nO1xuICBSZXZlcnQ/OiBzdHJpbmc7XG4gIEVkaXQ/OiBzdHJpbmc7XG4gIFJlc2V0Pzogc3RyaW5nO1xuICBEb25lPzogc3RyaW5nO1xuICBTYXZlPzogc3RyaW5nO1xuICBOZXh0Pzogc3RyaW5nO1xuICAnRWRpdCBJbWFnZSc/OiBzdHJpbmc7XG4gICdUaGlzIGltYWdlIGNhbm5vdCBiZSBlZGl0ZWQnPzogc3RyaW5nO1xuXG4gIC8vIFJldHJ5IG1lc3NhZ2luZ1xuICAnQ29ubmVjdGlvbiBMb3N0Jz86IHN0cmluZztcbiAgJ0ZhaWxlZCBXaGlsZSBVcGxvYWRpbmcnPzogc3RyaW5nO1xuICAnUmV0cnlpbmcgaW4nPzogc3RyaW5nO1xuICAnVHJ5IGFnYWluJz86IHN0cmluZztcbiAgJ1RyeSBub3cnPzogc3RyaW5nO1xuXG4gIC8vIExvY2FsIEZpbGUgU291cmNlXG4gICdEcmFnIGFuZCBEcm9wLCBDb3B5IGFuZCBQYXN0ZSBGaWxlcyc/OiBzdHJpbmc7XG4gICdvciBEcmFnIGFuZCBEcm9wLCBDb3B5IGFuZCBQYXN0ZSBGaWxlcyc/OiBzdHJpbmc7XG4gICdTZWxlY3QgRmlsZXMgdG8gVXBsb2FkJz86IHN0cmluZztcbiAgJ1NlbGVjdCBGcm9tJz86IHN0cmluZztcbiAgJ0Ryb3AgeW91ciBmaWxlcyBhbnl3aGVyZSc/OiBzdHJpbmc7XG5cbiAgLy8gSW5wdXQgcGxhY2Vob2xkZXJzXG4gICdFbnRlciBhIFVSTCc/OiBzdHJpbmc7XG4gICdTZWFyY2ggaW1hZ2VzJz86IHN0cmluZztcblxuICAvLyBXZWJjYW0gU291cmNlXG4gICdXZWJjYW0gRGlzYWJsZWQnPzogc3RyaW5nO1xuICAnV2ViY2FtIE5vdCBTdXBwb3J0ZWQnPzogc3RyaW5nO1xuICAnUGxlYXNlIGVuYWJsZSB5b3VyIHdlYmNhbSB0byB0YWtlIGEgcGhvdG8uJz86IHN0cmluZztcbiAgJ1lvdXIgY3VycmVudCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgd2ViY2FtIGZ1bmN0aW9uYWxpdHkuJz86IHN0cmluZztcbiAgJ1dlIHN1Z2dlc3QgdXNpbmcgQ2hyb21lIG9yIEZpcmVmb3guJz86IHN0cmluZztcblxuICAvLyBFcnJvciBOb3RpZmljYXRpb25zXG4gICdGaWxlIHtkaXNwbGF5TmFtZX0gaXMgbm90IGFuIGFjY2VwdGVkIGZpbGUgdHlwZS4gVGhlIGFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHt0eXBlc30nPzogc3RyaW5nO1xuICAnRmlsZSB7ZGlzcGxheU5hbWV9IGlzIHRvbyBiaWcuIFRoZSBhY2NlcHRlZCBmaWxlIHNpemUgaXMgbGVzcyB0aGFuIHtyb3VuZEZpbGVTaXplfSc/OiBzdHJpbmc7XG4gICdPdXIgZmlsZSB1cGxvYWQgbGltaXQgaXMge21heEZpbGVzfSB7ZmlsZXNUZXh0fSc/OiBzdHJpbmc7XG4gICdObyBzZWFyY2ggcmVzdWx0cyBmb3VuZCBmb3IgXCJ7c2VhcmNofVwiJz86IHN0cmluZztcbiAgJ0FuIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluLic/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXN0cmljdCBmaWxlIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgcGlja2VkLiBGb3JtYXRzIGFjY2VwdGVkOlxuICAgKiAgLSAucGRmIDwtIGFueSBmaWxlIGV4dGVuc2lvblxuICAgKiAgLSBpbWFnZS9qcGVnIDwtIGFueSBtaW1lIHR5cGUgY29tbW9ubHkga25vd24gYnkgYnJvd3NlcnNcbiAgICogIC0gaW1hZ2UvKiA8LSBhY2NlcHQgYWxsIHR5cGVzIG9mIGltYWdlc1xuICAgKiAgLSB2aWRlby8qIDwtIGFjY2VwdCBhbGwgdHlwZXMgb2YgdmlkZW8gZmlsZXNcbiAgICogIC0gYXVkaW8vKiA8LSBhY2NlcHQgYWxsIHR5cGVzIG9mIGF1ZGlvIGZpbGVzXG4gICAqICAtIGFwcGxpY2F0aW9uLyogPC0gYWNjZXB0IGFsbCB0eXBlcyBvZiBhcHBsaWNhdGlvbiBmaWxlc1xuICAgKiAgLSB0ZXh0LyogPC0gYWNjZXB0IGFsbCB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gICAqL1xuICBhY2NlcHQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEN1c3RvbSBhY2NlcHQgY2hlY2sgZnVuY3Rpb25cbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBhY2NlcHRGbjogKGZpbGUsIG9wdGlvbnMpID0+IHtcbiAgICogIHJldHVybiBvcHRpb25zLm1pbWVGcm9tTWFnaWNCeXRlcyhmaWxlLm9yaWdpbmFsRmlsZSkudGhlbigocmVzKSA9PiB7IC8vIHdlIGNhbiBjaGVjayBtaW1ldHlwZSBmcm9tIG1hZ2ljIGJ5dGVzXG4gICAqICAgIC8vY29uc29sZS5sb2cob3B0aW9ucy5taW1lRnJvbUV4dGVuc2lvbihmaWxlLm9yaWdpbmFsRmlsZS5uYW1lKSk7IC8vIG9yIGNoZWNrIGV4dGVuc2lvbiBmcm9tIGZpbGVzdGFjayBleHRlbnNpb25zIGRhdGFiYXNlXG4gICAqICAgIC8vIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFjY2VwdCB0aGF0IGZpbGUnKSAvLyB3ZSBjYW4gdGhyb3cgZXhjZXB0aW9uIHRvIGJsb2NrIGZpbGUgdXBsb2FkXG4gICAqICAgIC8vIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2Fubm90IGFjY2VwdCB0aGF0IGZpbGUnJykgLy8gb3IgcmVqZWN0IGEgcHJvbWlzZVxuICAgKiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAqICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFjY2VwdEZuPzogKFBpY2tlckZpbGVNZXRhZGF0YSwgUGlja2VyQWNjZXB0Rm5PcHRpb25zKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKlxuICAgKiBQcmV2ZW50IG1vZGFsIGNsb3NlIG9uIHVwbG9hZCBmYWlsdXJlIGFuZCBhbGxvdyB1c2VycyB0byByZXRyeS5cbiAgICovXG4gIGFsbG93TWFudWFsUmV0cnk/OiBib29sZWFuO1xuICAvKipcbiAgICogIFZhbGlkIHNvdXJjZXMgYXJlOlxuICAgKiAgLSBsb2NhbF9maWxlX3N5c3RlbSAtIERlZmF1bHRcbiAgICogIC0gdXJsIC0gRGVmYXVsdFxuICAgKiAgLSBpbWFnZXNlYXJjaCAtIERlZmF1bHRcbiAgICogIC0gZmFjZWJvb2sgLSBEZWZhdWx0XG4gICAqICAtIGluc3RhZ3JhbSAtIERlZmF1bHRcbiAgICogIC0gZ29vZ2xlZHJpdmUgLSBEZWZhdWx0XG4gICAqICAtIGRyb3Bib3ggLSBEZWZhdWx0XG4gICAqICAtIHdlYmNhbSAtIFVzZXMgZGV2aWNlIG1lbnUgb24gbW9iaWxlLiBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBTYWZhcmkgYW5kIElFLlxuICAgKiAgLSB2aWRlbyAtIFVzZXMgZGV2aWNlIG1lbnUgb24gbW9iaWxlLiBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBTYWZhcmkgYW5kIElFLlxuICAgKiAgLSBhdWRpbyAtIFVzZXMgZGV2aWNlIG1lbnUgb24gbW9iaWxlLiBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBTYWZhcmkgYW5kIElFLlxuICAgKiAgLSBib3hcbiAgICogIC0gZ2l0aHViXG4gICAqICAtIGdtYWlsXG4gICAqICAtIGdvb2dsZXBob3Rvc1xuICAgKiAgLSBvbmVkcml2ZVxuICAgKiAgLSBvbmVkcml2ZWZvcmJ1c2luZXNzXG4gICAqICAtIGN1c3RvbXNvdXJjZSAtIENvbmZpZ3VyZSB0aGlzIGluIHlvdXIgRmlsZXN0YWNrIERldiBQb3J0YWwuXG4gICAqICAtIHVuc3BsYXNoXG4gICAqL1xuICBmcm9tU291cmNlcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJvdmlkZSBkZWZhdWx0IHRleHQgdmFsdWUgZm9yIEltYWdlIFNlYXJjaFxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIHdlYnNlYXJjaDoge1xuICAgKiAgcHJlZGVmaW5lZFRleHQ6ICdTYW1wbGUgdGV4dCdcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHdlYnNlYXJjaD86IG9iamVjdDtcbiAgLyoqXG4gICAqIENvbnRhaW5lciB3aGVyZSBwaWNrZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiBPbmx5IHJlbGV2YW50IGZvciBgaW5saW5lYCBhbmQgYGRyb3BQYW5lYCBkaXNwbGF5IG1vZGVzLlxuICAgKi9cbiAgY29udGFpbmVyPzogc3RyaW5nIHwgTm9kZTtcblxuICAvKipcbiAgICogVHVybiBvbiBjbGVhbmluZyBKUEVHIGltYWdlIGV4aWYuIE1ldGhvZCBjYW4ga2VlcCBpbWFnZSBvcmllbnRhdGlvbiBvciBjb2xvciBwcm9maWxlc1xuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNsZWFudXBJbWFnZUV4aWY6IHtcbiAgICogICBrZWVwT3JpZW50YXRpb246IHRydWVcbiAgICogICBrZWVwSUNDYW5kQVBQOiB0cnVlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBjbGVhbnVwSW1hZ2VFeGlmPzogYm9vbGVhbiB8IHtcbiAgICBrZWVwT3JpZW50YXRpb24/OiBib29sZWFuLFxuICAgIGtlZXBJQ0NhbmRBUFA/OiBib29sZWFuXG4gIH07XG4gIC8qKlxuICAgKiBDdXN0b21pemUgdGhlIHRleHQgb24gdGhlIGNsb3VkIGF1dGhlbnRpY2F0aW9uIHNjcmVlbiBpbiBQaWNrZXIuXG4gICAqIFVzZSBhIGNsb3VkIHNvdXJjZSBuYW1lIChzZWUge0BsaW5rIFBpY2tlck9wdGlvbnMuZnJvbVNvdXJjZXN9KVxuICAgKiBvciBhICdkZWZhdWx0JyBhcyBhIGtleSwgdGhlbiBwdXQgeW91ciBjdXN0b20gbm90aWNlIG9yIGNvbnNlbnRcbiAgICogdG8gdGhlICd0b3AnIG9yIHRoZSAnYm90dG9tJyBrZXkgdG8gc2hvdyBpdCByZXNwZWN0aXZseSBhYm92ZSBvciB1bmRlciAnQ29ubmVjdCBidXR0b24nLlxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGN1c3RvbUF1dGhUZXh0OiB7XG4gICAqICAgLy8gdXNlIGl0IGZvciBldmVyeSBjbG91ZCBhdXRoZW50aWNhdGlvbiBzY3JlZW5cbiAgICogICBkZWZhdWx0OiB7XG4gICAqICAgICB0b3A6IFtcbiAgICogICAgICAgJ2RlZmF1bHQgdG9wIGZpcnN0IGxpbmUnLFxuICAgKiAgICAgICAnZGVmYXVsdCB0b3Agc2Vjb25kIGxpbmUnXG4gICAqICAgICBdLFxuICAgKiAgICAgYm90dG9tOiBbXG4gICAqICAgICAgICdkZWZhdWx0IGJvdHRvbSBmaXJzdCBsaW5lJyxcbiAgICogICAgICAgJ2RlZmF1bHQgYm90dG9tIHNlY29uZCBsaW5lJ1xuICAgKiAgICAgXVxuICAgKiAgIH0sXG4gICAqICAgLy8gb3ZlcnJpZGUgYSBkZWZhdWx0IGJvdHRvbSB0ZXh0IGZvciBvbmx5IGdtYWlsXG4gICAqICAgZ21haWw6IHtcbiAgICogICAgIGJvdHRvbTogW1xuICAgKiAgICAgICAnV2UgbmVlZCB5b3VyIHBlcm1pc3Npb24gdG8gYWNjZXNzIHlvdXIgZGF0YSBhbmQnLFxuICAgKiAgICAgICAncHJvY2VzcyBpdCB3aXRoIG91ciBtYWNoaW5lIGxlYXJuaW5nIHN5c3RlbS4nXG4gICAqICAgICBdXG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY3VzdG9tQXV0aFRleHQ/OiBDdXN0b21BdXRoVGV4dE9wdGlvbnM7XG4gIC8qKlxuICAgKiBQaWNrZXIgZGlzcGxheSBtb2RlLCBvbmUgb2YgYCdpbmxpbmUnYCwgYCdvdmVybGF5J2AsIGAnZHJvcFBhbmUnYCAtIGRlZmF1bHQgaXMgYCdvdmVybGF5J2AuXG4gICAqL1xuICBkaXNwbGF5TW9kZT86IFBpY2tlckRpc3BsYXlNb2RlO1xuICAvKipcbiAgICogTWF4IG51bWJlciBvZiBmaWxlcyB0byB1cGxvYWQgY29uY3VycmVudGx5LiBEZWZhdWx0IGlzIDQuXG4gICAqL1xuICBjb25jdXJyZW5jeT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBjb250YWluZXIgZm9yIHlvdXIgY3VzdG9tIHNvdXJjZS5cbiAgICovXG4gIGN1c3RvbVNvdXJjZUNvbnRhaW5lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBwYXRoIGZvciB5b3VyIGN1c3RvbSBzb3VyY2UgY29udGFpbmVyLlxuICAgKi9cbiAgY3VzdG9tU291cmNlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNldCB0aGUgZGlzcGxheSBuYW1lIGZvciB0aGUgY3VzdG9tIHNvdXJjZS5cbiAgICovXG4gIGN1c3RvbVNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm92aWRlIGFuIG9iamVjdCBmb3IgbWFwcGluZyBwaWNrZXIgc3RyaW5ncyB0byB5b3VyIG93biBzdHJpbmdzLlxuICAgKiBTdHJpbmdzIHN1cnJvdW5kZWQgYnkgYnJhY2tldHMsIGB7IGZvb2JhciB9YCwgYXJlIGludGVycG9sYXRlZCB3aXRoIHJ1bnRpbWUgdmFsdWVzLlxuICAgKiBTb3VyY2UgbGFiZWxzIGFyZSBhbHNvIGF2YWlsYWJsZSB0byBvdmVycmlkZSwgZS5nLiBGYWNlYm9vaywgSW5zdGFncmFtLCBEcm9wYm94LCBldGMuXG4gICAqL1xuICBjdXN0b21UZXh0PzogUGlja2VyQ3VzdG9tVGV4dDtcbiAgLyoqXG4gICAqIHNldCBzdXBwb3J0IGVtYWlsIHRvIGRpc3BsYXkgaW4gY2FzZSBvZiBlcnJvclxuICAgKi9cbiAgc3VwcG9ydEVtYWlsPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlIHJlbW92ZXMgdGhlIGhhc2ggcHJlZml4IG9uIHN0b3JlZCBmaWxlcy5cbiAgICovXG4gIGRpc2FibGVTdG9yYWdlS2V5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSByZW1vdmVzIGFiaWxpdHkgdG8gZWRpdCBpbWFnZXMuXG4gICAqL1xuICBkaXNhYmxlVHJhbnNmb3JtZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogRGlzYWJsZXMgYWx0IHRleHQgdmlldy9lZGl0IGluIHRoZSBzdW1tYXJ5IHNjcmVlbi5cbiAgICovXG4gIGRpc2FibGVBbHRUZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERpc2FibGVzIGxvY2FsIGltYWdlIHRodW1ibmFpbCBwcmV2aWV3cyBpbiB0aGUgc3VtbWFyeSBzY3JlZW4uXG4gICAqL1xuICBkaXNhYmxlVGh1bWJuYWlscz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhlIGRyb3AgcGFuZSBiZWhhdmlvciwgaS5lLiB3aGVuIGBkaXNwbGF5TW9kZWAgaXMgYGRyb3BQYW5lYC5cbiAgICovXG4gIGRyb3BQYW5lPzogUGlja2VyRHJvcFBhbmVPcHRpb25zO1xuICAvKipcbiAgICogV2hlbiB0cnVlIHRoZSBgb3JpZ2luYWxGaWxlYCBtZXRhZGF0YSB3aWxsIGJlIHRoZSBhY3R1YWwgYEZpbGVgIG9iamVjdCBpbnN0ZWFkIG9mIGEgUE9KT1xuICAgKi9cbiAgZXhwb3NlT3JpZ2luYWxGaWxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZHJvcCB6b25lIHRvIGJlIGFjdGl2ZSBvbiBhbGwgdmlld3MuIERlZmF1bHQgaXMgYWN0aXZlIG9ubHkgb24gbG9jYWwgZmlsZSBzb3VyY2UuXG4gICAqL1xuICBnbG9iYWxEcm9wWm9uZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIgbW9kYWwgVUkgb25jZSB1cGxvYWRpbmcgYmVnaW5zLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgaGlkZU1vZGFsV2hlblVwbG9hZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaW1hZ2UgZGltZW5zaW9ucy4gZS5nLiBbODAwLCA2MDBdLiBPbmx5IGZvciBKUEVHLCBQTkcsIGFuZCBCTVAgZmlsZXMuXG4gICAqIExvY2FsIGFuZCBjcm9wcGVkIGltYWdlcyB3aWxsIGJlIHJlc2l6ZWQgKHVwc2NhbGVkIG9yIGRvd25zY2FsZWQpIHRvIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucyBiZWZvcmUgdXBsb2FkaW5nLlxuICAgKiBUaGUgb3JpZ2luYWwgaGVpZ2h0IHRvIHdpZHRoIHJhdGlvIGlzIG1haW50YWluZWQuIFRvIHJlc2l6ZSBhbGwgaW1hZ2VzIGJhc2VkIG9uIHRoZSB3aWR0aCwgc2V0IFt3aWR0aCwgbnVsbF0sIGUuZy4gWzgwMCwgbnVsbF0uXG4gICAqIEZvciB0aGUgaGVpZ2h0IHNldCBbbnVsbCwgaGVpZ2h0XSwgZS5nLiBbbnVsbCwgNjAwXS5cbiAgICovXG4gIGltYWdlRGltPzogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIFNwZWNpZnkgbWF4aW11bSBpbWFnZSBkaW1lbnNpb25zLiBlLmcuIFs4MDAsIDYwMF0uIE9ubHkgZm9yIEpQRUcsIFBORywgYW5kIEJNUCBmaWxlcy5cbiAgICogSW1hZ2VzIGJpZ2dlciB0aGFuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucyB3aWxsIGJlIHJlc2l6ZWQgdG8gdGhlIG1heGltdW0gc2l6ZSB3aGlsZSBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYXNwZWN0IHJhdGlvLlxuICAgKiBUaGUgb3V0cHV0IHdpbGwgbm90IGJlIGV4YWN0bHkgODAweDYwMCB1bmxlc3MgdGhlIGltYWdlTWF4IG1hdGNoZXMgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UuXG4gICAqL1xuICBpbWFnZU1heD86IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG1pbmltdW0gaW1hZ2UgZGltZW5zaW9ucy4gZS5nLiBbODAwLCA2MDBdLiBPbmx5IGZvciBKUEVHLCBQTkcsIGFuZCBCTVAgZmlsZXMuXG4gICAqIEltYWdlcyBzbWFsbGVyIHRoYW4gdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zIHdpbGwgYmUgdXBzY2FsZWQgdG8gdGhlIG1pbmltdW0gc2l6ZSB3aGlsZSBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYXNwZWN0IHJhdGlvLlxuICAgKiBUaGUgb3V0cHV0IHdpbGwgbm90IGJlIGV4YWN0bHkgODAweDYwMCB1bmxlc3MgdGhlIGltYWdlTWluIG1hdGNoZXMgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UuXG4gICAqL1xuICBpbWFnZU1pbj86IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBTZXRzIGxvY2FsZS4gQWNjZXB0czogY2EsIGRhLCBkZSwgZW4sIGVzLCBmciwgaGUsIGl0LCBqYSwga28sIG5sLCBubywgcGwsIHB0LCBzdiwgcnUsIHZpLCB6aCwgdHJcbiAgICovXG4gIGxhbmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiBmaWxlcyByZXF1aXJlZCB0byBzdGFydCB1cGxvYWRpbmcuIERlZmF1bHRzIHRvIDEuXG4gICAqL1xuICBtaW5GaWxlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGZpbGVzIGFsbG93ZWQgdG8gdXBsb2FkLiBEZWZhdWx0cyB0byAxLlxuICAgKi9cbiAgbWF4RmlsZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXN0cmljdCBzZWxlY3RlZCBmaWxlcyB0byBhIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLiAoZS5nLiAxMCBcXCogMTAyNCBcXCogMTAyNCBmb3IgMTBNQiBsaW1pdCkuXG4gICAqL1xuICBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpZXcgdHlwZSBvcHRpb24gZm9yIGZpbGUgYnJvd3NlclxuICAgKi9cbiAgdmlld1R5cGU/OiAnZ3JpZCcgfCAnbGlzdCc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAqL1xuICBlcnJvcnNUaW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogU3BlY2lmeSBbd2lkdGgsIGhlaWdodF0gaW4gcGl4ZWxzIG9mIHRoZSBkZXNrdG9wIG1vZGFsLlxuICAgKi9cbiAgbW9kYWxTaXplPzogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFsbCB1cGxvYWRzIGluIGEgcGljayBhcmUgY2FuY2VsbGVkLlxuICAgKi9cbiAgb25DYW5jZWw/OiBQaWNrZXJVcGxvYWREb25lQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgVUkgaXMgZXhpdGVkLlxuICAgKi9cbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgVUkgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIFBpY2tlckluc3RhbmNlIGFwcGxpY2F0aW9uIGhhbmRsZVxuICAgKi9cbiAgb25PcGVuPzogKGhhbmRsZTogUGlja2VySW5zdGFuY2UpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbmV2ZXIgdXNlciBzZWxlY3RzIGEgZmlsZS5cbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gVXNpbmcgdG8gdmV0byBmaWxlIHNlbGVjdGlvblxuICAgKiAvLyBJZiB5b3UgdGhyb3cgYW55IGVycm9yIGluIHRoaXMgZnVuY3Rpb24gaXQgd2lsbCByZWplY3QgdGhlIGZpbGUgc2VsZWN0aW9uLlxuICAgKiAvLyBUaGUgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciBhcyBhbiBhbGVydC5cbiAgICogb25GaWxlU2VsZWN0ZWQoZmlsZSkge1xuICAgKiAgIGlmIChmaWxlLnNpemUgPiAxMDAwICogMTAwMCkge1xuICAgKiAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIHRvbyBiaWcsIHNlbGVjdCBzb21ldGhpbmcgc21hbGxlciB0aGFuIDFNQicpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiAvLyBVc2luZyB0byBjaGFuZ2Ugc2VsZWN0ZWQgZmlsZSBuYW1lXG4gICAqIC8vIE5PVEU6IFRoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIGxvY2FsIHVwbG9hZHNcbiAgICogb25GaWxlU2VsZWN0ZWQoZmlsZSkge1xuICAgKiAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBhIG5ldyBmaWxlIGJ5IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogICByZXR1cm4geyAuLi5maWxlLCBuYW1lOiAnZm9vJyB9O1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIGFsc28gcmV0dXJuIGEgUHJvbWlzZSB0byBhbGxvdyBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBsb2dpYy5cbiAgICogWW91IGNhbiBwYXNzIGEgZmlsZSBvYmplY3QgdG8gYHJlc29sdmVgIGZvciBjaGFuZ2luZyB0aGUgZmlsZSBuYW1lLCBpdCB3aWxsIGJlaGF2ZSB0aGUgc2FtZSBhcyB3aGVuXG4gICAqIHRoZSBmaWxlIGlzIHJldHVybmVkIGZyb20gdGhlIG5vbi1hc3luYyBjYWxsYmFjay5cbiAgICpcbiAgICogYGBganNcbiAgICogb25GaWxlU2VsZWN0ZWQoZmlsZSkge1xuICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAqICAgICAvLyBEbyBzb21ldGhpbmcgYXN5bmNcbiAgICogICAgIHJlc29sdmUoKTtcbiAgICogICAgIC8vIE9yIHJlamVjdCB0aGUgc2VsZWN0aW9uIHdpdGggcmVqZWN0KClcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9uRmlsZVNlbGVjdGVkPzogUGlja2VyRmlsZUNhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBmaWxlIHVwbG9hZCBoYXMgYmVlbiBjYW5jZWxlZC5cbiAgICovXG4gIG9uRmlsZVVwbG9hZENhbmNlbD86IFBpY2tlckZpbGVDYW5jZWxDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZmlsZSBiZWdpbnMgdXBsb2FkaW5nLlxuICAgKi9cbiAgb25GaWxlVXBsb2FkU3RhcnRlZD86IFBpY2tlckZpbGVXaXRoVG9rZW5DYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZmlsZSBpcyBkb25lIHVwbG9hZGluZy5cbiAgICovXG4gIG9uRmlsZVVwbG9hZEZpbmlzaGVkPzogUGlja2VyRmlsZUNhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdXBsb2FkaW5nIGEgZmlsZSBmYWlscy5cbiAgICovXG4gIG9uRmlsZVVwbG9hZEZhaWxlZD86IFBpY2tlckZpbGVFcnJvckNhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyBtdWx0aS1wYXJ0IHVwbG9hZCBwcm9ncmVzcyBldmVudHMuIExvY2FsIGZpbGVzIG9ubHkuXG4gICAqL1xuICBvbkZpbGVVcGxvYWRQcm9ncmVzcz86IFBpY2tlckZpbGVQcm9ncmVzc0NhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gZmlsZSBpcyBjcm9wcGVkIGluIHBpY2tlclxuICAgKi9cbiAgb25GaWxlQ3JvcHBlZD86IFBpY2tlckZpbGVDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHVwbG9hZGluZyBzdGFydHMgKHVzZXIgaW5pdGlhdGVzIHVwbG9hZGluZykuXG4gICAqL1xuICBvblVwbG9hZFN0YXJ0ZWQ/OiBQaWNrZXJVcGxvYWRTdGFydGVkQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIHVwbG9hZGVkLlxuICAgKi9cbiAgb25VcGxvYWREb25lPzogUGlja2VyVXBsb2FkRG9uZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSB1bmlxdWUgaWQgZm9yIHRoZSBhcHBsaWNhdGlvbiBtb3VudCBwb2ludC5cbiAgICogTWF5IGJlIHVzZWZ1bCBmb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugd2lzaCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcGlja2VyIGluc3RhbmNlIG9wZW4gYXQgb25jZSxcbiAgICogdGhlbiBlYWNoIHdpbGwgbmVlZCB0aGVpciBvd24gdW5pcXVlIHJvb3RJZC5cbiAgICpcbiAgICogKipOb3RlOioqIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiBgZGlzcGxheU1vZGVgIGlzIGBkcm9wUGFuZWAuXG4gICAqL1xuICByb290SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0YXJ0IHVwbG9hZGluZyBhdXRvbWF0aWNhbGx5IHdoZW4gbWF4RmlsZXMgaXMgaGl0LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgc3RhcnRVcGxvYWRpbmdXaGVuTWF4RmlsZXNSZWFjaGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGZpbGUgc3RvcmFnZS5cbiAgICovXG4gIHN0b3JlVG8/OiBQaWNrZXJTdG9yZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9wdGlvbnMgZm9yIGltYWdlcyBwYXNzZWQgdG8gdGhlIGNyb3AgVUkuXG4gICAqL1xuICB0cmFuc2Zvcm1hdGlvbnM/OiBQaWNrZXJUcmFuc2Zvcm1hdGlvbk9wdGlvbnM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSB0aGUgbmV3IHRyYW5zZm9ybWF0aW9ucyBVSS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHRyYW5zZm9ybWF0aW9uc1VJPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGxvY2FsIGZpbGUgdXBsb2Fkcy5cbiAgICovXG4gIHVwbG9hZENvbmZpZz86IFVwbG9hZE9wdGlvbnM7XG4gIC8qKlxuICAgKiBTdGFydCB1cGxvYWRpbmcgaW1tZWRpYXRlbHkgb24gZmlsZSBzZWxlY3Rpb24uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogQGltcG9ydGFudCBUaGUgZmVhdHVyZSBpcyBjYW4gYmUgZW5hYmxlZCBvbmx5IGlmIGNyb3AgaXMgZGlzYWJsZWQgLSBkaXNhYmxlVHJhbnNmb3JtZXI6IHRydWVcbiAgICovXG4gIHVwbG9hZEluQmFja2dyb3VuZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXNvbHV0aW9uIG9mIHJlY29yZGVkIHZpZGVvLiBPbmUgb2YgXCIzMjB4MjQwXCIsIFwiNjQweDQ4MFwiIG9yIFwiMTI4MHg3MjBcIi4gRGVmYXVsdCBpcyBgXCI2NDB4NDgwXCJgLlxuICAgKi9cbiAgdmlkZW9SZXNvbHV0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIFNlbnRyeSBCcmVhZGNydW1icyBtZWNoYW5pc20gdG8gbG9nIGluZm9ybWF0aW9uIGFib3V0IG9jY3VyZWQgZXJyb3JzLlxuICAgKiBJdCBjYW4gb3ZlcnJpZGUgZ2xvYmFsIG9iamVjdHMgbGlrZSBjb25zb2xlLCBlcnJvciBldGMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHVzZVNlbnRyeUJyZWFkY3J1bWJzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hpY2ggUGlja2VyIGluc3RhbmNlIHNob3VsZCByZXNwb25kIHRvIHBhc3RlIGV2ZW50LlxuICAgKiBCeSBkZWZhdWx0IG9ubHkgaG92ZXJlZCBpbnN0YW5jZSByZXNwb25kcyB0byBldmVudC5cbiAgICogQHBhcmFtIHtib29sZWFuID0gZmFsc2V9IHBhc3RlVG9GaXJzdEluVmlld1BvcnQgSWYgbm9uZSBpbnN0YW5jZSBpcyBob3ZlcmVkIHRha2UgZmlyc3QgcGlja2VyIGluc3RhbmNlIGZ1bGx5IHZpc2libGUgaW4gdmlld3BvcnRcbiAgICogQHBhcmFtIHtib29sZWFuID0gZmFsc2V9IHBhc3RlVG9GaXJzdEluc3RhbmNlIElmIG5vbmUgaW5zdGFuY2UgaXMgaG92ZXJlZCB0YWtlIGZpcnN0IHBpY2tlciBpbnN0YW5jZSB0aGF0IGlzIGluaXRpYWxpemVkXG4gICAqIEBwYXN0ZVRvRmlyc3RJblZpZXdQb3J0IGlzIGNoZWNrZWQgZmlyc3RcbiAgICovXG4gIHBhc3RlTW9kZT86IHtcbiAgICBwYXN0ZVRvRmlyc3RJblZpZXdQb3J0PzogYm9vbGVhbixcbiAgICBwYXN0ZVRvRmlyc3RJbnN0YW5jZT86IGJvb2xlYW5cbiAgfTtcbiAgLyoqXG4gICAqIERpc2FibGUvRW5hYmxlIHBvc3NpYmlsaXR5IHRvIHVwbG9hZCBkaXJlY3Rvcmllcy5cbiAgICovXG4gIGRpc2FibGVEaXJlY3RvcnlVcGxvYWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlL0Rpc2FibGUgTWluaSBVcGxvYWRlclxuICAgKi9cbiAgbWluaVVwbG9hZGVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZS9EaXNhYmxlIHBvc3NpYmlsaXR5IHRvIG11bHRpcGxlIGZpbGUgdXBsb2FkXG4gICAqL1xuICBtdWx0aXBsZUZpbGVVcGxvYWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckNyb3BPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1haW50YWluIGFzcGVjdCByYXRpbyBmb3IgY3JvcCBzZWxlY3Rpb24uIChlLmcuIDE2LzksIDgwMC82MDApLlxuICAgKi9cbiAgYXNwZWN0UmF0aW8/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3JjZSBhbGwgaW1hZ2VzIHRvIGJlIGNyb3BwZWQgYmVmb3JlIHVwbG9hZGluZy5cbiAgICovXG4gIGZvcmNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJUcmFuc2Zvcm1hdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogRW5hYmxlIGNyb3AuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIGNyb3A/OiBib29sZWFuIHwgUGlja2VyQ3JvcE9wdGlvbnM7XG4gIC8qKlxuICAgKiBFbmFibGUgY2lyY2xlIGNyb3AuIERpc2FibGVkIGlmIGNyb3AuYXNwZWN0UmF0aW8gaXMgZGVmaW5lZCBhbmQgbm90IDEuIENvbnZlcnRzIHRvIFBORy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgY2lyY2xlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSBpbWFnZSByb3RhdGlvbi4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcm90YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYmFsIGZvcmNlIGNyb3Agb3B0aW9uLiBDYW4gYmUgdXNlIGllIHdpdGggY2lyY2xlXG4gICAqL1xuICBmb3JjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyQWNjZXB0Rm5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVkIGFjY2VwdCBzdHJpbmdcbiAgICovXG4gIGFjY2VwdDogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBY2NlcHQgc3RyaW5nIGNvbnZlcnRlZCB0byBtaW1ldHlwZVxuICAgKi9cbiAgYWNjZXB0TWltZTogc3RyaW5nW107XG4gIC8qKlxuICAgKiBNaW1ldHlwZSBiYXNlZCBtYWdpYyBieXRlc1xuICAgKiB7QGxpbmsgaHR0cHM6Ly9maWxlc3RhY2suZ2l0aHViLmlvL2ZpbGVzdGFjay1qcy9nbG9iYWxzLmh0bWwjZ2V0bWltZXR5cGV9XG4gICAqL1xuICBtaW1lRnJvbU1hZ2ljQnl0ZXM6IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqXG4gICAqIE1pbWV0eXBlIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uXG4gICAqIHtAbGluayBodHRwczovL2ZpbGVzdGFjay5naXRodWIuaW8vZmlsZXN0YWNrLWpzL2dsb2JhbHMuaHRtbCNleHRlbnNpb250b21pbWV9XG4gICAqL1xuICBtaW1lRnJvbUV4dGVuc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIHN5bmNocm9ub3VzLWxvb2tpbmcgd3JhcHBlciBmb3IgbG9hZGluZyB0aGUgcGlja2VyIGFuZCBjYWxsaW5nIGl0cyBtZXRob2RzLlxuICogVGhpcyBpcyBjdXJyZW50bHkgbmVlZGVkIGJlY2F1c2UgdGhlIHBpY2tlciBtb2R1bGUgaXMgbG9hZGVkIGFzeW5jaHJvbm91c2x5LlxuICogRXZlbnR1YWxseSB3ZSBzaG91bGQgb2ZmZXIgYSBidW5kbGUgd2l0aCB0aGUgcGlja2VyIG1vZHVsZSBpbmNsdWRlZC5cbiAqL1xuY2xhc3MgUGlja2VyTG9hZGVyIHtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZDogUHJvbWlzZTxQaWNrZXJJbnN0YW5jZT47XG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQ2xpZW50LCBvcHRpb25zPzogUGlja2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHZhbGlkYXRlUmVzID0gZ2V0VmFsaWRhdG9yKFBpY2tlclBhcmFtc1NjaGVtYSkob3B0aW9ucyk7XG5cbiAgICBpZiAodmFsaWRhdGVSZXMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgdmFsaWRhdGVSZXMuZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IucGF0aC5pbmNsdWRlcygnZnJvbVNvdXJjZXMnKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgV2FybmluZzogSW52YWxpZCBzb3VyY2UgXFxcIiR7ZXJyb3IuaW5zdGFuY2V9XFxcIiBmb3VuZCBhbmQgcmVtb3ZlZCFgKTtcbiAgICAgICAgICBvcHRpb25zLmZyb21Tb3VyY2VzID0gb3B0aW9ucy5mcm9tU291cmNlcy5maWx0ZXIoc291cmNlID0+IHNvdXJjZSAhPT0gZXJyb3IuaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcihgSW52YWxpZCBwaWNrZXIgcGFyYW1zYCwgdmFsaWRhdGVSZXMuZXJyb3JzLCBGaWxlc3RhY2tFcnJvclR5cGUuVkFMSURBVElPTik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFvcHRpb25zLmZyb21Tb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5mcm9tU291cmNlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRoaXMubG9hZE1vZHVsZShjbGllbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwaWNrZXIgPSBhd2FpdCB0aGlzLl9pbml0aWFsaXplZDtcbiAgICBhd2FpdCBwaWNrZXIub3BlbigpO1xuICB9XG5cbiAgYXN5bmMgY3JvcChmaWxlczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwaWNrZXIgPSBhd2FpdCB0aGlzLl9pbml0aWFsaXplZDtcbiAgICBhd2FpdCBwaWNrZXIuY3JvcChmaWxlcyk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwaWNrZXIgPSBhd2FpdCB0aGlzLl9pbml0aWFsaXplZDtcbiAgICBhd2FpdCBwaWNrZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwaWNrZXIgPSBhd2FpdCB0aGlzLl9pbml0aWFsaXplZDtcbiAgICBhd2FpdCBwaWNrZXIuY2FuY2VsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRNb2R1bGUoY2xpZW50OiBDbGllbnQsIG9wdGlvbnM/OiBQaWNrZXJPcHRpb25zKTogUHJvbWlzZTxQaWNrZXJJbnN0YW5jZT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbjogeyB1cmxzOiB7IHBpY2tlclVybDogdXJsIH0gfSB9ID0gY2xpZW50O1xuICAgIGNvbnN0IFBpY2tlciA9IGF3YWl0IGxvYWRNb2R1bGUoRklMRVNUQUNLX01PRFVMRVMuUElDS0VSLCB1cmwpO1xuICAgIHJldHVybiBuZXcgUGlja2VyKGNsaWVudCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkcyBhbmQgY3JlYXRlcyBwaWNrZXIgaW5zdGFuY2VcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGNsaWVudFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpY2tlciA9IChjbGllbnQ6IENsaWVudCwgb3B0aW9ucz86IFBpY2tlck9wdGlvbnMpOiBQaWNrZXJJbnN0YW5jZSA9PiB7XG4gIHJldHVybiBuZXcgUGlja2VyTG9hZGVyKGNsaWVudCwgb3B0aW9ucyk7XG59O1xuIl19