From dbcc3eb94f2b43a4873cf087ae2daccd5f653680 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Mon, 25 Jan 2016 06:17:40 -0500 Subject: [PATCH] release 0.3.0 --- CHANGELOG.md | 13 ++ README.md | 2 +- bower.json | 2 +- ngOfficeUiFabric.js | 502 ++++++++++++++++++++++++++++++++++++---- ngOfficeUiFabric.min.js | 6 +- package.json | 2 +- 6 files changed, 473 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c082fba..f4eb7b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + +### [0.3.0 (January 25, 2016)](https://github.com/ngOfficeUIFabric/ng-officeuifabric/releases/tag/0.3.0) + +#### Features +- **uif-callout**: directive added (@jjczopek; closes [#15](https://github.com/ngOfficeUIFabric/ng-officeuifabric/pull/15)) +- **uif-contextual-menu**: added attribute validation & error logging to console (by @s-KaiNet; closes [#99](https://github.com/ngOfficeUIFabric/ng-officeuifabric/issues/99)) +- **uif-table**: added support to select multiple rows (by @waldekmastykarz; closes [#61](https://github.com/ngOfficeUIFabric/ng-officeuifabric/issues/61)) +- **uif-table**: added attribute validation & error logging to console (by @waldekmastykarz; closes [#101](https://github.com/ngOfficeUIFabric/ng-officeuifabric/issues/101)) +- **uif-spinner**: added attribute validation & error logging to console (by @s-KaiNet; closes [#100](https://github.com/ngOfficeUIFabric/ng-officeuifabric/issues/100)) + +#### Breaking Changes +- **uif-spinner**: updated attribute name `uif-spinnersize` to `uif-size` (by @s-KaiNet; closes [#102](https://github.com/ngOfficeUIFabric/ng-officeuifabric/issues/102)) + ### [0.2.0 (January 19, 2016)](https://github.com/ngOfficeUIFabric/ng-officeuifabric/releases/tag/0.2.0) diff --git a/README.md b/README.md index bf36a4f..e6ff3fc 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Install-Package ng-office-ui-fabric Hosting facilitated by [CDNJS](https://cdnjs.com), a community driven CDN. Simply add a reference in your page to: ```html - + ``` > **NOTE**: Be sure to use the most current version! diff --git a/bower.json b/bower.json index 628a03d..2396d49 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "ng-office-ui-fabric", "description": "Angular directives for Microsoft's Office UI Fabric.", - "version": "0.2.0", + "version": "0.3.0", "author": { "name": "https://github.com/ngOfficeUIFabric/ng-officeuifabric/graphs/contributors" }, diff --git a/ngOfficeUiFabric.js b/ngOfficeUiFabric.js index bebb945..b7790f5 100644 --- a/ngOfficeUiFabric.js +++ b/ngOfficeUiFabric.js @@ -3,7 +3,7 @@ * http://ngofficeuifabric.com * Angular 1.x directives for Microsoft's Office UI Fabric * https://angularjs.org & https://dev.office.com/fabric - * v0.2.0 + * v0.3.0 */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') @@ -86,19 +86,21 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; var ng = __webpack_require__(2); - var choicefieldModule = __webpack_require__(4); - var contextualMenuModule = __webpack_require__(6); - var dropdownModule = __webpack_require__(7); - var iconModule = __webpack_require__(8); - var linkModule = __webpack_require__(10); - var overlayModule = __webpack_require__(11); - var progressIndicatorModule = __webpack_require__(13); - var searchboxModule = __webpack_require__(14); - var spinnerModule = __webpack_require__(15); - var tableModule = __webpack_require__(16); - var textFieldModule = __webpack_require__(17); - var toggleModule = __webpack_require__(18); + var calloutModule = __webpack_require__(4); + var choicefieldModule = __webpack_require__(7); + var contextualMenuModule = __webpack_require__(9); + var dropdownModule = __webpack_require__(10); + var iconModule = __webpack_require__(11); + var linkModule = __webpack_require__(13); + var overlayModule = __webpack_require__(14); + var progressIndicatorModule = __webpack_require__(16); + var searchboxModule = __webpack_require__(17); + var spinnerModule = __webpack_require__(18); + var tableModule = __webpack_require__(20); + var textFieldModule = __webpack_require__(22); + var toggleModule = __webpack_require__(23); exports.module = ng.module('officeuifabric.components', [ + calloutModule.module.name, choicefieldModule.module.name, contextualMenuModule.module.name, dropdownModule.module.name, @@ -120,7 +122,192 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; var ng = __webpack_require__(2); - var choicefieldTypeEnum_1 = __webpack_require__(5); + var calloutTypeEnum_1 = __webpack_require__(5); + var calloutArrowEnum_1 = __webpack_require__(6); + var CalloutController = (function () { + function CalloutController($log) { + this.$log = $log; + } + CalloutController.$inject = ['$log']; + return CalloutController; + })(); + exports.CalloutController = CalloutController; + var CalloutHeaderDirective = (function () { + function CalloutHeaderDirective() { + this.restrict = 'E'; + this.transclude = true; + this.replace = false; + this.scope = false; + this.template = '

'; + } + CalloutHeaderDirective.factory = function () { + var directive = function () { return new CalloutHeaderDirective(); }; + return directive; + }; + CalloutHeaderDirective.prototype.link = function (scope, instanceElement, attrs, ctrls) { + var mainWrapper = instanceElement.parent().parent(); + if (!ng.isUndefined(mainWrapper) && mainWrapper.hasClass('ms-Callout-main')) { + var detachedHeader = instanceElement.detach(); + mainWrapper.prepend(detachedHeader); + } + }; + return CalloutHeaderDirective; + })(); + exports.CalloutHeaderDirective = CalloutHeaderDirective; + var CalloutContentDirective = (function () { + function CalloutContentDirective() { + this.restrict = 'E'; + this.transclude = true; + this.replace = false; + this.scope = false; + this.template = '

'; + } + CalloutContentDirective.factory = function () { + var directive = function () { return new CalloutContentDirective(); }; + return directive; + }; + return CalloutContentDirective; + })(); + exports.CalloutContentDirective = CalloutContentDirective; + var CalloutActionsDirective = (function () { + function CalloutActionsDirective() { + this.restrict = 'E'; + this.transclude = true; + this.replace = false; + this.scope = false; + this.template = '
'; + } + CalloutActionsDirective.factory = function () { + var directive = function () { return new CalloutActionsDirective(); }; + return directive; + }; + return CalloutActionsDirective; + })(); + exports.CalloutActionsDirective = CalloutActionsDirective; + var CalloutDirective = (function () { + function CalloutDirective() { + this.restrict = 'E'; + this.transclude = true; + this.replace = false; + this.template = '
' + + '
'; + this.require = ['uifCallout']; + this.scope = { + ngShow: '=', + uifType: '@' + }; + this.controller = CalloutController; + } + CalloutDirective.factory = function () { + var directive = function () { return new CalloutDirective(); }; + return directive; + }; + CalloutDirective.prototype.link = function (scope, instanceElement, attrs, ctrls) { + var calloutController = ctrls[0]; + attrs.$observe('uifType', function (calloutType) { + if (ng.isUndefined(calloutTypeEnum_1.CalloutType[calloutType])) { + calloutController.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.callout - "' + + calloutType + '" is not a valid value for uifType. It should be oobe or peek'); + } + }); + if (!attrs.uifArrow) { + scope.arrowDirection = 'Left'; + } + attrs.$observe('uifArrow', function (attrArrowDirection) { + if (ng.isUndefined(calloutArrowEnum_1.CalloutArrow[attrArrowDirection])) { + calloutController.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.callout - "' + + attrArrowDirection + '" is not a valid value for uifArrow. It should be left, right, top, bottom.'); + return; + } + var capitalizedDirection = (attrArrowDirection.charAt(0)).toUpperCase(); + capitalizedDirection += (attrArrowDirection.slice(1)).toLowerCase(); + scope.arrowDirection = capitalizedDirection; + }); + scope.hasSeparator = (!ng.isUndefined(attrs.uifActionText) || !ng.isUndefined(attrs.uifSeparator)); + if (!ng.isUndefined(attrs.uifClose)) { + scope.closeButton = true; + var closeButtonElement = ng.element(''); + var calloutDiv = instanceElement.find('div').eq(0); + calloutDiv.append(closeButtonElement); + closeButtonElement.bind('click', function (eventObject) { + scope.ngShow = false; + scope.closeButtonClicked = true; + scope.$apply(); + }); + } + instanceElement.bind('mouseenter', function (eventObject) { + scope.isMouseOver = true; + scope.$apply(); + }); + instanceElement.bind('mouseleave', function (eventObject) { + scope.isMouseOver = false; + scope.$apply(); + }); + scope.$watch('ngShow', function (newValue, oldValue) { + var isClosingByButtonClick = !newValue && scope.closeButtonClicked; + if (isClosingByButtonClick) { + scope.ngShow = scope.closeButtonClicked = false; + return; + } + if (!newValue) { + scope.ngShow = scope.isMouseOver; + } + }); + scope.$watch('isMouseOver', function (newVal, oldVal) { + if (!newVal && oldVal) { + if (!scope.closeButton) { + scope.ngShow = false; + } + } + }); + }; + return CalloutDirective; + })(); + exports.CalloutDirective = CalloutDirective; + exports.module = ng.module('officeuifabric.components.callout', ['officeuifabric.components']) + .directive('uifCallout', CalloutDirective.factory()) + .directive('uifCalloutHeader', CalloutHeaderDirective.factory()) + .directive('uifCalloutContent', CalloutContentDirective.factory()) + .directive('uifCalloutActions', CalloutActionsDirective.factory()); + + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + + 'use strict'; + (function (CalloutType) { + CalloutType[CalloutType["oobe"] = 0] = "oobe"; + CalloutType[CalloutType["peek"] = 1] = "peek"; + })(exports.CalloutType || (exports.CalloutType = {})); + var CalloutType = exports.CalloutType; + + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + 'use strict'; + (function (CalloutArrow) { + CalloutArrow[CalloutArrow["left"] = 0] = "left"; + CalloutArrow[CalloutArrow["right"] = 1] = "right"; + CalloutArrow[CalloutArrow["top"] = 2] = "top"; + CalloutArrow[CalloutArrow["bottom"] = 3] = "bottom"; + })(exports.CalloutArrow || (exports.CalloutArrow = {})); + var CalloutArrow = exports.CalloutArrow; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var ng = __webpack_require__(2); + var choicefieldTypeEnum_1 = __webpack_require__(8); var ChoicefieldOptionController = (function () { function ChoicefieldOptionController($log) { this.$log = $log; @@ -287,7 +474,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 5 */ +/* 8 */ /***/ function(module, exports) { 'use strict'; @@ -300,7 +487,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 6 */ +/* 9 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -313,9 +500,11 @@ return /******/ (function(modules) { // webpackBootstrap MenuItemTypes[MenuItemTypes["subMenu"] = 3] = "subMenu"; })(MenuItemTypes || (MenuItemTypes = {})); exports.contextualMenuItemDirectiveName = 'uifContextualMenuItem'; + exports.contextualMenuDirectiveName = 'uifContextualMenu'; var ContextualMenuItemDirective = (function () { - function ContextualMenuItemDirective() { + function ContextualMenuItemDirective($log) { var _this = this; + this.$log = $log; this.restrict = 'E'; this.require = '^uifContextualMenu'; this.transclude = true; @@ -325,6 +514,12 @@ return /******/ (function(modules) { // webpackBootstrap if (ng.isUndefined(type)) { return _this.templateTypes[MenuItemTypes.link]; } + if (MenuItemTypes[type] === undefined) { + _this.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - unsupported menu type:\n' + + 'the type \'' + type + '\' is not supported by ng-Office UI Fabric as valid type for context menu.' + + 'Supported types can be found under MenuItemTypes enum here:\n' + + 'https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/contextualmenu/contextualMenu.ts'); + } return _this.templateTypes[MenuItemTypes[type]]; }; this.replace = true; @@ -337,17 +532,30 @@ return /******/ (function(modules) { // webpackBootstrap }; this.templateTypes = {}; this.templateTypes[MenuItemTypes.subMenu] = - "
  • \n {{text}}\n \n
    \n
  • "; + "
  • \n {{text}}\n \n
    \n
  • "; this.templateTypes[MenuItemTypes.link] = - "
  • \n {{text}}\n
  • "; + "
  • \n {{text}}\n
  • "; this.templateTypes[MenuItemTypes.header] = "
  • {{text}}
  • "; this.templateTypes[MenuItemTypes.divider] = "
  • "; } ContextualMenuItemDirective.factory = function () { - var directive = function () { return new ContextualMenuItemDirective(); }; + var directive = function ($log) { return new ContextualMenuItemDirective($log); }; + directive.$inject = ['$log']; return directive; }; ContextualMenuItemDirective.prototype.link = function ($scope, $element, $attrs, contextualMenuController, $transclude) { + if (typeof $scope.isDisabled !== 'boolean' && $scope.isDisabled !== undefined) { + contextualMenuController.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - ' + + 'invalid attribute type: \'uif-is-disabled\'.\n' + + 'The type \'' + typeof $scope.isDisabled + '\' is not supported as valid type for \'uif-is-disabled\' attribute for ' + + '. The valid type is boolean.'); + } + if (typeof $scope.isSelected !== 'boolean' && $scope.isSelected !== undefined) { + contextualMenuController.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - ' + + 'invalid attribute type: \'uif-is-selected\'.\n' + + 'The type \'' + typeof $scope.isSelected + '\' is not supported as valid type for \'uif-is-selected\' attribute for ' + + '. The valid type is boolean.'); + } $transclude(function (clone) { $element.find('div').replaceWith(clone); }); @@ -405,7 +613,6 @@ return /******/ (function(modules) { // webpackBootstrap return ContextualMenuItemController; })(); exports.ContextualMenuItemController = ContextualMenuItemController; - exports.contextualMenuDirectiveName = 'uifContextualMenu'; var ContextualMenuDirective = (function () { function ContextualMenuDirective() { this.restrict = 'E'; @@ -436,16 +643,22 @@ return /******/ (function(modules) { // webpackBootstrap })(); exports.ContextualMenuDirective = ContextualMenuDirective; var ContextualMenuController = (function () { - function ContextualMenuController($scope, $animate, $element) { + function ContextualMenuController($scope, $animate, $element, $log) { var _this = this; this.$scope = $scope; this.$animate = $animate; this.$element = $element; + this.$log = $log; this.isOpenClassName = 'is-open'; if (ng.isUndefined($element.controller(exports.contextualMenuItemDirectiveName))) { $scope.isRootMenu = true; } $scope.$watch('isOpen', function (newValue) { + if (typeof newValue !== 'boolean' && newValue !== undefined) { + _this.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - invalid attribute type: \'uif-is-open\'.\n' + + 'The type \'' + typeof newValue + '\' is not supported as valid type for \'uif-is-open\' attribute for ' + + '. The valid type is boolean.'); + } $animate[newValue ? 'addClass' : 'removeClass']($element, _this.isOpenClassName); }); } @@ -478,7 +691,7 @@ return /******/ (function(modules) { // webpackBootstrap } return this.$scope.multiselect.toLowerCase() === 'true'; }; - ContextualMenuController.$inject = ['$scope', '$animate', '$element']; + ContextualMenuController.$inject = ['$scope', '$animate', '$element', '$log']; return ContextualMenuController; })(); exports.ContextualMenuController = ContextualMenuController; @@ -489,7 +702,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 7 */ +/* 10 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -606,12 +819,12 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 8 */ +/* 11 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var ng = __webpack_require__(2); - var iconEnum_1 = __webpack_require__(9); + var iconEnum_1 = __webpack_require__(12); var IconController = (function () { function IconController($log) { this.$log = $log; @@ -655,7 +868,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 9 */ +/* 12 */ /***/ function(module, exports) { 'use strict'; @@ -1007,7 +1220,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 10 */ +/* 13 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1036,12 +1249,12 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 11 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var ng = __webpack_require__(2); - var overlayModeEnum_ts_1 = __webpack_require__(12); + var overlayModeEnum_ts_1 = __webpack_require__(15); var OverlayController = (function () { function OverlayController(log) { this.log = log; @@ -1086,7 +1299,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 12 */ +/* 15 */ /***/ function(module, exports) { 'use strict'; @@ -1098,7 +1311,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 13 */ +/* 16 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1152,7 +1365,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 14 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1222,11 +1435,12 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 15 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var ng = __webpack_require__(2); + var spinnerSizeEnum_1 = __webpack_require__(19); var SpinnerDirective = (function () { function SpinnerDirective() { this.restrict = 'E'; @@ -1242,9 +1456,15 @@ return /******/ (function(modules) { // webpackBootstrap var directive = function () { return new SpinnerDirective(); }; return directive; }; - SpinnerDirective.prototype.link = function (scope, instanceElement, attrs, ctrl, $transclude) { - if (attrs.uifSpinnersize === 'large') { - instanceElement.addClass('ms-Spinner--large'); + SpinnerDirective.prototype.link = function (scope, instanceElement, attrs, controller, $transclude) { + if (ng.isDefined(attrs.uifSize)) { + if (ng.isUndefined(spinnerSizeEnum_1.SpinnerSize[attrs.uifSize])) { + controller.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.spinner - Unsupported size: ' + + 'Spinner size (\'' + attrs.uifSize + '\') is not supported by the Office UI Fabric.'); + } + if (spinnerSizeEnum_1.SpinnerSize[attrs.uifSize] === spinnerSizeEnum_1.SpinnerSize.large) { + instanceElement.addClass('ms-Spinner--large'); + } } if (attrs.ngShow != null) { scope.$watch('ngShow', function (newVisible, oldVisible, spinnerScope) { @@ -1272,11 +1492,12 @@ return /******/ (function(modules) { // webpackBootstrap })(); exports.SpinnerDirective = SpinnerDirective; var SpinnerController = (function () { - function SpinnerController($scope, $element, $interval) { + function SpinnerController($scope, $element, $interval, $log) { var _this = this; this.$scope = $scope; this.$element = $element; this.$interval = $interval; + this.$log = $log; this._offsetSize = 0.179; this._numCircles = 8; this._animationSpeed = 90; @@ -1341,7 +1562,7 @@ return /******/ (function(modules) { // webpackBootstrap } circle.opacity = newOpacity; }; - SpinnerController.$inject = ['$scope', '$element', '$interval']; + SpinnerController.$inject = ['$scope', '$element', '$interval', '$log']; return SpinnerController; })(); var CircleObject = (function () { @@ -1366,16 +1587,31 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 16 */ +/* 19 */ +/***/ function(module, exports) { + + 'use strict'; + (function (SpinnerSize) { + SpinnerSize[SpinnerSize['small'] = 0] = 'small'; + SpinnerSize[SpinnerSize['large'] = 1] = 'large'; + })(exports.SpinnerSize || (exports.SpinnerSize = {})); + var SpinnerSize = exports.SpinnerSize; + + +/***/ }, +/* 20 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var ng = __webpack_require__(2); + var tableRowSelectModeEnum_1 = __webpack_require__(21); var TableController = (function () { - function TableController($scope) { + function TableController($scope, $log) { this.$scope = $scope; + this.$log = $log; this.$scope.orderBy = null; this.$scope.orderAsc = true; + this.$scope.rows = []; } Object.defineProperty(TableController.prototype, "orderBy", { get: function () { @@ -1399,7 +1635,46 @@ return /******/ (function(modules) { // webpackBootstrap enumerable: true, configurable: true }); - TableController.$inject = ['$scope']; + Object.defineProperty(TableController.prototype, "rowSelectMode", { + get: function () { + return this.$scope.rowSelectMode; + }, + set: function (rowSelectMode) { + if (tableRowSelectModeEnum_1.TableRowSelectModeEnum[rowSelectMode] === undefined) { + this.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.table. ' + + '\'' + rowSelectMode + '\' is not a valid option for \'uif-row-select-mode\'. ' + + 'Valid options are none|single|multiple.'); + } + this.$scope.rowSelectMode = rowSelectMode; + this.$scope.$digest(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableController.prototype, "rows", { + get: function () { + return this.$scope.rows; + }, + set: function (rows) { + this.$scope.rows = rows; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableController.prototype, "selectedItems", { + get: function () { + var selectedItems = []; + for (var i = 0; i < this.rows.length; i++) { + if (this.rows[i].selected === true) { + selectedItems.push(this.rows[i].item); + } + } + return selectedItems; + }, + enumerable: true, + configurable: true + }); + TableController.$inject = ['$scope', '$log']; return TableController; })(); var TableDirective = (function () { @@ -1415,23 +1690,115 @@ return /******/ (function(modules) { // webpackBootstrap var directive = function () { return new TableDirective(); }; return directive; }; + TableDirective.prototype.link = function (scope, instanceElement, attrs, controller) { + if (attrs.uifRowSelectMode !== undefined && attrs.uifRowSelectMode !== null) { + if (tableRowSelectModeEnum_1.TableRowSelectModeEnum[attrs.uifRowSelectMode] === undefined) { + controller.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.table. ' + + '\'' + attrs.uifRowSelectMode + '\' is not a valid option for \'uif-row-select-mode\'. ' + + 'Valid options are none|single|multiple.'); + } + else { + scope.rowSelectMode = attrs.uifRowSelectMode; + } + } + if (scope.rowSelectMode === undefined) { + scope.rowSelectMode = tableRowSelectModeEnum_1.TableRowSelectModeEnum[tableRowSelectModeEnum_1.TableRowSelectModeEnum.none]; + } + }; return TableDirective; })(); exports.TableDirective = TableDirective; + var TableRowController = (function () { + function TableRowController($scope, $log) { + this.$scope = $scope; + this.$log = $log; + } + Object.defineProperty(TableRowController.prototype, "item", { + get: function () { + return this.$scope.item; + }, + set: function (item) { + this.$scope.item = item; + this.$scope.$digest(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableRowController.prototype, "selected", { + get: function () { + return this.$scope.selected; + }, + set: function (selected) { + this.$scope.selected = selected; + this.$scope.$digest(); + }, + enumerable: true, + configurable: true + }); + TableRowController.$inject = ['$scope', '$log']; + return TableRowController; + })(); var TableRowDirective = (function () { function TableRowDirective() { this.restrict = 'E'; this.transclude = true; this.replace = true; this.template = '
    '; + this.require = '^uifTable'; + this.scope = { + item: '=uifItem' + }; + this.controller = TableRowController; } TableRowDirective.factory = function () { var directive = function () { return new TableRowDirective(); }; return directive; }; - TableRowDirective.prototype.link = function (scope, instanceElement, attrs) { - if (attrs.uifSelected === 'true') { - instanceElement.addClass('is-selected'); + TableRowDirective.prototype.link = function (scope, instanceElement, attrs, table) { + if (attrs.uifSelected !== undefined && + attrs.uifSelected !== null) { + var selectedString = attrs.uifSelected.toLowerCase(); + if (selectedString !== 'true' && selectedString !== 'false') { + table.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.table. ' + + '\'' + attrs.uifSelected + '\' is not a valid boolean value. ' + + 'Valid options are true|false.'); + } + else { + if (selectedString === 'true') { + scope.selected = true; + } + } + } + if (scope.item !== undefined) { + table.rows.push(scope); + } + scope.rowClick = function (ev) { + scope.selected = !scope.selected; + scope.$apply(); + }; + scope.$watch('selected', function (newValue, oldValue, tableRowScope) { + if (newValue === true) { + if (table.rowSelectMode === tableRowSelectModeEnum_1.TableRowSelectModeEnum[tableRowSelectModeEnum_1.TableRowSelectModeEnum.single]) { + if (table.rows) { + for (var i = 0; i < table.rows.length; i++) { + if (table.rows[i] !== tableRowScope) { + table.rows[i].selected = false; + } + } + } + } + instanceElement.addClass('is-selected'); + } + else { + instanceElement.removeClass('is-selected'); + } + }); + if (table.rowSelectMode !== tableRowSelectModeEnum_1.TableRowSelectModeEnum[tableRowSelectModeEnum_1.TableRowSelectModeEnum.none] && + scope.item !== undefined) { + instanceElement.on('click', scope.rowClick); + } + if (table.rowSelectMode === tableRowSelectModeEnum_1.TableRowSelectModeEnum[tableRowSelectModeEnum_1.TableRowSelectModeEnum.none]) { + instanceElement.css('cursor', 'default'); } }; return TableRowDirective; @@ -1442,11 +1809,37 @@ return /******/ (function(modules) { // webpackBootstrap this.restrict = 'E'; this.template = ''; this.replace = true; + this.require = ['^uifTable', '^uifTableRow']; } TableRowSelectDirective.factory = function () { var directive = function () { return new TableRowSelectDirective(); }; return directive; }; + TableRowSelectDirective.prototype.link = function (scope, instanceElement, attrs, controllers) { + scope.rowSelectClick = function (ev) { + var table = controllers[0]; + var row = controllers[1]; + if (table.rowSelectMode !== tableRowSelectModeEnum_1.TableRowSelectModeEnum[tableRowSelectModeEnum_1.TableRowSelectModeEnum.multiple]) { + return; + } + if (row.item === undefined || row.item === null) { + var shouldSelectAll = false; + for (var i = 0; i < table.rows.length; i++) { + if (table.rows[i].selected !== true) { + shouldSelectAll = true; + break; + } + } + for (var i = 0; i < table.rows.length; i++) { + if (table.rows[i].selected !== shouldSelectAll) { + table.rows[i].selected = shouldSelectAll; + } + } + scope.$apply(); + } + }; + instanceElement.on('click', scope.rowSelectClick); + }; return TableRowSelectDirective; })(); exports.TableRowSelectDirective = TableRowSelectDirective; @@ -1522,7 +1915,20 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 17 */ +/* 21 */ +/***/ function(module, exports) { + + 'use strict'; + (function (TableRowSelectModeEnum) { + TableRowSelectModeEnum[TableRowSelectModeEnum["none"] = 0] = "none"; + TableRowSelectModeEnum[TableRowSelectModeEnum["single"] = 1] = "single"; + TableRowSelectModeEnum[TableRowSelectModeEnum["multiple"] = 2] = "multiple"; + })(exports.TableRowSelectModeEnum || (exports.TableRowSelectModeEnum = {})); + var TableRowSelectModeEnum = exports.TableRowSelectModeEnum; + + +/***/ }, +/* 22 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1580,7 +1986,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 18 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1629,4 +2035,4 @@ return /******/ (function(modules) { // webpackBootstrap /******/ ]) }); ; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAzY2NiZmZjZTZkMjhjZWY5MDE5YyIsIndlYnBhY2s6Ly8vLi9zcmMvY29yZS9jb3JlLnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcImFuZ3VsYXJcIiIsIndlYnBhY2s6Ly8vLi9zcmMvY29yZS9jb21wb25lbnRzLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2Nob2ljZWZpZWxkL2Nob2ljZWZpZWxkRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2Nob2ljZWZpZWxkL2Nob2ljZWZpZWxkVHlwZUVudW0udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY29udGV4dHVhbG1lbnUvY29udGV4dHVhbE1lbnUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd25EaXJlY3RpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaWNvbi9pY29uRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2ljb24vaWNvbkVudW0udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbGluay9saW5rRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheURpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9vdmVybGF5L292ZXJsYXlNb2RlRW51bS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzc2luZGljYXRvci9wcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWFyY2hib3gvc2VhcmNoYm94RGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lckRpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZURpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90ZXh0ZmllbGQvdGV4dEZpZWxkRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGVEaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDdENBO0FBQ0E7QUFDQTs7Ozs7OztBQ0ZBLGdEOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMEIsT0FBTyx1Q0FBdUMsU0FBUyxXQUFXLE9BQU87QUFDbkcsa0RBQWlELGFBQWEsb0JBQW9CLGNBQWM7QUFDaEcsNEJBQTJCLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiLFVBQVM7QUFDVDtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBdUIsMkJBQTJCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHdDQUF3QztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDcktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQywwREFBMEQ7QUFDM0Q7QUFDQTs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDLHNDQUFzQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVLQUFzSyxxREFBcUQsb0NBQW9DLE1BQU07QUFDclE7QUFDQSxxSEFBb0gscURBQXFELHNEQUFzRCxNQUFNO0FBQ3JPLDJIQUEwSCxNQUFNO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQywwQ0FBMEM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxzQ0FBc0M7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ3RMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHNDQUFzQztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2IsVUFBUztBQUNUO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGdDQUErQixvQkFBb0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXdCLHVFQUF1RTtBQUMvRjtBQUNBLGdEQUErQyxlQUFlO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLGdDQUFnQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSx1REFBc0QsU0FBUztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLDRCQUE0QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUMsNENBQTRDO0FBQzdDO0FBQ0E7Ozs7Ozs7QUN6VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF1QyxVQUFVO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLDRCQUE0QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNEQsMENBQTBDO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXdDLGtDQUFrQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQyxrREFBa0Q7QUFDbkQ7Ozs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEwRCxTQUFTO0FBQ25FO0FBQ0E7QUFDQSx1RUFBc0UsZ0NBQWdDO0FBQ3RHO0FBQ0Esa0VBQWlFLGdCQUFnQjtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0MsNENBQTRDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUE4RCx1QkFBdUI7QUFDckY7QUFDQSxzQ0FBcUMsc0JBQXNCO0FBQzNELHVEQUFzRCxzQkFBc0I7QUFDNUUsMkVBQTBFLGFBQWE7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxpQ0FBaUM7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7Ozs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQywrQkFBK0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsRUFBQztBQUNEO0FBQ0E7Ozs7Ozs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyw2QkFBNkI7QUFDbEU7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxnQ0FBZ0M7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHNDQUFzQztBQUMzRTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLGlDQUFpQztBQUN0RTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsbUNBQW1DO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQStCLGtCQUFrQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUEyRTtBQUMzRTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQXlDO0FBQ3pDLHNHQUFxRztBQUNyRyw2REFBNEQseUJBQXlCO0FBQ3JGO0FBQ0EsdURBQXNELGdCQUFnQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxpQ0FBaUM7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEwQyxPQUFPO0FBQ2pELDRCQUEyQixPQUFPO0FBQ2xDLHFEQUFvRCxhQUFhO0FBQ2pFLG9EQUFtRCxZQUFZO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyw4QkFBOEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Im5nT2ZmaWNlVWlGYWJyaWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhbmd1bGFyXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImFuZ3VsYXJcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGZhY3RvcnkocmVxdWlyZShcImFuZ3VsYXJcIikpIDogZmFjdG9yeShyb290W1wiYW5ndWxhclwiXSk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIFxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvblxuICoqLyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjay9ib290c3RyYXAgM2NjYmZmY2U2ZDI4Y2VmOTAxOWNcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29yZScsIFtdKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29yZS9jb3JlLnRzXG4gKiogbW9kdWxlIGlkID0gMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIGV4dGVybmFsIFwiYW5ndWxhclwiXG4gKiogbW9kdWxlIGlkID0gMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIGNob2ljZWZpZWxkTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9jaG9pY2VmaWVsZC9jaG9pY2VmaWVsZERpcmVjdGl2ZScpO1xudmFyIGNvbnRleHR1YWxNZW51TW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9jb250ZXh0dWFsbWVudS9jb250ZXh0dWFsTWVudScpO1xudmFyIGRyb3Bkb3duTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bkRpcmVjdGl2ZScpO1xudmFyIGljb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2ljb24vaWNvbkRpcmVjdGl2ZScpO1xudmFyIGxpbmtNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2xpbmsvbGlua0RpcmVjdGl2ZScpO1xudmFyIG92ZXJsYXlNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheURpcmVjdGl2ZScpO1xudmFyIHByb2dyZXNzSW5kaWNhdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9wcm9ncmVzc2luZGljYXRvci9wcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZScpO1xudmFyIHNlYXJjaGJveE1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvc2VhcmNoYm94L3NlYXJjaGJveERpcmVjdGl2ZScpO1xudmFyIHNwaW5uZXJNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lckRpcmVjdGl2ZScpO1xudmFyIHRhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy90YWJsZS90YWJsZURpcmVjdGl2ZScpO1xudmFyIHRleHRGaWVsZE1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvdGV4dGZpZWxkL3RleHRGaWVsZERpcmVjdGl2ZScpO1xudmFyIHRvZ2dsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZURpcmVjdGl2ZScpO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnLCBbXG4gICAgY2hvaWNlZmllbGRNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgY29udGV4dHVhbE1lbnVNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgZHJvcGRvd25Nb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgaWNvbk1vZHVsZS5tb2R1bGUubmFtZSxcbiAgICBsaW5rTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIG92ZXJsYXlNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3NJbmRpY2F0b3JNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgc2VhcmNoYm94TW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHNwaW5uZXJNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgdGFibGVNb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgdGV4dEZpZWxkTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHRvZ2dsZU1vZHVsZS5tb2R1bGUubmFtZVxuXSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvcmUvY29tcG9uZW50cy50c1xuICoqIG1vZHVsZSBpZCA9IDNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBjaG9pY2VmaWVsZFR5cGVFbnVtXzEgPSByZXF1aXJlKCcuL2Nob2ljZWZpZWxkVHlwZUVudW0nKTtcbnZhciBDaG9pY2VmaWVsZE9wdGlvbkNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlcigkbG9nKSB7XG4gICAgICAgIHRoaXMuJGxvZyA9ICRsb2c7XG4gICAgfVxuICAgIENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlci4kaW5qZWN0ID0gWyckbG9nJ107XG4gICAgcmV0dXJuIENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlcjtcbn0pKCk7XG5leHBvcnRzLkNob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlciA9IENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlcjtcbnZhciBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLUNob2ljZUZpZWxkXCI+JyArXG4gICAgICAgICAgICAnPGlucHV0IGlkPVwie3s6OiRpZH19XCIgY2xhc3M9XCJtcy1DaG9pY2VGaWVsZC1pbnB1dFwiIHR5cGU9XCJ7e3VpZlR5cGV9fVwiIHZhbHVlPVwie3t2YWx1ZX19XCIgJyArXG4gICAgICAgICAgICAnbmctbW9kZWw9XCJuZ01vZGVsXCIgbmctdHJ1ZS12YWx1ZT1cInt7bmdUcnVlVmFsdWV9fVwiIG5nLWZhbHNlLXZhbHVlPVwie3tuZ0ZhbHNlVmFsdWV9fVwiIC8+JyArXG4gICAgICAgICAgICAnPGxhYmVsIGZvcj1cInt7OjokaWR9fVwiIGNsYXNzPVwibXMtQ2hvaWNlRmllbGQtZmllbGRcIj48c3BhbiBjbGFzcz1cIm1zLUxhYmVsXCIgbmctdHJhbnNjbHVkZT48L3NwYW4+PC9sYWJlbD4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSBbJ3VpZkNob2ljZWZpZWxkT3B0aW9uJywgJ14/dWlmQ2hvaWNlZmllbGRHcm91cCddO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgbmdGYWxzZVZhbHVlOiAnQCcsXG4gICAgICAgICAgICBuZ01vZGVsOiAnPScsXG4gICAgICAgICAgICBuZ1RydWVWYWx1ZTogJ0AnLFxuICAgICAgICAgICAgdWlmVHlwZTogJ0AnLFxuICAgICAgICAgICAgdmFsdWU6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBDaG9pY2VmaWVsZE9wdGlvbkNvbnRyb2xsZXI7XG4gICAgfVxuICAgIENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZUVsZW1lbnQsIHRlbXBsYXRlQXR0cmlidXRlcywgdHJhbnNjbHVkZSkge1xuICAgICAgICB2YXIgaW5wdXQgPSB0ZW1wbGF0ZUVsZW1lbnQuZmluZCgnaW5wdXQnKTtcbiAgICAgICAgaWYgKCEoJ25nTW9kZWwnIGluIHRlbXBsYXRlQXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHIoJ25nLW1vZGVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZTogdGhpcy5wcmVMaW5rXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZS5wcm90b3R5cGUucHJlTGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBhdHRycywgY3RybHMsIHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgdmFyIGNob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlciA9IGN0cmxzWzBdO1xuICAgICAgICB2YXIgY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIgPSBjdHJsc1sxXTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCd1aWZUeXBlJywgZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKGNob2ljZWZpZWxkVHlwZUVudW1fMS5DaG9pY2VmaWVsZFR5cGVbbmV3VmFsdWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjaG9pY2VmaWVsZE9wdGlvbkNvbnRyb2xsZXIuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMuY2hvaWNlZmllbGQgLSBcIicgK1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArICdcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgdWlmVHlwZS4gJyArXG4gICAgICAgICAgICAgICAgICAgICdTdXBwb3J0ZWQgb3B0aW9ucyBhcmUgbGlzdGVkIGhlcmU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL25nT2ZmaWNlVUlGYWJyaWMvbmctb2ZmaWNldWlmYWJyaWMvYmxvYi9tYXN0ZXIvc3JjL2NvbXBvbmVudHMvY2hvaWNlZmllbGQvY2hvaWNlZmllbGRUeXBlRW51bS50cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSAoY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIuZ2V0Vmlld1ZhbHVlKCkgPT09IGF0dHJzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQuZmluZCgnaW5wdXQnKS5wcm9wKCdjaGVja2VkJywgY2hlY2tlZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIuYWRkUmVuZGVyKHJlbmRlcik7XG4gICAgICAgICAgICBhdHRycy4kb2JzZXJ2ZSgndmFsdWUnLCByZW5kZXIpO1xuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50XG4gICAgICAgICAgICAgICAgLm9uKCckZGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5yZW1vdmVSZW5kZXIocmVuZGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkaXNhYmxlZCA9ICdkaXNhYmxlZCcgaW4gYXR0cnM7XG4gICAgICAgIHZhciBwYXJlbnRTY29wZSA9IHNjb3BlLiRwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgZGlzYWJsZWQgPSBkaXNhYmxlZCB8fCAocGFyZW50U2NvcGUgIT0gbnVsbCAmJiBwYXJlbnRTY29wZS5kaXNhYmxlZCk7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50LmZpbmQoJ2lucHV0JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZUVsZW1lbnRcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIuc2V0Vmlld1ZhbHVlKGF0dHJzLnZhbHVlLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmUgPSBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZTtcbnZhciBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIoJGVsZW1lbnQsICRzY29wZSkge1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xuICAgICAgICB0aGlzLnJlbmRlckZucyA9IFtdO1xuICAgIH1cbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5uZ01vZGVsICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLiRzY29wZS5uZ01vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm5nTW9kZWwuJHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5wcm90b3R5cGUuYWRkUmVuZGVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMucmVuZGVyRm5zLnB1c2goZm4pO1xuICAgIH07XG4gICAgQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZVJlbmRlciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB0aGlzLnJlbmRlckZucy5zcGxpY2UodGhpcy5yZW5kZXJGbnMuaW5kZXhPZihmbikpO1xuICAgIH07XG4gICAgQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIucHJvdG90eXBlLnNldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLm5nTW9kZWwuJHNldFZpZXdWYWx1ZSh2YWx1ZSwgZXZlbnRUeXBlKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9O1xuICAgIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLnByb3RvdHlwZS5nZXRWaWV3VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy4kc2NvcGUubmdNb2RlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy4kc2NvcGUubmdNb2RlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUubmdNb2RlbC4kdmlld1ZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmVuZGVyRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckZuc1tpXSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci4kaW5qZWN0ID0gWyckZWxlbWVudCcsICckc2NvcGUnXTtcbiAgICByZXR1cm4gQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXI7XG59KSgpO1xuZXhwb3J0cy5DaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlciA9IENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyO1xudmFyIENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLUNob2ljZUZpZWxkR3JvdXBcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtQ2hvaWNlRmllbGRHcm91cC10aXRsZVwiPicgK1xuICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cIm1zLUxhYmVsIGlzLXJlcXVpcmVkXCI+UGljayBvbmU8L2xhYmVsPicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzxuZy10cmFuc2NsdWRlIC8+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gWyd1aWZDaG9pY2VmaWVsZEdyb3VwJywgJz9uZ01vZGVsJ107XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyO1xuICAgIH1cbiAgICBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZUVsZW1lbnQsIHRlbXBsYXRlQXR0cmlidXRlcywgdHJhbnNjbHVkZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlOiB0aGlzLnByZUxpbmtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUucHJvdG90eXBlLnByZUxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgaW5zdGFuY2VBdHRyaWJ1dGVzLCBjdHJscykge1xuICAgICAgICB2YXIgY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIgPSBjdHJsc1swXTtcbiAgICAgICAgdmFyIG1vZGVsQ29udHJvbGxlciA9IGN0cmxzWzFdO1xuICAgICAgICBzY29wZS5uZ01vZGVsID0gbW9kZWxDb250cm9sbGVyO1xuICAgICAgICBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5pbml0KCk7XG4gICAgICAgIHNjb3BlLmRpc2FibGVkID0gJ2Rpc2FibGVkJyBpbiBpbnN0YW5jZUF0dHJpYnV0ZXM7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLkNob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUgPSBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMuY2hvaWNlZmllbGQnLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkNob2ljZWZpZWxkT3B0aW9uJywgQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmUuZmFjdG9yeSgpKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkNob2ljZWZpZWxkR3JvdXAnLCBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvY2hvaWNlZmllbGQvY2hvaWNlZmllbGREaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSA0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG4oZnVuY3Rpb24gKENob2ljZWZpZWxkVHlwZSkge1xuICAgIENob2ljZWZpZWxkVHlwZVtDaG9pY2VmaWVsZFR5cGVbXCJyYWRpb1wiXSA9IDBdID0gXCJyYWRpb1wiO1xuICAgIENob2ljZWZpZWxkVHlwZVtDaG9pY2VmaWVsZFR5cGVbXCJjaGVja2JveFwiXSA9IDFdID0gXCJjaGVja2JveFwiO1xufSkoZXhwb3J0cy5DaG9pY2VmaWVsZFR5cGUgfHwgKGV4cG9ydHMuQ2hvaWNlZmllbGRUeXBlID0ge30pKTtcbnZhciBDaG9pY2VmaWVsZFR5cGUgPSBleHBvcnRzLkNob2ljZWZpZWxkVHlwZTtcbjtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9jaG9pY2VmaWVsZC9jaG9pY2VmaWVsZFR5cGVFbnVtLnRzXG4gKiogbW9kdWxlIGlkID0gNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIE1lbnVJdGVtVHlwZXM7XG4oZnVuY3Rpb24gKE1lbnVJdGVtVHlwZXMpIHtcbiAgICBNZW51SXRlbVR5cGVzW01lbnVJdGVtVHlwZXNbXCJsaW5rXCJdID0gMF0gPSBcImxpbmtcIjtcbiAgICBNZW51SXRlbVR5cGVzW01lbnVJdGVtVHlwZXNbXCJkaXZpZGVyXCJdID0gMV0gPSBcImRpdmlkZXJcIjtcbiAgICBNZW51SXRlbVR5cGVzW01lbnVJdGVtVHlwZXNbXCJoZWFkZXJcIl0gPSAyXSA9IFwiaGVhZGVyXCI7XG4gICAgTWVudUl0ZW1UeXBlc1tNZW51SXRlbVR5cGVzW1wic3ViTWVudVwiXSA9IDNdID0gXCJzdWJNZW51XCI7XG59KShNZW51SXRlbVR5cGVzIHx8IChNZW51SXRlbVR5cGVzID0ge30pKTtcbmV4cG9ydHMuY29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlTmFtZSA9ICd1aWZDb250ZXh0dWFsTWVudUl0ZW0nO1xudmFyIENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSAnXnVpZkNvbnRleHR1YWxNZW51JztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlcjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IGZ1bmN0aW9uICgkZWxlbWVudCwgJGF0dHJzKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9ICRhdHRycy51aWZUeXBlO1xuICAgICAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRlbXBsYXRlVHlwZXNbTWVudUl0ZW1UeXBlcy5saW5rXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdGhpcy50ZW1wbGF0ZVR5cGVzW01lbnVJdGVtVHlwZXNbdHlwZV1dO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgaXNEaXNhYmxlZDogJz11aWZJc0Rpc2FibGVkJyxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6ICc9dWlmSXNTZWxlY3RlZCcsXG4gICAgICAgICAgICBvbkNsaWNrOiAnJnVpZkNsaWNrJyxcbiAgICAgICAgICAgIHRleHQ6ICc9dWlmVGV4dCcsXG4gICAgICAgICAgICB0eXBlOiAnQHVpZlR5cGUnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVUeXBlcyA9IHt9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZXNbTWVudUl0ZW1UeXBlcy5zdWJNZW51XSA9XG4gICAgICAgICAgICBcIjxsaSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtaXRlbVxcXCI+XFxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVxcXCJtcy1Db250ZXh0dWFsTWVudS1saW5rIG1zLUNvbnRleHR1YWxNZW51LWxpbmstLWhhc01lbnVcXFwiIFxcbiAgICAgICAgICAgICAgICBuZy1jbGFzcz1cXFwieydpcy1zZWxlY3RlZCc6IGlzU2VsZWN0ZWQsICdpcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWR9XFxcIiBuZy1jbGljaz1cXFwic2VsZWN0SXRlbSgpXFxcIiBocmVmPnt7dGV4dH19PC9hPlxcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtc3ViTWVudUljb24gbXMtSWNvbiBtcy1JY29uLS1jaGV2cm9uUmlnaHRcXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGVudFxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPC9saT5cIjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGVzW01lbnVJdGVtVHlwZXMubGlua10gPVxuICAgICAgICAgICAgXCI8bGkgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51LWl0ZW1cXFwiPlxcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtbGlua1xcXCIgbmctY2xhc3M9XFxcInsnaXMtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkLCAnaXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkfVxcXCIgXFxuICAgICAgICAgICAgICAgIG5nLWNsaWNrPVxcXCJzZWxlY3RJdGVtKClcXFwiIGhyZWY+e3t0ZXh0fX08L2E+XFxuICAgICAgICAgICAgPC9saT5cIjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGVzW01lbnVJdGVtVHlwZXMuaGVhZGVyXSA9IFwiPGxpIGNsYXNzPVxcXCJtcy1Db250ZXh0dWFsTWVudS1pdGVtIG1zLUNvbnRleHR1YWxNZW51LWl0ZW0tLWhlYWRlclxcXCI+e3t0ZXh0fX08L2xpPlwiO1xuICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZXNbTWVudUl0ZW1UeXBlcy5kaXZpZGVyXSA9IFwiPGxpIGNsYXNzPVxcXCJtcy1Db250ZXh0dWFsTWVudS1pdGVtIG1zLUNvbnRleHR1YWxNZW51LWl0ZW0tLWRpdmlkZXJcXFwiPjwvbGk+XCI7XG4gICAgfVxuICAgIENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgY29udGV4dHVhbE1lbnVDb250cm9sbGVyLCAkdHJhbnNjbHVkZSkge1xuICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICRlbGVtZW50LmZpbmQoJ2RpdicpLnJlcGxhY2VXaXRoKGNsb25lKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS5zZWxlY3RJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIuaXNNdWx0aVNlbGVjdGlvbk1lbnUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5vbkRlc2VsZWN0SXRlbXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZy5pc1VuZGVmaW5lZCgkc2NvcGUuaXNTZWxlY3RlZCkgJiYgISRzY29wZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmlzU2VsZWN0ZWQgPSAhJHNjb3BlLmlzU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29udGV4dHVhbE1lbnVDb250cm9sbGVyLmlzUm9vdE1lbnUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5vbkNsb3NlTWVudXMoJHNjb3BlLiRpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISRzY29wZS5oYXNDaGlsZE1lbnUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dHVhbE1lbnVDb250cm9sbGVyLm9uQ2xvc2VNZW51cyhudWxsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dHVhbE1lbnVDb250cm9sbGVyLm9uRGVzZWxlY3RJdGVtcyh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5vbkNsb3NlTWVudXMoJHNjb3BlLiRpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCRzY29wZS5oYXNDaGlsZE1lbnUpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUuY2hpbGRNZW51Q3RybC5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFuZy5pc1VuZGVmaW5lZCgkc2NvcGUub25DbGljaykpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUub25DbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAkc2NvcGUuJG9uKCd1aWYtbWVudS1kZXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICRzY29wZS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICAkc2NvcGUuJG9uKCd1aWYtbWVudS1jbG9zZScsIGZ1bmN0aW9uIChldmVudCwgbWVudUl0ZW1JZCkge1xuICAgICAgICAgICAgaWYgKCRzY29wZS5oYXNDaGlsZE1lbnUgJiYgJHNjb3BlLiRpZCAhPT0gbWVudUl0ZW1JZCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5jaGlsZE1lbnVDdHJsLmNsb3NlTWVudSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5Db250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmUgPSBDb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmU7XG52YXIgQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlcigkc2NvcGUsICRlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgfVxuICAgIENvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXIucHJvdG90eXBlLnNldENoaWxkTWVudSA9IGZ1bmN0aW9uIChjaGlsZE1lbnVDdHJsKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLmhhc0NoaWxkTWVudSA9IHRydWU7XG4gICAgICAgIHRoaXMuJHNjb3BlLmNoaWxkTWVudUN0cmwgPSBjaGlsZE1lbnVDdHJsO1xuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlci4kaW5qZWN0ID0gWyckc2NvcGUnLCAnJGVsZW1lbnQnXTtcbiAgICByZXR1cm4gQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlcjtcbn0pKCk7XG5leHBvcnRzLkNvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXIgPSBDb250ZXh0dWFsTWVudUl0ZW1Db250cm9sbGVyO1xuZXhwb3J0cy5jb250ZXh0dWFsTWVudURpcmVjdGl2ZU5hbWUgPSAndWlmQ29udGV4dHVhbE1lbnUnO1xudmFyIENvbnRleHR1YWxNZW51RGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250ZXh0dWFsTWVudURpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gZXhwb3J0cy5jb250ZXh0dWFsTWVudURpcmVjdGl2ZU5hbWU7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBcIjx1bCBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnVcXFwiIG5nLXRyYW5zY2x1ZGU+PC91bD5cIjtcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gQ29udGV4dHVhbE1lbnVDb250cm9sbGVyO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgaXNPcGVuOiAnPXVpZklzT3BlbicsXG4gICAgICAgICAgICBtdWx0aXNlbGVjdDogJ0B1aWZNdWx0aXNlbGVjdCdcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb250ZXh0dWFsTWVudURpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCBjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIpIHtcbiAgICAgICAgdmFyIHBhcmVudE1lbnVJdGVtQ3RybCA9ICRlbGVtZW50LmNvbnRyb2xsZXIoZXhwb3J0cy5jb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmVOYW1lKTtcbiAgICAgICAgaWYgKCFuZy5pc1VuZGVmaW5lZChwYXJlbnRNZW51SXRlbUN0cmwpKSB7XG4gICAgICAgICAgICBwYXJlbnRNZW51SXRlbUN0cmwuc2V0Q2hpbGRNZW51KGNvbnRleHR1YWxNZW51Q29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZy5pc1VuZGVmaW5lZCgkc2NvcGUubXVsdGlzZWxlY3QpICYmICRzY29wZS5tdWx0aXNlbGVjdC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICRlbGVtZW50LmFkZENsYXNzKCdtcy1Db250ZXh0dWFsTWVudS0tbXVsdGlzZWxlY3QnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnRleHR1YWxNZW51RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUgPSBDb250ZXh0dWFsTWVudURpcmVjdGl2ZTtcbnZhciBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnRleHR1YWxNZW51Q29udHJvbGxlcigkc2NvcGUsICRhbmltYXRlLCAkZWxlbWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLiRzY29wZSA9ICRzY29wZTtcbiAgICAgICAgdGhpcy4kYW5pbWF0ZSA9ICRhbmltYXRlO1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2xhc3NOYW1lID0gJ2lzLW9wZW4nO1xuICAgICAgICBpZiAobmcuaXNVbmRlZmluZWQoJGVsZW1lbnQuY29udHJvbGxlcihleHBvcnRzLmNvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZU5hbWUpKSkge1xuICAgICAgICAgICAgJHNjb3BlLmlzUm9vdE1lbnUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgICRzY29wZS4kd2F0Y2goJ2lzT3BlbicsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgJGFuaW1hdGVbbmV3VmFsdWUgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJGVsZW1lbnQsIF90aGlzLmlzT3BlbkNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLm9uRGVzZWxlY3RJdGVtcyA9IGZ1bmN0aW9uIChkZXNlbGVjdFBhcmVudE1lbnVzKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoJ3VpZi1tZW51LWRlc2VsZWN0Jyk7XG4gICAgICAgIGlmIChkZXNlbGVjdFBhcmVudE1lbnVzKSB7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdCgndWlmLW1lbnUtZGVzZWxlY3QnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVDb250cm9sbGVyLnByb3RvdHlwZS5vbkNsb3NlTWVudXMgPSBmdW5jdGlvbiAobWVudUl0ZW1Ub1NraXAsIGNsb3NlUm9vdE1lbnUpIHtcbiAgICAgICAgaWYgKGNsb3NlUm9vdE1lbnUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KCd1aWYtbWVudS1jbG9zZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdCgndWlmLW1lbnUtY2xvc2UnLCBtZW51SXRlbVRvU2tpcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRleHR1YWxNZW51Q29udHJvbGxlci5wcm90b3R5cGUub3Blbk1lbnUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLmlzT3BlbiA9IHRydWU7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLmNsb3NlTWVudSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy4kc2NvcGUuaXNPcGVuID0gZmFsc2U7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLmlzUm9vdE1lbnUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5pc1Jvb3RNZW51O1xuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVDb250cm9sbGVyLnByb3RvdHlwZS5pc011bHRpU2VsZWN0aW9uTWVudSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKHRoaXMuJHNjb3BlLm11bHRpc2VsZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5tdWx0aXNlbGVjdC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIuJGluamVjdCA9IFsnJHNjb3BlJywgJyRhbmltYXRlJywgJyRlbGVtZW50J107XG4gICAgcmV0dXJuIENvbnRleHR1YWxNZW51Q29udHJvbGxlcjtcbn0pKCk7XG5leHBvcnRzLkNvbnRleHR1YWxNZW51Q29udHJvbGxlciA9IENvbnRleHR1YWxNZW51Q29udHJvbGxlcjtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmNvbnRleHR1YWxtZW51JywgW1xuICAgICdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ10pXG4gICAgLmRpcmVjdGl2ZShleHBvcnRzLmNvbnRleHR1YWxNZW51RGlyZWN0aXZlTmFtZSwgQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUuZmFjdG9yeSgpKVxuICAgIC5kaXJlY3RpdmUoZXhwb3J0cy5jb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmVOYW1lLCBDb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9jb250ZXh0dWFsbWVudS9jb250ZXh0dWFsTWVudS50c1xuICoqIG1vZHVsZSBpZCA9IDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcGRvd25PcHRpb25EaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGxpIGNsYXNzPVwibXMtRHJvcGRvd24taXRlbVwiIG5nLXRyYW5zY2x1ZGU+PC9saT4nO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSAnXnVpZkRyb3Bkb3duJztcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICB9XG4gICAgRHJvcGRvd25PcHRpb25EaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgRHJvcGRvd25PcHRpb25EaXJlY3RpdmUucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAodGVtcGxhdGVFbGVtZW50LCB0ZW1wbGF0ZUF0dHJpYnV0ZXMsIHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc3Q6IHRoaXMucG9zdExpbmtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIERyb3Bkb3duT3B0aW9uRGlyZWN0aXZlLnByb3RvdHlwZS5wb3N0TGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBhdHRycywgZHJvcGRvd25Db250cm9sbGVyLCB0cmFuc2NsdWRlKSB7XG4gICAgICAgIGlmICghZHJvcGRvd25Db250cm9sbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyAnRHJvcGRvd24gY29udHJvbGxlciBub3QgZm91bmQhJztcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZUVsZW1lbnRcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZHJvcGRvd25Db250cm9sbGVyLnNldFZpZXdWYWx1ZShpbnN0YW5jZUVsZW1lbnQuZmluZCgnc3BhbicpLmh0bWwoKSwgYXR0cnMudmFsdWUsIGV2KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLkRyb3Bkb3duT3B0aW9uRGlyZWN0aXZlID0gRHJvcGRvd25PcHRpb25EaXJlY3RpdmU7XG52YXIgRHJvcGRvd25Db250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wZG93bkNvbnRyb2xsZXIoJGVsZW1lbnQsICRzY29wZSkge1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xuICAgIH1cbiAgICBEcm9wZG93bkNvbnRyb2xsZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy4kZWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi4kc2NvcGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLiRzY29wZS5pc09wZW4gPSAhc2VsZi4kc2NvcGUuaXNPcGVuO1xuICAgICAgICAgICAgICAgIHNlbGYuJHNjb3BlLiRhcHBseSgpO1xuICAgICAgICAgICAgICAgIHZhciBkcm9wZG93bldpZHRoID0gYW5ndWxhci5lbGVtZW50KHRoaXMucXVlcnlTZWxlY3RvcignLm1zLURyb3Bkb3duJykpWzBdLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCh0aGlzLnF1ZXJ5U2VsZWN0b3IoJy5tcy1Ecm9wZG93bi1pdGVtcycpKVswXS5zdHlsZS53aWR0aCA9IGRyb3Bkb3duV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5uZ01vZGVsICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLiRzY29wZS5uZ01vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm5nTW9kZWwuJHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHNlbGYuJGVsZW1lbnQuZmluZCgnbGknKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbi5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc2VsZi4kc2NvcGUubmdNb2RlbC4kdmlld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLiRzY29wZS5zZWxlY3RlZFRpdGxlID0gYW5ndWxhci5lbGVtZW50KG9wdGlvbikuZmluZCgnc3BhbicpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25Db250cm9sbGVyLnByb3RvdHlwZS5zZXRWaWV3VmFsdWUgPSBmdW5jdGlvbiAodGl0bGUsIHZhbHVlLCBldmVudFR5cGUpIHtcbiAgICAgICAgdGhpcy4kc2NvcGUuc2VsZWN0ZWRUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLiRzY29wZS5uZ01vZGVsLiRzZXRWaWV3VmFsdWUodmFsdWUsIGV2ZW50VHlwZSk7XG4gICAgfTtcbiAgICBEcm9wZG93bkNvbnRyb2xsZXIucHJvdG90eXBlLmdldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5uZ01vZGVsICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLiRzY29wZS5uZ01vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5uZ01vZGVsLiR2aWV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duQ29udHJvbGxlci4kaW5qZWN0ID0gWyckZWxlbWVudCcsICckc2NvcGUnXTtcbiAgICByZXR1cm4gRHJvcGRvd25Db250cm9sbGVyO1xufSkoKTtcbmV4cG9ydHMuRHJvcGRvd25Db250cm9sbGVyID0gRHJvcGRvd25Db250cm9sbGVyO1xudmFyIERyb3Bkb3duRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wZG93bkRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IG5nLWNsaWNrPVwiZHJvcGRvd25DbGlja1wiICcgK1xuICAgICAgICAgICAgJ25nLWNsYXNzPVwie1xcJ21zLURyb3Bkb3duXFwnIDogdHJ1ZSwgXFwnaXMtb3BlblxcJzogaXNPcGVuLCBcXCdpcy1kaXNhYmxlZFxcJzogZGlzYWJsZWR9XCIgdGFiaW5kZXg9XCIwXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJtcy1Ecm9wZG93bi1jYXJldERvd24gbXMtSWNvbiBtcy1JY29uLS1jYXJldERvd25cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtcy1Ecm9wZG93bi10aXRsZVwiPnt7c2VsZWN0ZWRUaXRsZX19PC9zcGFuPjx1bCBjbGFzcz1cIm1zLURyb3Bkb3duLWl0ZW1zXCI+PG5nLXRyYW5zY2x1ZGU+PC9uZy10cmFuc2NsdWRlPjwvdWw+PC9kaXY+JztcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gWyd1aWZEcm9wZG93bicsICc/bmdNb2RlbCddO1xuICAgICAgICB0aGlzLnNjb3BlID0ge307XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IERyb3Bkb3duQ29udHJvbGxlcjtcbiAgICB9XG4gICAgRHJvcGRvd25EaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEcm9wZG93bkRpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgRHJvcGRvd25EaXJlY3RpdmUucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAodGVtcGxhdGVFbGVtZW50LCB0ZW1wbGF0ZUF0dHJpYnV0ZXMsIHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZTogdGhpcy5wcmVMaW5rXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBEcm9wZG93bkRpcmVjdGl2ZS5wcm90b3R5cGUucHJlTGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBpbnN0YW5jZUF0dHJpYnV0ZXMsIGN0cmxzKSB7XG4gICAgICAgIHZhciBkcm9wZG93bkNvbnRyb2xsZXIgPSBjdHJsc1swXTtcbiAgICAgICAgdmFyIG1vZGVsQ29udHJvbGxlciA9IGN0cmxzWzFdO1xuICAgICAgICBzY29wZS5uZ01vZGVsID0gbW9kZWxDb250cm9sbGVyO1xuICAgICAgICBkcm9wZG93bkNvbnRyb2xsZXIuaW5pdCgpO1xuICAgICAgICBzY29wZS5kaXNhYmxlZCA9ICdkaXNhYmxlZCcgaW4gaW5zdGFuY2VBdHRyaWJ1dGVzO1xuICAgIH07XG4gICAgcmV0dXJuIERyb3Bkb3duRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuRHJvcGRvd25EaXJlY3RpdmUgPSBEcm9wZG93bkRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmRyb3Bkb3duJywgW1xuICAgICdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ1xuXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZPcHRpb24nLCBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmRHJvcGRvd24nLCBEcm9wZG93bkRpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duRGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIGljb25FbnVtXzEgPSByZXF1aXJlKCcuL2ljb25FbnVtJyk7XG52YXIgSWNvbkNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEljb25Db250cm9sbGVyKCRsb2cpIHtcbiAgICAgICAgdGhpcy4kbG9nID0gJGxvZztcbiAgICB9XG4gICAgSWNvbkNvbnRyb2xsZXIuJGluamVjdCA9IFsnJGxvZyddO1xuICAgIHJldHVybiBJY29uQ29udHJvbGxlcjtcbn0pKCk7XG52YXIgSWNvbkRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSWNvbkRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8aSBjbGFzcz1cIm1zLUljb24gbXMtSWNvbi0te3t1aWZUeXBlfX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JztcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIHVpZlR5cGU6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBJY29uQ29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyQXMgPSAnaWNvbic7XG4gICAgfVxuICAgIEljb25EaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJY29uRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBJY29uRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVyKSB7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgndWlmVHlwZScsIGZ1bmN0aW9uIChuZXdWYWx1bGUsIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaWNvbkVudW1fMS5JY29uRW51bVtuZXdWYWx1bGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRsb2cuZXJyb3IoJ0Vycm9yIFtuZ09mZmljZVVpRmFicmljXSBvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmljb24gLSBVbnN1cHBvcnRlZCBpY29uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBpY29uIChcXCcnICsgc2NvcGUudWlmVHlwZSArICdcXCcpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE9mZmljZSBVSSBGYWJyaWMuICcgK1xuICAgICAgICAgICAgICAgICAgICAnU3VwcG9ydGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBoZXJlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9uZ09mZmljZVVJRmFicmljL25nLW9mZmljZXVpZmFicmljL2Jsb2IvbWFzdGVyL3NyYy9jb21wb25lbnRzL2ljb24vaWNvbkVudW0udHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICA7XG4gICAgcmV0dXJuIEljb25EaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5JY29uRGlyZWN0aXZlID0gSWNvbkRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmljb24nLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkljb24nLCBJY29uRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvaWNvbi9pY29uRGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xuKGZ1bmN0aW9uIChJY29uRW51bSkge1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYWxlcnRcIl0gPSAwXSA9IFwiYWxlcnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFsZXJ0MlwiXSA9IDFdID0gXCJhbGVydDJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFsZXJ0T3V0bGluZVwiXSA9IDJdID0gXCJhbGVydE91dGxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93RG93blwiXSA9IDNdID0gXCJhcnJvd0Rvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93RG93bjJcIl0gPSA0XSA9IFwiYXJyb3dEb3duMlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dEb3duTGVmdFwiXSA9IDVdID0gXCJhcnJvd0Rvd25MZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd0Rvd25SaWdodFwiXSA9IDZdID0gXCJhcnJvd0Rvd25SaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dMZWZ0XCJdID0gN10gPSBcImFycm93TGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dSaWdodFwiXSA9IDhdID0gXCJhcnJvd1JpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd1VwXCJdID0gOV0gPSBcImFycm93VXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93VXAyXCJdID0gMTBdID0gXCJhcnJvd1VwMlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dVcExlZnRcIl0gPSAxMV0gPSBcImFycm93VXBMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd1VwUmlnaHRcIl0gPSAxMl0gPSBcImFycm93VXBSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXNjZW5kaW5nXCJdID0gMTNdID0gXCJhc2NlbmRpbmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImF0XCJdID0gMTRdID0gXCJhdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXR0YWNobWVudFwiXSA9IDE1XSA9IFwiYXR0YWNobWVudFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYmFnXCJdID0gMTZdID0gXCJiYWdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJhbGxvb25cIl0gPSAxN10gPSBcImJhbGxvb25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJlbGxcIl0gPSAxOF0gPSBcImJlbGxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJvYXJkc1wiXSA9IDE5XSA9IFwiYm9hcmRzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJib2xkXCJdID0gMjBdID0gXCJib2xkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJib29rbWFya1wiXSA9IDIxXSA9IFwiYm9va21hcmtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJvb2tzXCJdID0gMjJdID0gXCJib29rc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYnJpZWZjYXNlXCJdID0gMjNdID0gXCJicmllZmNhc2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJ1bmRsZVwiXSA9IDI0XSA9IFwiYnVuZGxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYWtlXCJdID0gMjVdID0gXCJjYWtlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYWxlbmRhclwiXSA9IDI2XSA9IFwiY2FsZW5kYXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhbGVuZGFyRGF5XCJdID0gMjddID0gXCJjYWxlbmRhckRheVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FsZW5kYXJQdWJsaWNcIl0gPSAyOF0gPSBcImNhbGVuZGFyUHVibGljXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYWxlbmRhcldlZWtcIl0gPSAyOV0gPSBcImNhbGVuZGFyV2Vla1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FsZW5kYXJXb3JrV2Vla1wiXSA9IDMwXSA9IFwiY2FsZW5kYXJXb3JrV2Vla1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FtZXJhXCJdID0gMzFdID0gXCJjYW1lcmFcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhclwiXSA9IDMyXSA9IFwiY2FyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJldERvd25cIl0gPSAzM10gPSBcImNhcmV0RG93blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXREb3duTGVmdFwiXSA9IDM0XSA9IFwiY2FyZXREb3duTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXREb3duT3V0bGluZVwiXSA9IDM1XSA9IFwiY2FyZXREb3duT3V0bGluZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXREb3duUmlnaHRcIl0gPSAzNl0gPSBcImNhcmV0RG93blJpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJldExlZnRcIl0gPSAzN10gPSBcImNhcmV0TGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRMZWZ0T3V0bGluZVwiXSA9IDM4XSA9IFwiY2FyZXRMZWZ0T3V0bGluZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRSaWdodFwiXSA9IDM5XSA9IFwiY2FyZXRSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRSaWdodE91dGxpbmVcIl0gPSA0MF0gPSBcImNhcmV0UmlnaHRPdXRsaW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJldFVwXCJdID0gNDFdID0gXCJjYXJldFVwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJldFVwTGVmdFwiXSA9IDQyXSA9IFwiY2FyZXRVcExlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0VXBPdXRsaW5lXCJdID0gNDNdID0gXCJjYXJldFVwT3V0bGluZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRVcFJpZ2h0XCJdID0gNDRdID0gXCJjYXJldFVwUmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcnRcIl0gPSA0NV0gPSBcImNhcnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhdFwiXSA9IDQ2XSA9IFwiY2F0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGFydFwiXSA9IDQ3XSA9IFwiY2hhcnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoYXRcIl0gPSA0OF0gPSBcImNoYXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoYXRBZGRcIl0gPSA0OV0gPSBcImNoYXRBZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZWNrXCJdID0gNTBdID0gXCJjaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hlY2tib3hcIl0gPSA1MV0gPSBcImNoZWNrYm94XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGVja2JveENoZWNrXCJdID0gNTJdID0gXCJjaGVja2JveENoZWNrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGVja2JveEVtcHR5XCJdID0gNTNdID0gXCJjaGVja2JveEVtcHR5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGVja2JveE1peGVkXCJdID0gNTRdID0gXCJjaGVja2JveE1peGVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGVja1Blb3BsZVwiXSA9IDU1XSA9IFwiY2hlY2tQZW9wbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25Eb3duXCJdID0gNTZdID0gXCJjaGV2cm9uRG93blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvbkxlZnRcIl0gPSA1N10gPSBcImNoZXZyb25MZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uUmlnaHRcIl0gPSA1OF0gPSBcImNoZXZyb25SaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvbnNEb3duXCJdID0gNTldID0gXCJjaGV2cm9uc0Rvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25zTGVmdFwiXSA9IDYwXSA9IFwiY2hldnJvbnNMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uc1JpZ2h0XCJdID0gNjFdID0gXCJjaGV2cm9uc1JpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uc1VwXCJdID0gNjJdID0gXCJjaGV2cm9uc1VwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpY2tEb3duXCJdID0gNjNdID0gXCJjaGV2cm9uVGhpY2tEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpY2tMZWZ0XCJdID0gNjRdID0gXCJjaGV2cm9uVGhpY2tMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpY2tSaWdodFwiXSA9IDY1XSA9IFwiY2hldnJvblRoaWNrUmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25UaGlja1VwXCJdID0gNjZdID0gXCJjaGV2cm9uVGhpY2tVcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaW5Eb3duXCJdID0gNjddID0gXCJjaGV2cm9uVGhpbkRvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25UaGluTGVmdFwiXSA9IDY4XSA9IFwiY2hldnJvblRoaW5MZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpblJpZ2h0XCJdID0gNjldID0gXCJjaGV2cm9uVGhpblJpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpblVwXCJdID0gNzBdID0gXCJjaGV2cm9uVGhpblVwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVXBcIl0gPSA3MV0gPSBcImNoZXZyb25VcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlXCJdID0gNzJdID0gXCJjaXJjbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUJhbGxcIl0gPSA3M10gPSBcImNpcmNsZUJhbGxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUJhbGxvb25zXCJdID0gNzRdID0gXCJjaXJjbGVCYWxsb29uc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlQ2FyXCJdID0gNzVdID0gXCJjaXJjbGVDYXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUNhdFwiXSA9IDc2XSA9IFwiY2lyY2xlQ2F0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVDb2ZmZWVcIl0gPSA3N10gPSBcImNpcmNsZUNvZmZlZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlRG9nXCJdID0gNzhdID0gXCJjaXJjbGVEb2dcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUVtcHR5XCJdID0gNzldID0gXCJjaXJjbGVFbXB0eVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlRmlsbFwiXSA9IDgwXSA9IFwiY2lyY2xlRmlsbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlRmlsbGVkXCJdID0gODFdID0gXCJjaXJjbGVGaWxsZWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUhhbGZGaWxsZWRcIl0gPSA4Ml0gPSBcImNpcmNsZUhhbGZGaWxsZWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUluZm9cIl0gPSA4M10gPSBcImNpcmNsZUluZm9cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUxpZ2h0bmluZ1wiXSA9IDg0XSA9IFwiY2lyY2xlTGlnaHRuaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVQaWxsXCJdID0gODVdID0gXCJjaXJjbGVQaWxsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVQbGFuZVwiXSA9IDg2XSA9IFwiY2lyY2xlUGxhbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZVBsdXNcIl0gPSA4N10gPSBcImNpcmNsZVBsdXNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZVBvb2RsZVwiXSA9IDg4XSA9IFwiY2lyY2xlUG9vZGxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVVbmZpbGxlZFwiXSA9IDg5XSA9IFwiY2lyY2xlVW5maWxsZWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNsYXNzTm90ZWJvb2tcIl0gPSA5MF0gPSBcImNsYXNzTm90ZWJvb2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNsYXNzcm9vbVwiXSA9IDkxXSA9IFwiY2xhc3Nyb29tXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjbG9ja1wiXSA9IDkyXSA9IFwiY2xvY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNsdXR0ZXJcIl0gPSA5M10gPSBcImNsdXR0ZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNvZmZlZVwiXSA9IDk0XSA9IFwiY29mZmVlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjb2xsYXBzZVwiXSA9IDk1XSA9IFwiY29sbGFwc2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNvbmZsaWN0XCJdID0gOTZdID0gXCJjb25mbGljdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY29udGFjdFwiXSA9IDk3XSA9IFwiY29udGFjdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY29udGFjdEZvcm1cIl0gPSA5OF0gPSBcImNvbnRhY3RGb3JtXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjb250YWN0UHVibGljXCJdID0gOTldID0gXCJjb250YWN0UHVibGljXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjb3B5XCJdID0gMTAwXSA9IFwiY29weVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY3JlZGl0Q2FyZFwiXSA9IDEwMV0gPSBcImNyZWRpdENhcmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNyZWRpdENhcmRPdXRsaW5lXCJdID0gMTAyXSA9IFwiY3JlZGl0Q2FyZE91dGxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRhc2hib2FyZFwiXSA9IDEwM10gPSBcImRhc2hib2FyZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZGVzY2VuZGluZ1wiXSA9IDEwNF0gPSBcImRlc2NlbmRpbmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRlc2t0b3BcIl0gPSAxMDVdID0gXCJkZXNrdG9wXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkZXZpY2VXaXBlXCJdID0gMTA2XSA9IFwiZGV2aWNlV2lwZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZGlhbHBhZFwiXSA9IDEwN10gPSBcImRpYWxwYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRpcmVjdGlvbnNcIl0gPSAxMDhdID0gXCJkaXJlY3Rpb25zXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudFwiXSA9IDEwOV0gPSBcImRvY3VtZW50XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudEFkZFwiXSA9IDExMF0gPSBcImRvY3VtZW50QWRkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudEZvcndhcmRcIl0gPSAxMTFdID0gXCJkb2N1bWVudEZvcndhcmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvY3VtZW50TGFuZHNjYXBlXCJdID0gMTEyXSA9IFwiZG9jdW1lbnRMYW5kc2NhcGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvY3VtZW50UERGXCJdID0gMTEzXSA9IFwiZG9jdW1lbnRQREZcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvY3VtZW50UmVwbHlcIl0gPSAxMTRdID0gXCJkb2N1bWVudFJlcGx5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudHNcIl0gPSAxMTVdID0gXCJkb2N1bWVudHNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvY3VtZW50U2VhcmNoXCJdID0gMTE2XSA9IFwiZG9jdW1lbnRTZWFyY2hcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvZ1wiXSA9IDExN10gPSBcImRvZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG9nQWx0XCJdID0gMTE4XSA9IFwiZG9nQWx0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb3RcIl0gPSAxMTldID0gXCJkb3RcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvd25sb2FkXCJdID0gMTIwXSA9IFwiZG93bmxvYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRybVwiXSA9IDEyMV0gPSBcImRybVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZHJvcFwiXSA9IDEyMl0gPSBcImRyb3BcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRyb3Bkb3duXCJdID0gMTIzXSA9IFwiZHJvcGRvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImVkaXRCb3hcIl0gPSAxMjRdID0gXCJlZGl0Qm94XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJlbGxpcHNpc1wiXSA9IDEyNV0gPSBcImVsbGlwc2lzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJlbWJlZFwiXSA9IDEyNl0gPSBcImVtYmVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJldmVudFwiXSA9IDEyN10gPSBcImV2ZW50XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJldmVudENhbmNlbFwiXSA9IDEyOF0gPSBcImV2ZW50Q2FuY2VsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJldmVudEluZm9cIl0gPSAxMjldID0gXCJldmVudEluZm9cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImV2ZW50UmVjdXJyaW5nXCJdID0gMTMwXSA9IFwiZXZlbnRSZWN1cnJpbmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImV2ZW50U2hhcmVcIl0gPSAxMzFdID0gXCJldmVudFNoYXJlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJleGNsYW1hdGlvblwiXSA9IDEzMl0gPSBcImV4Y2xhbWF0aW9uXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJleHBhbmRcIl0gPSAxMzNdID0gXCJleHBhbmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImV5ZVwiXSA9IDEzNF0gPSBcImV5ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmF2b3JpdGVzXCJdID0gMTM1XSA9IFwiZmF2b3JpdGVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmYXhcIl0gPSAxMzZdID0gXCJmYXhcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpZWxkTWFpbFwiXSA9IDEzN10gPSBcImZpZWxkTWFpbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmllbGROdW1iZXJcIl0gPSAxMzhdID0gXCJmaWVsZE51bWJlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmllbGRUZXh0XCJdID0gMTM5XSA9IFwiZmllbGRUZXh0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaWVsZFRleHRCb3hcIl0gPSAxNDBdID0gXCJmaWVsZFRleHRCb3hcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpbGVEb2N1bWVudFwiXSA9IDE0MV0gPSBcImZpbGVEb2N1bWVudFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmlsZUltYWdlXCJdID0gMTQyXSA9IFwiZmlsZUltYWdlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaWxlUERGXCJdID0gMTQzXSA9IFwiZmlsZVBERlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmlsdGVyXCJdID0gMTQ0XSA9IFwiZmlsdGVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaWx0ZXJDbGVhclwiXSA9IDE0NV0gPSBcImZpbHRlckNsZWFyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaXJzdEFpZFwiXSA9IDE0Nl0gPSBcImZpcnN0QWlkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmbGFnXCJdID0gMTQ3XSA9IFwiZmxhZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9sZGVyXCJdID0gMTQ4XSA9IFwiZm9sZGVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmb2xkZXJNb3ZlXCJdID0gMTQ5XSA9IFwiZm9sZGVyTW92ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9sZGVyUHVibGljXCJdID0gMTUwXSA9IFwiZm9sZGVyUHVibGljXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmb2xkZXJTZWFyY2hcIl0gPSAxNTFdID0gXCJmb2xkZXJTZWFyY2hcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZvbnRDb2xvclwiXSA9IDE1Ml0gPSBcImZvbnRDb2xvclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9udERlY3JlYXNlXCJdID0gMTUzXSA9IFwiZm9udERlY3JlYXNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmb250SW5jcmVhc2VcIl0gPSAxNTRdID0gXCJmb250SW5jcmVhc2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZyb3dueVwiXSA9IDE1NV0gPSBcImZyb3dueVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZnVsbHNjcmVlblwiXSA9IDE1Nl0gPSBcImZ1bGxzY3JlZW5cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImdlYXJcIl0gPSAxNTddID0gXCJnZWFyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJnbGFzc2VzXCJdID0gMTU4XSA9IFwiZ2xhc3Nlc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZ2xvYmVcIl0gPSAxNTldID0gXCJnbG9iZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZ3JhcGhcIl0gPSAxNjBdID0gXCJncmFwaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZ3JvdXBcIl0gPSAxNjFdID0gXCJncm91cFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaGVhZGVyXCJdID0gMTYyXSA9IFwiaGVhZGVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJoZWFydFwiXSA9IDE2M10gPSBcImhlYXJ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJoZWFydEVtcHR5XCJdID0gMTY0XSA9IFwiaGVhcnRFbXB0eVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaGlkZVwiXSA9IDE2NV0gPSBcImhpZGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImhvbWVcIl0gPSAxNjZdID0gXCJob21lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJpbmJveENoZWNrXCJdID0gMTY3XSA9IFwiaW5ib3hDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaW5mb1wiXSA9IDE2OF0gPSBcImluZm9cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImluZm9DaXJjbGVcIl0gPSAxNjldID0gXCJpbmZvQ2lyY2xlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJpdGFsaWNcIl0gPSAxNzBdID0gXCJpdGFsaWNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImtleVwiXSA9IDE3MV0gPSBcImtleVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGF0ZVwiXSA9IDE3Ml0gPSBcImxhdGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpZmVzYXZlclwiXSA9IDE3M10gPSBcImxpZmVzYXZlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlmZXNhdmVyTG9ja1wiXSA9IDE3NF0gPSBcImxpZmVzYXZlckxvY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpZ2h0QnVsYlwiXSA9IDE3NV0gPSBcImxpZ2h0QnVsYlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlnaHRuaW5nXCJdID0gMTc2XSA9IFwibGlnaHRuaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaW5rXCJdID0gMTc3XSA9IFwibGlua1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlua1JlbW92ZVwiXSA9IDE3OF0gPSBcImxpbmtSZW1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpc3RCdWxsZXRzXCJdID0gMTc5XSA9IFwibGlzdEJ1bGxldHNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpc3RDaGVja1wiXSA9IDE4MF0gPSBcImxpc3RDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlzdENoZWNrYm94XCJdID0gMTgxXSA9IFwibGlzdENoZWNrYm94XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaXN0R3JvdXBcIl0gPSAxODJdID0gXCJsaXN0R3JvdXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpc3RHcm91cDJcIl0gPSAxODNdID0gXCJsaXN0R3JvdXAyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaXN0TnVtYmVyZWRcIl0gPSAxODRdID0gXCJsaXN0TnVtYmVyZWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxvY2tcIl0gPSAxODVdID0gXCJsb2NrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsXCJdID0gMTg2XSA9IFwibWFpbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbENoZWNrXCJdID0gMTg3XSA9IFwibWFpbENoZWNrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsRG93blwiXSA9IDE4OF0gPSBcIm1haWxEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsRWRpdFwiXSA9IDE4OV0gPSBcIm1haWxFZGl0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsRW1wdHlcIl0gPSAxOTBdID0gXCJtYWlsRW1wdHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxFcnJvclwiXSA9IDE5MV0gPSBcIm1haWxFcnJvclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbE9wZW5cIl0gPSAxOTJdID0gXCJtYWlsT3BlblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFBhdXNlXCJdID0gMTkzXSA9IFwibWFpbFBhdXNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsUHVibGljXCJdID0gMTk0XSA9IFwibWFpbFB1YmxpY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFJlYWRcIl0gPSAxOTVdID0gXCJtYWlsUmVhZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFNlbmRcIl0gPSAxOTZdID0gXCJtYWlsU2VuZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFN5bmNcIl0gPSAxOTddID0gXCJtYWlsU3luY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFVucmVhZFwiXSA9IDE5OF0gPSBcIm1haWxVbnJlYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1hcE1hcmtlclwiXSA9IDE5OV0gPSBcIm1hcE1hcmtlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWVhbFwiXSA9IDIwMF0gPSBcIm1lYWxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1lbnVcIl0gPSAyMDFdID0gXCJtZW51XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtZW51MlwiXSA9IDIwMl0gPSBcIm1lbnUyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtZXJnZVwiXSA9IDIwM10gPSBcIm1lcmdlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtZXRhZGF0YVwiXSA9IDIwNF0gPSBcIm1ldGFkYXRhXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtaWNyb3Bob25lXCJdID0gMjA1XSA9IFwibWljcm9waG9uZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWluaWF0dXJlc1wiXSA9IDIwNl0gPSBcIm1pbmlhdHVyZXNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1pbnVzXCJdID0gMjA3XSA9IFwibWludXNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1vYmlsZVwiXSA9IDIwOF0gPSBcIm1vYmlsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibW9uZXlcIl0gPSAyMDldID0gXCJtb25leVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibW92ZVwiXSA9IDIxMF0gPSBcIm1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm11bHRpQ2hvaWNlXCJdID0gMjExXSA9IFwibXVsdGlDaG9pY2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm11c2ljXCJdID0gMjEyXSA9IFwibXVzaWNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5hdmlnYXRlXCJdID0gMjEzXSA9IFwibmF2aWdhdGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5ld1wiXSA9IDIxNF0gPSBcIm5ld1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibmV3c2ZlZWRcIl0gPSAyMTVdID0gXCJuZXdzZmVlZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibm90ZVwiXSA9IDIxNl0gPSBcIm5vdGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdGVib29rXCJdID0gMjE3XSA9IFwibm90ZWJvb2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdGVFZGl0XCJdID0gMjE4XSA9IFwibm90ZUVkaXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdGVGb3J3YXJkXCJdID0gMjE5XSA9IFwibm90ZUZvcndhcmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdGVSZXBseVwiXSA9IDIyMF0gPSBcIm5vdGVSZXBseVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibm90UmVjdXJyaW5nXCJdID0gMjIxXSA9IFwibm90UmVjdXJyaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJvbmVkcml2ZVwiXSA9IDIyMl0gPSBcIm9uZWRyaXZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJvbmxpbmVBZGRcIl0gPSAyMjNdID0gXCJvbmxpbmVBZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm9ubGluZUpvaW5cIl0gPSAyMjRdID0gXCJvbmxpbmVKb2luXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJvb2ZSZXBseVwiXSA9IDIyNV0gPSBcIm9vZlJlcGx5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJvcmdcIl0gPSAyMjZdID0gXCJvcmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBhZ2VcIl0gPSAyMjddID0gXCJwYWdlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwYWludFwiXSA9IDIyOF0gPSBcInBhaW50XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwYW5lbFwiXSA9IDIyOV0gPSBcInBhbmVsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwYXJ0bmVyXCJdID0gMjMwXSA9IFwicGFydG5lclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGF1c2VcIl0gPSAyMzFdID0gXCJwYXVzZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVuY2lsXCJdID0gMjMyXSA9IFwicGVuY2lsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZW9wbGVcIl0gPSAyMzNdID0gXCJwZW9wbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlb3BsZUFkZFwiXSA9IDIzNF0gPSBcInBlb3BsZUFkZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlQ2hlY2tcIl0gPSAyMzVdID0gXCJwZW9wbGVDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlRXJyb3JcIl0gPSAyMzZdID0gXCJwZW9wbGVFcnJvclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlUGF1c2VcIl0gPSAyMzddID0gXCJwZW9wbGVQYXVzZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlUmVtb3ZlXCJdID0gMjM4XSA9IFwicGVvcGxlUmVtb3ZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZW9wbGVTZWN1cml0eVwiXSA9IDIzOV0gPSBcInBlb3BsZVNlY3VyaXR5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZW9wbGVTeW5jXCJdID0gMjQwXSA9IFwicGVvcGxlU3luY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVyc29uXCJdID0gMjQxXSA9IFwicGVyc29uXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZXJzb25BZGRcIl0gPSAyNDJdID0gXCJwZXJzb25BZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlcnNvblJlbW92ZVwiXSA9IDI0M10gPSBcInBlcnNvblJlbW92ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGhvbmVcIl0gPSAyNDRdID0gXCJwaG9uZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGhvbmVBZGRcIl0gPSAyNDVdID0gXCJwaG9uZUFkZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGhvbmVUcmFuc2ZlclwiXSA9IDI0Nl0gPSBcInBob25lVHJhbnNmZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBpY3R1cmVcIl0gPSAyNDddID0gXCJwaWN0dXJlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwaWN0dXJlQWRkXCJdID0gMjQ4XSA9IFwicGljdHVyZUFkZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGljdHVyZUVkaXRcIl0gPSAyNDldID0gXCJwaWN0dXJlRWRpdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGljdHVyZVJlbW92ZVwiXSA9IDI1MF0gPSBcInBpY3R1cmVSZW1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBpbGxcIl0gPSAyNTFdID0gXCJwaWxsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwaW5Eb3duXCJdID0gMjUyXSA9IFwicGluRG93blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGluTGVmdFwiXSA9IDI1M10gPSBcInBpbkxlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBsYWNlaG9sZGVyXCJdID0gMjU0XSA9IFwicGxhY2Vob2xkZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBsYW5lXCJdID0gMjU1XSA9IFwicGxhbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBsYXlcIl0gPSAyNTZdID0gXCJwbGF5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwbHVzXCJdID0gMjU3XSA9IFwicGx1c1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGx1czJcIl0gPSAyNThdID0gXCJwbHVzMlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicG9pbnRJdGVtXCJdID0gMjU5XSA9IFwicG9pbnRJdGVtXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwb3BvdXRcIl0gPSAyNjBdID0gXCJwb3BvdXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBvc3RcIl0gPSAyNjFdID0gXCJwb3N0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwcmludFwiXSA9IDI2Ml0gPSBcInByaW50XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwcm90ZWN0aW9uQ2VudGVyXCJdID0gMjYzXSA9IFwicHJvdGVjdGlvbkNlbnRlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicXVlc3Rpb25cIl0gPSAyNjRdID0gXCJxdWVzdGlvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicXVlc3Rpb25SZXZlcnNlXCJdID0gMjY1XSA9IFwicXVlc3Rpb25SZXZlcnNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJxdW90ZVwiXSA9IDI2Nl0gPSBcInF1b3RlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyYWRpb0J1dHRvblwiXSA9IDI2N10gPSBcInJhZGlvQnV0dG9uXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZWFjdGl2YXRlXCJdID0gMjY4XSA9IFwicmVhY3RpdmF0ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmVjZWlwdENoZWNrXCJdID0gMjY5XSA9IFwicmVjZWlwdENoZWNrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZWNlaXB0Rm9yd2FyZFwiXSA9IDI3MF0gPSBcInJlY2VpcHRGb3J3YXJkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZWNlaXB0UmVwbHlcIl0gPSAyNzFdID0gXCJyZWNlaXB0UmVwbHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlZnJlc2hcIl0gPSAyNzJdID0gXCJyZWZyZXNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZWxvYWRcIl0gPSAyNzNdID0gXCJyZWxvYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlcGx5XCJdID0gMjc0XSA9IFwicmVwbHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlcGx5QWxsXCJdID0gMjc1XSA9IFwicmVwbHlBbGxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlcGx5QWxsQWx0XCJdID0gMjc2XSA9IFwicmVwbHlBbGxBbHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlcGx5QWx0XCJdID0gMjc3XSA9IFwicmVwbHlBbHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJpYmJvblwiXSA9IDI3OF0gPSBcInJpYmJvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicm9vbVwiXSA9IDI3OV0gPSBcInJvb21cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNhdmVcIl0gPSAyODBdID0gXCJzYXZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzY2hlZHVsaW5nXCJdID0gMjgxXSA9IFwic2NoZWR1bGluZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2VhcmNoXCJdID0gMjgyXSA9IFwic2VhcmNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzZWN0aW9uXCJdID0gMjgzXSA9IFwic2VjdGlvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2VjdGlvbnNcIl0gPSAyODRdID0gXCJzZWN0aW9uc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2V0dGluZ3NcIl0gPSAyODVdID0gXCJzZXR0aW5nc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2hhcmVcIl0gPSAyODZdID0gXCJzaGFyZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2hpZWxkXCJdID0gMjg3XSA9IFwic2hpZWxkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzaXRlc1wiXSA9IDI4OF0gPSBcInNpdGVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzbWlsZXlcIl0gPSAyODldID0gXCJzbWlsZXlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNvY2NlclwiXSA9IDI5MF0gPSBcInNvY2NlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic29jaWFsTGlzdGVuaW5nXCJdID0gMjkxXSA9IFwic29jaWFsTGlzdGVuaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzb3J0XCJdID0gMjkyXSA9IFwic29ydFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic29ydExpbmVzXCJdID0gMjkzXSA9IFwic29ydExpbmVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzcGxpdFwiXSA9IDI5NF0gPSBcInNwbGl0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdGFyXCJdID0gMjk1XSA9IFwic3RhclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3RhckVtcHR5XCJdID0gMjk2XSA9IFwic3RhckVtcHR5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdG9wd2F0Y2hcIl0gPSAyOTddID0gXCJzdG9wd2F0Y2hcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN0b3J5XCJdID0gMjk4XSA9IFwic3RvcnlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN0eWxlUmVtb3ZlXCJdID0gMjk5XSA9IFwic3R5bGVSZW1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN1YnNjcmliZVwiXSA9IDMwMF0gPSBcInN1YnNjcmliZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3VuXCJdID0gMzAxXSA9IFwic3VuXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdW5BZGRcIl0gPSAzMDJdID0gXCJzdW5BZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN1blF1ZXN0aW9uXCJdID0gMzAzXSA9IFwic3VuUXVlc3Rpb25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN1cHBvcnRcIl0gPSAzMDRdID0gXCJzdXBwb3J0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0YWJsZVwiXSA9IDMwNV0gPSBcInRhYmxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0YWJsZXRcIl0gPSAzMDZdID0gXCJ0YWJsZXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRhZ1wiXSA9IDMwN10gPSBcInRhZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widGFza1JlY3VycmluZ1wiXSA9IDMwOF0gPSBcInRhc2tSZWN1cnJpbmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRhc2tzXCJdID0gMzA5XSA9IFwidGFza3NcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRlYW13b3JrXCJdID0gMzEwXSA9IFwidGVhbXdvcmtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRleHRcIl0gPSAzMTFdID0gXCJ0ZXh0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0ZXh0Qm94XCJdID0gMzEyXSA9IFwidGV4dEJveFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widGlsZVwiXSA9IDMxM10gPSBcInRpbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRpbWVsaW5lXCJdID0gMzE0XSA9IFwidGltZWxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRvZGF5XCJdID0gMzE1XSA9IFwidG9kYXlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRvZ2dsZVwiXSA9IDMxNl0gPSBcInRvZ2dsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widG9nZ2xlTWlkZGxlXCJdID0gMzE3XSA9IFwidG9nZ2xlTWlkZGxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0b3VjaFwiXSA9IDMxOF0gPSBcInRvdWNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmFzaFwiXSA9IDMxOV0gPSBcInRyYXNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZURvd25cIl0gPSAzMjBdID0gXCJ0cmlhbmdsZURvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyaWFuZ2xlRW1wdHlEb3duXCJdID0gMzIxXSA9IFwidHJpYW5nbGVFbXB0eURvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyaWFuZ2xlRW1wdHlMZWZ0XCJdID0gMzIyXSA9IFwidHJpYW5nbGVFbXB0eUxlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyaWFuZ2xlRW1wdHlSaWdodFwiXSA9IDMyM10gPSBcInRyaWFuZ2xlRW1wdHlSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJpYW5nbGVFbXB0eVVwXCJdID0gMzI0XSA9IFwidHJpYW5nbGVFbXB0eVVwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZUxlZnRcIl0gPSAzMjVdID0gXCJ0cmlhbmdsZUxlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyaWFuZ2xlUmlnaHRcIl0gPSAzMjZdID0gXCJ0cmlhbmdsZVJpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZVVwXCJdID0gMzI3XSA9IFwidHJpYW5nbGVVcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJvcGh5XCJdID0gMzI4XSA9IFwidHJvcGh5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ1bmRlcmxpbmVcIl0gPSAzMjldID0gXCJ1bmRlcmxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInVuc3Vic2NyaWJlXCJdID0gMzMwXSA9IFwidW5zdWJzY3JpYmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInVwbG9hZFwiXSA9IDMzMV0gPSBcInVwbG9hZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widmlkZW9cIl0gPSAzMzJdID0gXCJ2aWRlb1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widm9pY2VtYWlsXCJdID0gMzMzXSA9IFwidm9pY2VtYWlsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ2b2ljZW1haWxGb3J3YXJkXCJdID0gMzM0XSA9IFwidm9pY2VtYWlsRm9yd2FyZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widm9pY2VtYWlsUmVwbHlcIl0gPSAzMzVdID0gXCJ2b2ljZW1haWxSZXBseVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wid2FmZmxlXCJdID0gMzM2XSA9IFwid2FmZmxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ3b3JrXCJdID0gMzM3XSA9IFwid29ya1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wid3JlbmNoXCJdID0gMzM4XSA9IFwid3JlbmNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ4XCJdID0gMzM5XSA9IFwieFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wieENpcmNsZVwiXSA9IDM0MF0gPSBcInhDaXJjbGVcIjtcbn0pKGV4cG9ydHMuSWNvbkVudW0gfHwgKGV4cG9ydHMuSWNvbkVudW0gPSB7fSkpO1xudmFyIEljb25FbnVtID0gZXhwb3J0cy5JY29uRW51bTtcbjtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9pY29uL2ljb25FbnVtLnRzXG4gKiogbW9kdWxlIGlkID0gOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIExpbmtEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExpbmtEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGEgbmctaHJlZj1cInt7IG5nSHJlZiB9fVwiIGNsYXNzPVwibXMtTGlua1wiIG5nLXRyYW5zY2x1ZGU+PC9hPic7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBuZ0hyZWY6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgIH1cbiAgICBMaW5rRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTGlua0RpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIExpbmtEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5MaW5rRGlyZWN0aXZlID0gTGlua0RpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmxpbmsnLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkxpbmsnLCBMaW5rRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvbGluay9saW5rRGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gMTBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBvdmVybGF5TW9kZUVudW1fdHNfMSA9IHJlcXVpcmUoJy4vb3ZlcmxheU1vZGVFbnVtLnRzJyk7XG52YXIgT3ZlcmxheUNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE92ZXJsYXlDb250cm9sbGVyKGxvZykge1xuICAgICAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB9XG4gICAgT3ZlcmxheUNvbnRyb2xsZXIuJGluamVjdCA9IFsnJGxvZyddO1xuICAgIHJldHVybiBPdmVybGF5Q29udHJvbGxlcjtcbn0pKCk7XG52YXIgT3ZlcmxheURpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3ZlcmxheURpcmVjdGl2ZShsb2cpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLU92ZXJsYXlcIiBuZy1jbGFzcz1cIntcXCdtcy1PdmVybGF5LS1kYXJrXFwnOiB1aWZNb2RlID09IFxcJ2RhcmtcXCd9XCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgdWlmTW9kZTogJ0AnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIE92ZXJsYXlEaXJlY3RpdmUubG9nID0gbG9nO1xuICAgIH1cbiAgICBPdmVybGF5RGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAobG9nKSB7IHJldHVybiBuZXcgT3ZlcmxheURpcmVjdGl2ZShsb2cpOyB9O1xuICAgICAgICBkaXJlY3RpdmUuJGluamVjdCA9IFsnJGxvZyddO1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgT3ZlcmxheURpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICBzY29wZS4kd2F0Y2goJ3VpZk1vZGUnLCBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3ZlcmxheU1vZGVFbnVtX3RzXzEuT3ZlcmxheU1vZGVbbmV3VmFsdWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBPdmVybGF5RGlyZWN0aXZlLmxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMub3ZlcmxheSAtIFVuc3VwcG9ydGVkIG92ZXJsYXkgbW9kZTogJyArXG4gICAgICAgICAgICAgICAgICAgICdUaGUgb3ZlcmxheSBtb2RlIChcXCcnICsgc2NvcGUudWlmTW9kZSArICdcXCcpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE9mZmljZSBVSSBGYWJyaWMuICcgK1xuICAgICAgICAgICAgICAgICAgICAnU3VwcG9ydGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBoZXJlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9uZ09mZmljZVVJRmFicmljL25nLW9mZmljZXVpZmFicmljL2Jsb2IvbWFzdGVyL3NyYy9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheU1vZGVFbnVtLnRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgO1xuICAgIHJldHVybiBPdmVybGF5RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuT3ZlcmxheURpcmVjdGl2ZSA9IE92ZXJsYXlEaXJlY3RpdmU7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5vdmVybGF5JywgW1xuICAgICdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ1xuXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZPdmVybGF5JywgT3ZlcmxheURpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheURpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDExXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG4oZnVuY3Rpb24gKE92ZXJsYXlNb2RlKSB7XG4gICAgT3ZlcmxheU1vZGVbT3ZlcmxheU1vZGVbXCJsaWdodFwiXSA9IDBdID0gXCJsaWdodFwiO1xuICAgIE92ZXJsYXlNb2RlW092ZXJsYXlNb2RlW1wiZGFya1wiXSA9IDFdID0gXCJkYXJrXCI7XG59KShleHBvcnRzLk92ZXJsYXlNb2RlIHx8IChleHBvcnRzLk92ZXJsYXlNb2RlID0ge30pKTtcbnZhciBPdmVybGF5TW9kZSA9IGV4cG9ydHMuT3ZlcmxheU1vZGU7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9vdmVybGF5TW9kZUVudW0udHNcbiAqKiBtb2R1bGUgaWQgPSAxMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZShsb2cpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLVByb2dyZXNzSW5kaWNhdG9yXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cIm1zLVByb2dyZXNzSW5kaWNhdG9yLWl0ZW1OYW1lXCI+e3t1aWZOYW1lfX08L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3ItaXRlbVByb2dyZXNzXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cIm1zLVByb2dyZXNzSW5kaWNhdG9yLXByb2dyZXNzVHJhY2tcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3ItcHJvZ3Jlc3NCYXJcIiBuZy1zdHlsZT1cInt3aWR0aDogdWlmUGVyY2VudENvbXBsZXRlK1xcJyVcXCd9XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cIm1zLVByb2dyZXNzSW5kaWNhdG9yLWl0ZW1EZXNjcmlwdGlvblwiPnt7dWlmRGVzY3JpcHRpb259fTwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICB1aWZEZXNjcmlwdGlvbjogJ0AnLFxuICAgICAgICAgICAgdWlmTmFtZTogJ0AnLFxuICAgICAgICAgICAgdWlmUGVyY2VudENvbXBsZXRlOiAnQCdcbiAgICAgICAgfTtcbiAgICAgICAgUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUubG9nID0gbG9nO1xuICAgIH1cbiAgICBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKGxvZykgeyByZXR1cm4gbmV3IFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlKGxvZyk7IH07XG4gICAgICAgIGRpcmVjdGl2ZS4kaW5qZWN0ID0gWyckbG9nJ107XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICBzY29wZS4kd2F0Y2goJ3VpZlBlcmNlbnRDb21wbGV0ZScsIGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsIHx8IG5ld1ZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNjb3BlLnVpZlBlcmNlbnRDb21wbGV0ZSA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld1BlcmNlbnRDb21wbGV0ZSA9IHBhcnNlRmxvYXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG5ld1BlcmNlbnRDb21wbGV0ZSkgfHwgbmV3UGVyY2VudENvbXBsZXRlIDwgMCB8fCBuZXdQZXJjZW50Q29tcGxldGUgPiAxMDApIHtcbiAgICAgICAgICAgICAgICBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS5sb2cuZXJyb3IoJ0Vycm9yIFtuZ09mZmljZVVpRmFicmljXSBvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnByb2dyZXNzaW5kaWNhdG9yIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICdQZXJjZW50IGNvbXBsZXRlIG11c3QgYmUgYSB2YWxpZCBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAuJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUudWlmUGVyY2VudENvbXBsZXRlID0gTWF0aC5tYXgoTWF0aC5taW4obmV3UGVyY2VudENvbXBsZXRlLCAxMDApLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICA7XG4gICAgcmV0dXJuIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUgPSBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnByb2dyZXNzaW5kaWNhdG9yJywgW1xuICAgICdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ1xuXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZQcm9ncmVzc0luZGljYXRvcicsIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvcHJvZ3Jlc3NpbmRpY2F0b3IvcHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAxM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIFNlYXJjaEJveERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2VhcmNoQm94RGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxkaXYgY2xhc3M9XCJtcy1TZWFyY2hCb3hcIiBuZy1jbGFzcz1cIntcXCdpcy1hY3RpdmVcXCc6aXNBY3RpdmV9XCI+JyArXG4gICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwibXMtU2VhcmNoQm94LWZpZWxkXCIgbmctZm9jdXM9XCJpbnB1dEZvY3VzKClcIiBuZy1ibHVyPVwiaW5wdXRCbHVyKClcIicgK1xuICAgICAgICAgICAgJyBuZy1tb2RlbD1cInZhbHVlXCIgaWQ9XCJ7ezo6XFwnc2VhcmNoQm94X1xcJyskaWR9fVwiIC8+JyArXG4gICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwibXMtU2VhcmNoQm94LWxhYmVsXCIgZm9yPVwie3s6OlxcJ3NlYXJjaEJveF9cXCcrJGlkfX1cIiBuZy1oaWRlPVwiaXNMYWJlbEhpZGRlblwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwibXMtU2VhcmNoQm94LWljb24gbXMtSWNvbiBtcy1JY29uLS1zZWFyY2hcIiA+PC9pPiB7e3BsYWNlaG9sZGVyfX08L2xhYmVsPicgK1xuICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJtcy1TZWFyY2hCb3gtY2xvc2VCdXR0b25cIiBuZy1tb3VzZWRvd249XCJidG5Nb3VzZWRvd24oKVwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cIm1zLUljb24gbXMtSWNvbi0teFwiPjwvaT48L2J1dHRvbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICc9JyxcbiAgICAgICAgICAgIHZhbHVlOiAnPSdcbiAgICAgICAgfTtcbiAgICB9XG4gICAgU2VhcmNoQm94RGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU2VhcmNoQm94RGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBTZWFyY2hCb3hEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLmlzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgc2NvcGUuaXNDYW5jZWwgPSBmYWxzZTtcbiAgICAgICAgc2NvcGUuaXNMYWJlbEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBzY29wZS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBzY29wZS5pbnB1dEZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuaXNGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICBzY29wZS5pc0xhYmVsSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjb3BlLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuaW5wdXRCbHVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHNjb3BlLmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICBzY29wZS5pc0xhYmVsSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoc2NvcGUudmFsdWUpID09PSAndW5kZWZpbmVkJyB8fCBzY29wZS52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5pc0xhYmVsSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5pc0ZvY3VzID0gc2NvcGUuaXNDYW5jZWwgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuYnRuTW91c2Vkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBzY29wZS4kd2F0Y2goJ3ZhbHVlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmlzTGFiZWxIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaXNMYWJlbEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgncGxhY2Vob2xkZXInLCBmdW5jdGlvbiAoc2VhcmNoKSB7XG4gICAgICAgICAgICBzY29wZS5wbGFjZWhvbGRlciA9IHNlYXJjaDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2VhcmNoQm94RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuU2VhcmNoQm94RGlyZWN0aXZlID0gU2VhcmNoQm94RGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMuc2VhcmNoYm94JywgWydvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ10pXG4gICAgLmRpcmVjdGl2ZSgndWlmU2VhcmNoYm94JywgU2VhcmNoQm94RGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvc2VhcmNoYm94L3NlYXJjaGJveERpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDE0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgU3Bpbm5lckRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Bpbm5lckRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtU3Bpbm5lclwiPjwvZGl2Pic7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IFNwaW5uZXJDb250cm9sbGVyO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgJ25nU2hvdyc6ICc9J1xuICAgICAgICB9O1xuICAgIH1cbiAgICBTcGlubmVyRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3Bpbm5lckRpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgU3Bpbm5lckRpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBhdHRycywgY3RybCwgJHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgaWYgKGF0dHJzLnVpZlNwaW5uZXJzaXplID09PSAnbGFyZ2UnKSB7XG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQuYWRkQ2xhc3MoJ21zLVNwaW5uZXItLWxhcmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHJzLm5nU2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goJ25nU2hvdycsIGZ1bmN0aW9uIChuZXdWaXNpYmxlLCBvbGRWaXNpYmxlLCBzcGlubmVyU2NvcGUpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVyU2NvcGUuc3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwaW5uZXJTY29wZS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY29wZS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgICR0cmFuc2NsdWRlKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgICAgaWYgKGNsb25lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5nLmVsZW1lbnQoJzxkaXY+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5hZGRDbGFzcygnbXMtU3Bpbm5lci1sYWJlbCcpLmFwcGVuZChjbG9uZSk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50LmFwcGVuZCh3cmFwcGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNjb3BlLmluaXQoKTtcbiAgICB9O1xuICAgIHJldHVybiBTcGlubmVyRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuU3Bpbm5lckRpcmVjdGl2ZSA9IFNwaW5uZXJEaXJlY3RpdmU7XG52YXIgU3Bpbm5lckNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNwaW5uZXJDb250cm9sbGVyKCRzY29wZSwgJGVsZW1lbnQsICRpbnRlcnZhbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLiRzY29wZSA9ICRzY29wZTtcbiAgICAgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50O1xuICAgICAgICB0aGlzLiRpbnRlcnZhbCA9ICRpbnRlcnZhbDtcbiAgICAgICAgdGhpcy5fb2Zmc2V0U2l6ZSA9IDAuMTc5O1xuICAgICAgICB0aGlzLl9udW1DaXJjbGVzID0gODtcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3BlZWQgPSA5MDtcbiAgICAgICAgdGhpcy5fY2lyY2xlcyA9IFtdO1xuICAgICAgICAkc2NvcGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNyZWF0ZUNpcmNsZXNBbmRBcnJhbmdlKCk7XG4gICAgICAgICAgICBfdGhpcy5zZXRJbml0aWFsT3BhY2l0eSgpO1xuICAgICAgICB9O1xuICAgICAgICAkc2NvcGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fYW5pbWF0aW9uSW50ZXJ2YWwgPSAkaW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBpID0gX3RoaXMuX2NpcmNsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZmFkZUNpcmNsZShfdGhpcy5fY2lyY2xlc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgX3RoaXMuX2FuaW1hdGlvblNwZWVkKTtcbiAgICAgICAgfTtcbiAgICAgICAgJHNjb3BlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkaW50ZXJ2YWwuY2FuY2VsKF90aGlzLl9hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIFNwaW5uZXJDb250cm9sbGVyLnByb3RvdHlwZS5jcmVhdGVDaXJjbGVzQW5kQXJyYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy4kZWxlbWVudFswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuJGVsZW1lbnRbMF0uY2xpZW50SGVpZ2h0O1xuICAgICAgICB2YXIgYW5nbGUgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gd2lkdGggKiB0aGlzLl9vZmZzZXRTaXplO1xuICAgICAgICB2YXIgc3RlcCA9ICgyICogTWF0aC5QSSkgLyB0aGlzLl9udW1DaXJjbGVzO1xuICAgICAgICB2YXIgaSA9IHRoaXMuX251bUNpcmNsZXM7XG4gICAgICAgIHZhciByYWRpdXMgPSAod2lkdGggLSBvZmZzZXQpICogMC41O1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICB2YXIgY2lyY2xlID0gdGhpcy5jcmVhdGVDaXJjbGUoKTtcbiAgICAgICAgICAgIHZhciB4ID0gTWF0aC5yb3VuZCh3aWR0aCAqIDAuNSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSAtIGNpcmNsZVswXS5jbGllbnRXaWR0aCAqIDAuNSkgLSBvZmZzZXQgKiAwLjU7XG4gICAgICAgICAgICB2YXIgeSA9IE1hdGgucm91bmQoaGVpZ2h0ICogMC41ICsgcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpIC0gY2lyY2xlWzBdLmNsaWVudEhlaWdodCAqIDAuNSkgLSBvZmZzZXQgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZChjaXJjbGUpO1xuICAgICAgICAgICAgY2lyY2xlLmNzcygnbGVmdCcsICh4ICsgJ3B4JykpO1xuICAgICAgICAgICAgY2lyY2xlLmNzcygndG9wJywgKHkgKyAncHgnKSk7XG4gICAgICAgICAgICBhbmdsZSArPSBzdGVwO1xuICAgICAgICAgICAgdmFyIGNpcmNsZU9iamVjdCA9IG5ldyBDaXJjbGVPYmplY3QoY2lyY2xlLCBpKTtcbiAgICAgICAgICAgIHRoaXMuX2NpcmNsZXMucHVzaChjaXJjbGVPYmplY3QpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTcGlubmVyQ29udHJvbGxlci5wcm90b3R5cGUuY3JlYXRlQ2lyY2xlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2lyY2xlID0gbmcuZWxlbWVudCgnPGRpdj48L2Rpdj4nKTtcbiAgICAgICAgdmFyIHBhcmVudFdpZHRoID0gdGhpcy4kZWxlbWVudFswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIGRvdFNpemUgPSAocGFyZW50V2lkdGggKiB0aGlzLl9vZmZzZXRTaXplKSArICdweCc7XG4gICAgICAgIGNpcmNsZS5hZGRDbGFzcygnbXMtU3Bpbm5lci1jaXJjbGUnKS5jc3MoJ3dpZHRoJywgZG90U2l6ZSkuY3NzKCdoZWlnaHQnLCBkb3RTaXplKTtcbiAgICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9O1xuICAgIDtcbiAgICBTcGlubmVyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0SW5pdGlhbE9wYWNpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBvcGNhaXR5VG9TZXQ7XG4gICAgICAgIHRoaXMuX2ZhZGVJbmNyZW1lbnQgPSAxIC8gdGhpcy5fbnVtQ2lyY2xlcztcbiAgICAgICAgdGhpcy5fY2lyY2xlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaXJjbGUsIGluZGV4KSB7XG4gICAgICAgICAgICBvcGNhaXR5VG9TZXQgPSAoX3RoaXMuX2ZhZGVJbmNyZW1lbnQgKiAoaW5kZXggKyAxKSk7XG4gICAgICAgICAgICBjaXJjbGUub3BhY2l0eSA9IG9wY2FpdHlUb1NldDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTcGlubmVyQ29udHJvbGxlci5wcm90b3R5cGUuZmFkZUNpcmNsZSA9IGZ1bmN0aW9uIChjaXJjbGUpIHtcbiAgICAgICAgdmFyIG5ld09wYWNpdHkgPSBjaXJjbGUub3BhY2l0eSAtIHRoaXMuX2ZhZGVJbmNyZW1lbnQ7XG4gICAgICAgIGlmIChuZXdPcGFjaXR5IDw9IDApIHtcbiAgICAgICAgICAgIG5ld09wYWNpdHkgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNpcmNsZS5vcGFjaXR5ID0gbmV3T3BhY2l0eTtcbiAgICB9O1xuICAgIFNwaW5uZXJDb250cm9sbGVyLiRpbmplY3QgPSBbJyRzY29wZScsICckZWxlbWVudCcsICckaW50ZXJ2YWwnXTtcbiAgICByZXR1cm4gU3Bpbm5lckNvbnRyb2xsZXI7XG59KSgpO1xudmFyIENpcmNsZU9iamVjdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2lyY2xlT2JqZWN0KGNpcmNsZUVsZW1lbnQsIGNpcmNsZUluZGV4KSB7XG4gICAgICAgIHRoaXMuY2lyY2xlRWxlbWVudCA9IGNpcmNsZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY2lyY2xlSW5kZXggPSBjaXJjbGVJbmRleDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENpcmNsZU9iamVjdC5wcm90b3R5cGUsIFwib3BhY2l0eVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICsodGhpcy5jaXJjbGVFbGVtZW50LmNzcygnb3BhY2l0eScpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAob3BhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jaXJjbGVFbGVtZW50LmNzcygnb3BhY2l0eScsIG9wYWNpdHkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gQ2lyY2xlT2JqZWN0O1xufSkoKTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnNwaW5uZXInLCBbJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZTcGlubmVyJywgU3Bpbm5lckRpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lckRpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgVGFibGVDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWJsZUNvbnRyb2xsZXIoJHNjb3BlKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xuICAgICAgICB0aGlzLiRzY29wZS5vcmRlckJ5ID0gbnVsbDtcbiAgICAgICAgdGhpcy4kc2NvcGUub3JkZXJBc2MgPSB0cnVlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGFibGVDb250cm9sbGVyLnByb3RvdHlwZSwgXCJvcmRlckJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUub3JkZXJCeTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9yZGVyQnkgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRhYmxlQ29udHJvbGxlci5wcm90b3R5cGUsIFwib3JkZXJBc2NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5vcmRlckFzYztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXJBc2MpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9yZGVyQXNjID0gb3JkZXJBc2M7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFRhYmxlQ29udHJvbGxlci4kaW5qZWN0ID0gWyckc2NvcGUnXTtcbiAgICByZXR1cm4gVGFibGVDb250cm9sbGVyO1xufSkoKTtcbnZhciBUYWJsZURpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLVRhYmxlXCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBUYWJsZUNvbnRyb2xsZXI7XG4gICAgICAgIHRoaXMuY29udHJvbGxlckFzID0gJ3RhYmxlJztcbiAgICB9XG4gICAgVGFibGVEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUYWJsZURpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuVGFibGVEaXJlY3RpdmUgPSBUYWJsZURpcmVjdGl2ZTtcbnZhciBUYWJsZVJvd0RpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVSb3dEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLVRhYmxlLXJvd1wiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+JztcbiAgICB9XG4gICAgVGFibGVSb3dEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUYWJsZVJvd0RpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgVGFibGVSb3dEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgaWYgKGF0dHJzLnVpZlNlbGVjdGVkID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5hZGRDbGFzcygnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlUm93RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuVGFibGVSb3dEaXJlY3RpdmUgPSBUYWJsZVJvd0RpcmVjdGl2ZTtcbnZhciBUYWJsZVJvd1NlbGVjdERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVSb3dTZWxlY3REaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPHNwYW4gY2xhc3M9XCJtcy1UYWJsZS1yb3dDaGVja1wiPjwvc3Bhbj4nO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgIH1cbiAgICBUYWJsZVJvd1NlbGVjdERpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICByZXR1cm4gVGFibGVSb3dTZWxlY3REaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5UYWJsZVJvd1NlbGVjdERpcmVjdGl2ZSA9IFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlO1xudmFyIFRhYmxlQ2VsbERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVDZWxsRGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxzcGFuIGNsYXNzPVwibXMtVGFibGUtY2VsbFwiIG5nLXRyYW5zY2x1ZGU+PC9zcGFuPic7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgfVxuICAgIFRhYmxlQ2VsbERpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRhYmxlQ2VsbERpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlQ2VsbERpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRhYmxlQ2VsbERpcmVjdGl2ZSA9IFRhYmxlQ2VsbERpcmVjdGl2ZTtcbnZhciBUYWJsZUhlYWRlckRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVIZWFkZXJEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPHNwYW4gY2xhc3M9XCJtcy1UYWJsZS1jZWxsXCIgbmctdHJhbnNjbHVkZT48L3NwYW4+JztcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gJ151aWZUYWJsZSc7XG4gICAgfVxuICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGFibGVIZWFkZXJEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCB0YWJsZSkge1xuICAgICAgICBzY29wZS5oZWFkZXJDbGljayA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgaWYgKHRhYmxlLm9yZGVyQnkgPT09IGF0dHJzLnVpZk9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5vcmRlckFzYyA9ICF0YWJsZS5vcmRlckFzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhYmxlLm9yZGVyQnkgPSBhdHRycy51aWZPcmRlckJ5O1xuICAgICAgICAgICAgICAgIHRhYmxlLm9yZGVyQXNjID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCd0YWJsZS5vcmRlckJ5JywgZnVuY3Rpb24gKG5ld09yZGVyQnksIG9sZE9yZGVyQnksIHRhYmxlSGVhZGVyU2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChvbGRPcmRlckJ5ICE9PSBuZXdPcmRlckJ5ICYmXG4gICAgICAgICAgICAgICAgbmV3T3JkZXJCeSA9PT0gYXR0cnMudWlmT3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IGluc3RhbmNlRWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzLmVxKGkpLmNoaWxkcmVuKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5lcShpKS5jaGlsZHJlbigpLmVxKDEpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5hcHBlbmQoJzxzcGFuIGNsYXNzPVwidWlmLXNvcnQtb3JkZXJcIj4mbmJzcDtcXFxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS1jYXJldERvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9zcGFuPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCd0YWJsZS5vcmRlckFzYycsIGZ1bmN0aW9uIChuZXdPcmRlckFzYywgb2xkT3JkZXJBc2MsIHRhYmxlSGVhZGVyU2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUVsZW1lbnQuY2hpbGRyZW4oKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ3NzQ2xhc3MgPSBvbGRPcmRlckFzYyA/ICdtcy1JY29uLS1jYXJldERvd24nIDogJ21zLUljb24tLWNhcmV0VXAnO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDc3NDbGFzcyA9IG5ld09yZGVyQXNjID8gJ21zLUljb24tLWNhcmV0RG93bicgOiAnbXMtSWNvbi0tY2FyZXRVcCc7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50LmNoaWxkcmVuKCkuZXEoMSkuY2hpbGRyZW4oKS5lcSgwKS5yZW1vdmVDbGFzcyhvbGRDc3NDbGFzcykuYWRkQ2xhc3MobmV3Q3NzQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCd1aWZPcmRlckJ5JyBpbiBhdHRycykge1xuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50Lm9uKCdjbGljaycsIHNjb3BlLmhlYWRlckNsaWNrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlSGVhZGVyRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuVGFibGVIZWFkZXJEaXJlY3RpdmUgPSBUYWJsZUhlYWRlckRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnRhYmxlJywgWydvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ10pXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGUnLCBUYWJsZURpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVSb3cnLCBUYWJsZVJvd0RpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVSb3dTZWxlY3QnLCBUYWJsZVJvd1NlbGVjdERpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVDZWxsJywgVGFibGVDZWxsRGlyZWN0aXZlLmZhY3RvcnkoKSlcbiAgICAuZGlyZWN0aXZlKCd1aWZUYWJsZUhlYWRlcicsIFRhYmxlSGVhZGVyRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGVEaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAxNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIFRleHRGaWVsZERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGV4dEZpZWxkRGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxkaXYgbmctY2xhc3M9XCJ7XFwnaXMtYWN0aXZlXFwnOiBpc0FjdGl2ZSwgXFwnbXMtVGV4dEZpZWxkXFwnOiB0cnVlLCAnICtcbiAgICAgICAgICAgICdcXCdtcy1UZXh0RmllbGQtLXVuZGVybGluZWRcXCc6IHVpZlVuZGVybGluZWQsIFxcJ21zLVRleHRGaWVsZC0tcGxhY2Vob2xkZXJcXCc6IHBsYWNlaG9sZGVyfVwiPicgK1xuICAgICAgICAgICAgJzxsYWJlbCBuZy1zaG93PVwibGFiZWxTaG93blwiIGNsYXNzPVwibXMtTGFiZWxcIj57e3VpZkxhYmVsIHx8IHBsYWNlaG9sZGVyfX08L2xhYmVsPicgK1xuICAgICAgICAgICAgJzxpbnB1dCBuZy1tb2RlbD1cIm5nTW9kZWxcIiBuZy1ibHVyPVwiaW5wdXRCbHVyKClcIiBuZy1mb2N1cz1cImlucHV0Rm9jdXMoKVwiIG5nLWNsaWNrPVwiaW5wdXRDbGljaygpXCIgY2xhc3M9XCJtcy1UZXh0RmllbGQtZmllbGRcIiAvPicgK1xuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibXMtVGV4dEZpZWxkLWRlc2NyaXB0aW9uXCI+e3t1aWZEZXNjcmlwdGlvbn19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBuZ01vZGVsOiAnPScsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0AnLFxuICAgICAgICAgICAgdWlmRGVzY3JpcHRpb246ICdAJyxcbiAgICAgICAgICAgIHVpZkxhYmVsOiAnQCdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICB9XG4gICAgVGV4dEZpZWxkRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGV4dEZpZWxkRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBUZXh0RmllbGREaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHtcbiAgICAgICAgc2NvcGUubGFiZWxTaG93biA9IHRydWU7XG4gICAgICAgIHNjb3BlLnVpZlVuZGVybGluZWQgPSAndWlmVW5kZXJsaW5lZCcgaW4gYXR0cnM7XG4gICAgICAgIHNjb3BlLmlucHV0Rm9jdXMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS51aWZVbmRlcmxpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5pbnB1dENsaWNrID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5sYWJlbFNob3duID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLmlucHV0Qmx1ciA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5zdGFuY2VFbGVtZW50LmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpZiAoc2NvcGUucGxhY2Vob2xkZXIgJiYgaW5wdXQudmFsKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUubGFiZWxTaG93biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NvcGUudWlmVW5kZXJsaW5lZCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVGV4dEZpZWxkRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuVGV4dEZpZWxkRGlyZWN0aXZlID0gVGV4dEZpZWxkRGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMudGV4dGZpZWxkJywgW1xuICAgICdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ1xuXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZUZXh0ZmllbGQnLCBUZXh0RmllbGREaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy90ZXh0ZmllbGQvdGV4dEZpZWxkRGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gMTdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBUb2dnbGVEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRvZ2dsZURpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IG5nLWNsYXNzPVwidG9nZ2xlQ2xhc3NcIj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1zLVRvZ2dsZS1kZXNjcmlwdGlvblwiPjxuZy10cmFuc2NsdWRlLz48L3NwYW4+JyArXG4gICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwie3s6OiRpZH19XCIgY2xhc3M9XCJtcy1Ub2dnbGUtaW5wdXRcIiBuZy1tb2RlbD1cIm5nTW9kZWxcIiAvPicgK1xuICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJ7ezo6JGlkfX1cIiBjbGFzcz1cIm1zLVRvZ2dsZS1maWVsZFwiPicgK1xuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibXMtTGFiZWwgbXMtTGFiZWwtLW9mZlwiPnt7dWlmTGFiZWxPZmZ9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1zLUxhYmVsIG1zLUxhYmVsLS1vblwiPnt7dWlmTGFiZWxPbn19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIG5nTW9kZWw6ICc9JyxcbiAgICAgICAgICAgIHVpZkxhYmVsT2ZmOiAnQCcsXG4gICAgICAgICAgICB1aWZMYWJlbE9uOiAnQCcsXG4gICAgICAgICAgICB1aWZUZXh0TG9jYXRpb246ICdAJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBUb2dnbGVEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUb2dnbGVEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFRvZ2dsZURpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgc2NvcGUudG9nZ2xlQ2xhc3MgPSAnbXMtVG9nZ2xlJztcbiAgICAgICAgaWYgKHNjb3BlLnVpZlRleHRMb2NhdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNjb3BlLnVpZlRleHRMb2NhdGlvbjtcbiAgICAgICAgICAgIGxvYyA9IGxvYy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxvYy5zbGljZSgxKTtcbiAgICAgICAgICAgIHNjb3BlLnRvZ2dsZUNsYXNzICs9ICcgbXMtVG9nZ2xlLS10ZXh0JyArIGxvYztcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRvZ2dsZURpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRvZ2dsZURpcmVjdGl2ZSA9IFRvZ2dsZURpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnRvZ2dsZScsIFtcbiAgICAnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cydcbl0pXG4gICAgLmRpcmVjdGl2ZSgndWlmVG9nZ2xlJywgVG9nZ2xlRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZURpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDE4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBhZmRjNWVkZTA5MTE3ZTY1NjdiYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29yZS9jb3JlLnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcImFuZ3VsYXJcIiIsIndlYnBhY2s6Ly8vLi9zcmMvY29yZS9jb21wb25lbnRzLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NhbGxvdXQvY2FsbG91dERpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYWxsb3V0L2NhbGxvdXRUeXBlRW51bS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYWxsb3V0L2NhbGxvdXRBcnJvd0VudW0udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2hvaWNlZmllbGQvY2hvaWNlZmllbGREaXJlY3RpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2hvaWNlZmllbGQvY2hvaWNlZmllbGRUeXBlRW51bS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZXh0dWFsbWVudS9jb250ZXh0dWFsTWVudS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bkRpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pY29uL2ljb25EaXJlY3RpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaWNvbi9pY29uRW51bS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9saW5rL2xpbmtEaXJlY3RpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9vdmVybGF5RGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheU1vZGVFbnVtLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3Byb2dyZXNzaW5kaWNhdG9yL3Byb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3NlYXJjaGJveC9zZWFyY2hib3hEaXJlY3RpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lclNpemVFbnVtLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlRGlyZWN0aXZlLnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlUm93U2VsZWN0TW9kZUVudW0udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvdGV4dGZpZWxkL3RleHRGaWVsZERpcmVjdGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90b2dnbGUvdG9nZ2xlRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3RDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNGQSxnRDs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHFDQUFxQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxzQ0FBc0M7QUFDM0U7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHNDQUFzQztBQUMzRTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW1FLGdCQUFnQjtBQUNuRix5QkFBd0I7QUFDeEIsMkZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQywrQkFBK0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDLGtEQUFrRDtBQUNuRDs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUMsb0RBQW9EO0FBQ3JEOzs7Ozs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTBCLE9BQU8sdUNBQXVDLFNBQVMsV0FBVyxPQUFPO0FBQ25HLGtEQUFpRCxhQUFhLG9CQUFvQixjQUFjO0FBQ2hHLDRCQUEyQixPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYixVQUFTO0FBQ1Q7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLDJCQUEyQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyx3Q0FBd0M7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ3JLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUMsMERBQTBEO0FBQzNEO0FBQ0E7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQyxzQ0FBc0M7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0tBQXFLLHFEQUFxRCxvQ0FBb0MsTUFBTTtBQUNwUTtBQUNBLHFIQUFvSCxxREFBcUQscURBQXFELE1BQU07QUFDcE8sMkhBQTBILE1BQU07QUFDaEk7QUFDQTtBQUNBO0FBQ0EsMENBQXlDLDhDQUE4QztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHNDQUFzQztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDaE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsc0NBQXNDO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYixVQUFTO0FBQ1Q7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsZ0NBQStCLG9CQUFvQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBd0IsdUVBQXVFO0FBQy9GO0FBQ0EsZ0RBQStDLGVBQWU7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsZ0NBQWdDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLHVEQUFzRCxTQUFTO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsNEJBQTRCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQyw0Q0FBNEM7QUFDN0M7QUFDQTs7Ozs7OztBQ3pWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXVDLFVBQVU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsNEJBQTRCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE0RCwwQ0FBMEM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0Msa0NBQWtDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDLGtEQUFrRDtBQUNuRDs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTBELFNBQVM7QUFDbkU7QUFDQTtBQUNBLHVFQUFzRSxnQ0FBZ0M7QUFDdEc7QUFDQSxrRUFBaUUsZ0JBQWdCO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF3Qyw0Q0FBNEM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQThELHVCQUF1QjtBQUNyRjtBQUNBLHNDQUFxQyxzQkFBc0I7QUFDM0QsdURBQXNELHNCQUFzQjtBQUM1RSwyRUFBMEUsYUFBYTtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLGlDQUFpQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7OztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsK0JBQStCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsRUFBQztBQUNEO0FBQ0E7Ozs7Ozs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDLGtEQUFrRDtBQUNuRDs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw0QkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLDZCQUE2QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLGdDQUFnQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF1Qyx1QkFBdUI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLHNDQUFzQztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQStCLHVCQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQStCLHVCQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBcUMsaUNBQWlDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFxQyxtQ0FBbUM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTJFO0FBQzNFO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNyVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUMsd0VBQXdFO0FBQ3pFOzs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBeUM7QUFDekMsc0dBQXFHO0FBQ3JHLDZEQUE0RCx5QkFBeUI7QUFDckY7QUFDQSx1REFBc0QsZ0JBQWdCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLGlDQUFpQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTBDLE9BQU87QUFDakQsNEJBQTJCLE9BQU87QUFDbEMscURBQW9ELGFBQWE7QUFDakUsb0RBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXFDLDhCQUE4QjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoibmdPZmZpY2VVaUZhYnJpYy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiYW5ndWxhclwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwiYW5ndWxhclwiKSkgOiBmYWN0b3J5KHJvb3RbXCJhbmd1bGFyXCJdKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fKSB7XG5yZXR1cm4gXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uXG4gKiovIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGlkOiBtb2R1bGVJZCxcbiBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL2Jvb3RzdHJhcCBhZmRjNWVkZTA5MTE3ZTY1NjdiYlxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb3JlJywgW10pO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb3JlL2NvcmUudHNcbiAqKiBtb2R1bGUgaWQgPSAxXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwgXCJhbmd1bGFyXCJcbiAqKiBtb2R1bGUgaWQgPSAyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgY2FsbG91dE1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvY2FsbG91dC9jYWxsb3V0RGlyZWN0aXZlJyk7XG52YXIgY2hvaWNlZmllbGRNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2Nob2ljZWZpZWxkL2Nob2ljZWZpZWxkRGlyZWN0aXZlJyk7XG52YXIgY29udGV4dHVhbE1lbnVNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2NvbnRleHR1YWxtZW51L2NvbnRleHR1YWxNZW51Jyk7XG52YXIgZHJvcGRvd25Nb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duRGlyZWN0aXZlJyk7XG52YXIgaWNvbk1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvaWNvbi9pY29uRGlyZWN0aXZlJyk7XG52YXIgbGlua01vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvbGluay9saW5rRGlyZWN0aXZlJyk7XG52YXIgb3ZlcmxheU1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvb3ZlcmxheS9vdmVybGF5RGlyZWN0aXZlJyk7XG52YXIgcHJvZ3Jlc3NJbmRpY2F0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL3Byb2dyZXNzaW5kaWNhdG9yL3Byb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlJyk7XG52YXIgc2VhcmNoYm94TW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9zZWFyY2hib3gvc2VhcmNoYm94RGlyZWN0aXZlJyk7XG52YXIgc3Bpbm5lck1vZHVsZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyRGlyZWN0aXZlJyk7XG52YXIgdGFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlRGlyZWN0aXZlJyk7XG52YXIgdGV4dEZpZWxkTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy90ZXh0ZmllbGQvdGV4dEZpZWxkRGlyZWN0aXZlJyk7XG52YXIgdG9nZ2xlTW9kdWxlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy90b2dnbGUvdG9nZ2xlRGlyZWN0aXZlJyk7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cycsIFtcbiAgICBjYWxsb3V0TW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIGNob2ljZWZpZWxkTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIGNvbnRleHR1YWxNZW51TW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIGRyb3Bkb3duTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIGljb25Nb2R1bGUubW9kdWxlLm5hbWUsXG4gICAgbGlua01vZHVsZS5tb2R1bGUubmFtZSxcbiAgICBvdmVybGF5TW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHByb2dyZXNzSW5kaWNhdG9yTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHNlYXJjaGJveE1vZHVsZS5tb2R1bGUubmFtZSxcbiAgICBzcGlubmVyTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHRhYmxlTW9kdWxlLm1vZHVsZS5uYW1lLFxuICAgIHRleHRGaWVsZE1vZHVsZS5tb2R1bGUubmFtZSxcbiAgICB0b2dnbGVNb2R1bGUubW9kdWxlLm5hbWVcbl0pO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb3JlL2NvbXBvbmVudHMudHNcbiAqKiBtb2R1bGUgaWQgPSAzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgY2FsbG91dFR5cGVFbnVtXzEgPSByZXF1aXJlKCcuL2NhbGxvdXRUeXBlRW51bScpO1xudmFyIGNhbGxvdXRBcnJvd0VudW1fMSA9IHJlcXVpcmUoJy4vY2FsbG91dEFycm93RW51bScpO1xudmFyIENhbGxvdXRDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYWxsb3V0Q29udHJvbGxlcigkbG9nKSB7XG4gICAgICAgIHRoaXMuJGxvZyA9ICRsb2c7XG4gICAgfVxuICAgIENhbGxvdXRDb250cm9sbGVyLiRpbmplY3QgPSBbJyRsb2cnXTtcbiAgICByZXR1cm4gQ2FsbG91dENvbnRyb2xsZXI7XG59KSgpO1xuZXhwb3J0cy5DYWxsb3V0Q29udHJvbGxlciA9IENhbGxvdXRDb250cm9sbGVyO1xudmFyIENhbGxvdXRIZWFkZXJEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENhbGxvdXRIZWFkZXJEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjb3BlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLUNhbGxvdXQtaGVhZGVyXCI+PHAgY2xhc3M9XCJtcy1DYWxsb3V0LXRpdGxlXCIgbmctdHJhbnNjbHVkZT48L3A+PC9kaXY+JztcbiAgICB9XG4gICAgQ2FsbG91dEhlYWRlckRpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENhbGxvdXRIZWFkZXJEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIENhbGxvdXRIZWFkZXJEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgYXR0cnMsIGN0cmxzKSB7XG4gICAgICAgIHZhciBtYWluV3JhcHBlciA9IGluc3RhbmNlRWxlbWVudC5wYXJlbnQoKS5wYXJlbnQoKTtcbiAgICAgICAgaWYgKCFuZy5pc1VuZGVmaW5lZChtYWluV3JhcHBlcikgJiYgbWFpbldyYXBwZXIuaGFzQ2xhc3MoJ21zLUNhbGxvdXQtbWFpbicpKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWNoZWRIZWFkZXIgPSBpbnN0YW5jZUVsZW1lbnQuZGV0YWNoKCk7XG4gICAgICAgICAgICBtYWluV3JhcHBlci5wcmVwZW5kKGRldGFjaGVkSGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENhbGxvdXRIZWFkZXJEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5DYWxsb3V0SGVhZGVyRGlyZWN0aXZlID0gQ2FsbG91dEhlYWRlckRpcmVjdGl2ZTtcbnZhciBDYWxsb3V0Q29udGVudERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2FsbG91dENvbnRlbnREaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjb3BlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLUNhbGxvdXQtY29udGVudFwiPjxwIGNsYXNzPVwibXMtQ2FsbG91dC1zdWJUZXh0XCIgbmctdHJhbnNjbHVkZT48L3A+PC9kaXY+JztcbiAgICB9XG4gICAgQ2FsbG91dENvbnRlbnREaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDYWxsb3V0Q29udGVudERpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIENhbGxvdXRDb250ZW50RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ2FsbG91dENvbnRlbnREaXJlY3RpdmUgPSBDYWxsb3V0Q29udGVudERpcmVjdGl2ZTtcbnZhciBDYWxsb3V0QWN0aW9uc0RpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2FsbG91dEFjdGlvbnNEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjb3BlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLUNhbGxvdXQtYWN0aW9uc1wiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+JztcbiAgICB9XG4gICAgQ2FsbG91dEFjdGlvbnNEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDYWxsb3V0QWN0aW9uc0RpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIENhbGxvdXRBY3Rpb25zRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ2FsbG91dEFjdGlvbnNEaXJlY3RpdmUgPSBDYWxsb3V0QWN0aW9uc0RpcmVjdGl2ZTtcbnZhciBDYWxsb3V0RGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYWxsb3V0RGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtQ2FsbG91dCBtcy1DYWxsb3V0LS1hcnJvd3t7YXJyb3dEaXJlY3Rpb259fVwiICcgK1xuICAgICAgICAgICAgJ25nLWNsYXNzPVwie1xcJ21zLUNhbGxvdXQtLWFjdGlvblRleHRcXCc6IGhhc1NlcGFyYXRvciwgXFwnbXMtQ2FsbG91dC0tT09CRVxcJzogdWlmVHlwZT09XFwnb29iZVxcJywnICtcbiAgICAgICAgICAgICcgXFwnbXMtQ2FsbG91dC0tUGVla1xcJzogdWlmVHlwZT09XFwncGVla1xcJywgXFwnbXMtQ2FsbG91dC0tY2xvc2VcXCc6IGNsb3NlQnV0dG9ufVwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtcy1DYWxsb3V0LW1haW5cIj48ZGl2IGNsYXNzPVwibXMtQ2FsbG91dC1pbm5lclwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+PC9kaXY+PC9kaXY+JztcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gWyd1aWZDYWxsb3V0J107XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBuZ1Nob3c6ICc9JyxcbiAgICAgICAgICAgIHVpZlR5cGU6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBDYWxsb3V0Q29udHJvbGxlcjtcbiAgICB9XG4gICAgQ2FsbG91dERpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENhbGxvdXREaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIENhbGxvdXREaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgYXR0cnMsIGN0cmxzKSB7XG4gICAgICAgIHZhciBjYWxsb3V0Q29udHJvbGxlciA9IGN0cmxzWzBdO1xuICAgICAgICBhdHRycy4kb2JzZXJ2ZSgndWlmVHlwZScsIGZ1bmN0aW9uIChjYWxsb3V0VHlwZSkge1xuICAgICAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKGNhbGxvdXRUeXBlRW51bV8xLkNhbGxvdXRUeXBlW2NhbGxvdXRUeXBlXSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsb3V0Q29udHJvbGxlci4kbG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jYWxsb3V0IC0gXCInICtcbiAgICAgICAgICAgICAgICAgICAgY2FsbG91dFR5cGUgKyAnXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHVpZlR5cGUuIEl0IHNob3VsZCBiZSBvb2JlIG9yIHBlZWsnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghYXR0cnMudWlmQXJyb3cpIHtcbiAgICAgICAgICAgIHNjb3BlLmFycm93RGlyZWN0aW9uID0gJ0xlZnQnO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJzLiRvYnNlcnZlKCd1aWZBcnJvdycsIGZ1bmN0aW9uIChhdHRyQXJyb3dEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChuZy5pc1VuZGVmaW5lZChjYWxsb3V0QXJyb3dFbnVtXzEuQ2FsbG91dEFycm93W2F0dHJBcnJvd0RpcmVjdGlvbl0pKSB7XG4gICAgICAgICAgICAgICAgY2FsbG91dENvbnRyb2xsZXIuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMuY2FsbG91dCAtIFwiJyArXG4gICAgICAgICAgICAgICAgICAgIGF0dHJBcnJvd0RpcmVjdGlvbiArICdcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgdWlmQXJyb3cuIEl0IHNob3VsZCBiZSBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20uJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNhcGl0YWxpemVkRGlyZWN0aW9uID0gKGF0dHJBcnJvd0RpcmVjdGlvbi5jaGFyQXQoMCkpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBjYXBpdGFsaXplZERpcmVjdGlvbiArPSAoYXR0ckFycm93RGlyZWN0aW9uLnNsaWNlKDEpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgc2NvcGUuYXJyb3dEaXJlY3Rpb24gPSBjYXBpdGFsaXplZERpcmVjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHNjb3BlLmhhc1NlcGFyYXRvciA9ICghbmcuaXNVbmRlZmluZWQoYXR0cnMudWlmQWN0aW9uVGV4dCkgfHwgIW5nLmlzVW5kZWZpbmVkKGF0dHJzLnVpZlNlcGFyYXRvcikpO1xuICAgICAgICBpZiAoIW5nLmlzVW5kZWZpbmVkKGF0dHJzLnVpZkNsb3NlKSkge1xuICAgICAgICAgICAgc2NvcGUuY2xvc2VCdXR0b24gPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGNsb3NlQnV0dG9uRWxlbWVudCA9IG5nLmVsZW1lbnQoJzxidXR0b24gY2xhc3M9XCJtcy1DYWxsb3V0LWNsb3NlXCI+JyArXG4gICAgICAgICAgICAgICAgJzxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS14XCI+PC9pPicgK1xuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nKTtcbiAgICAgICAgICAgIHZhciBjYWxsb3V0RGl2ID0gaW5zdGFuY2VFbGVtZW50LmZpbmQoJ2RpdicpLmVxKDApO1xuICAgICAgICAgICAgY2FsbG91dERpdi5hcHBlbmQoY2xvc2VCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgIGNsb3NlQnV0dG9uRWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm5nU2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNjb3BlLmNsb3NlQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZUVsZW1lbnQuYmluZCgnbW91c2VlbnRlcicsIGZ1bmN0aW9uIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgc2NvcGUuaXNNb3VzZU92ZXIgPSB0cnVlO1xuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0YW5jZUVsZW1lbnQuYmluZCgnbW91c2VsZWF2ZScsIGZ1bmN0aW9uIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgc2NvcGUuaXNNb3VzZU92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLiRhcHBseSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCduZ1Nob3cnLCBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaXNDbG9zaW5nQnlCdXR0b25DbGljayA9ICFuZXdWYWx1ZSAmJiBzY29wZS5jbG9zZUJ1dHRvbkNsaWNrZWQ7XG4gICAgICAgICAgICBpZiAoaXNDbG9zaW5nQnlCdXR0b25DbGljaykge1xuICAgICAgICAgICAgICAgIHNjb3BlLm5nU2hvdyA9IHNjb3BlLmNsb3NlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5uZ1Nob3cgPSBzY29wZS5pc01vdXNlT3ZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgnaXNNb3VzZU92ZXInLCBmdW5jdGlvbiAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgICAgIGlmICghbmV3VmFsICYmIG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubmdTaG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBDYWxsb3V0RGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ2FsbG91dERpcmVjdGl2ZSA9IENhbGxvdXREaXJlY3RpdmU7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jYWxsb3V0JywgWydvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ10pXG4gICAgLmRpcmVjdGl2ZSgndWlmQ2FsbG91dCcsIENhbGxvdXREaXJlY3RpdmUuZmFjdG9yeSgpKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkNhbGxvdXRIZWFkZXInLCBDYWxsb3V0SGVhZGVyRGlyZWN0aXZlLmZhY3RvcnkoKSlcbiAgICAuZGlyZWN0aXZlKCd1aWZDYWxsb3V0Q29udGVudCcsIENhbGxvdXRDb250ZW50RGlyZWN0aXZlLmZhY3RvcnkoKSlcbiAgICAuZGlyZWN0aXZlKCd1aWZDYWxsb3V0QWN0aW9ucycsIENhbGxvdXRBY3Rpb25zRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvY2FsbG91dC9jYWxsb3V0RGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xuKGZ1bmN0aW9uIChDYWxsb3V0VHlwZSkge1xuICAgIENhbGxvdXRUeXBlW0NhbGxvdXRUeXBlW1wib29iZVwiXSA9IDBdID0gXCJvb2JlXCI7XG4gICAgQ2FsbG91dFR5cGVbQ2FsbG91dFR5cGVbXCJwZWVrXCJdID0gMV0gPSBcInBlZWtcIjtcbn0pKGV4cG9ydHMuQ2FsbG91dFR5cGUgfHwgKGV4cG9ydHMuQ2FsbG91dFR5cGUgPSB7fSkpO1xudmFyIENhbGxvdXRUeXBlID0gZXhwb3J0cy5DYWxsb3V0VHlwZTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9jYWxsb3V0L2NhbGxvdXRUeXBlRW51bS50c1xuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbihmdW5jdGlvbiAoQ2FsbG91dEFycm93KSB7XG4gICAgQ2FsbG91dEFycm93W0NhbGxvdXRBcnJvd1tcImxlZnRcIl0gPSAwXSA9IFwibGVmdFwiO1xuICAgIENhbGxvdXRBcnJvd1tDYWxsb3V0QXJyb3dbXCJyaWdodFwiXSA9IDFdID0gXCJyaWdodFwiO1xuICAgIENhbGxvdXRBcnJvd1tDYWxsb3V0QXJyb3dbXCJ0b3BcIl0gPSAyXSA9IFwidG9wXCI7XG4gICAgQ2FsbG91dEFycm93W0NhbGxvdXRBcnJvd1tcImJvdHRvbVwiXSA9IDNdID0gXCJib3R0b21cIjtcbn0pKGV4cG9ydHMuQ2FsbG91dEFycm93IHx8IChleHBvcnRzLkNhbGxvdXRBcnJvdyA9IHt9KSk7XG52YXIgQ2FsbG91dEFycm93ID0gZXhwb3J0cy5DYWxsb3V0QXJyb3c7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvY2FsbG91dC9jYWxsb3V0QXJyb3dFbnVtLnRzXG4gKiogbW9kdWxlIGlkID0gNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIGNob2ljZWZpZWxkVHlwZUVudW1fMSA9IHJlcXVpcmUoJy4vY2hvaWNlZmllbGRUeXBlRW51bScpO1xudmFyIENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyKCRsb2cpIHtcbiAgICAgICAgdGhpcy4kbG9nID0gJGxvZztcbiAgICB9XG4gICAgQ2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyLiRpbmplY3QgPSBbJyRsb2cnXTtcbiAgICByZXR1cm4gQ2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyO1xufSkoKTtcbmV4cG9ydHMuQ2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyID0gQ2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyO1xudmFyIENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtQ2hvaWNlRmllbGRcIj4nICtcbiAgICAgICAgICAgICc8aW5wdXQgaWQ9XCJ7ezo6JGlkfX1cIiBjbGFzcz1cIm1zLUNob2ljZUZpZWxkLWlucHV0XCIgdHlwZT1cInt7dWlmVHlwZX19XCIgdmFsdWU9XCJ7e3ZhbHVlfX1cIiAnICtcbiAgICAgICAgICAgICduZy1tb2RlbD1cIm5nTW9kZWxcIiBuZy10cnVlLXZhbHVlPVwie3tuZ1RydWVWYWx1ZX19XCIgbmctZmFsc2UtdmFsdWU9XCJ7e25nRmFsc2VWYWx1ZX19XCIgLz4nICtcbiAgICAgICAgICAgICc8bGFiZWwgZm9yPVwie3s6OiRpZH19XCIgY2xhc3M9XCJtcy1DaG9pY2VGaWVsZC1maWVsZFwiPjxzcGFuIGNsYXNzPVwibXMtTGFiZWxcIiBuZy10cmFuc2NsdWRlPjwvc3Bhbj48L2xhYmVsPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMucmVxdWlyZSA9IFsndWlmQ2hvaWNlZmllbGRPcHRpb24nLCAnXj91aWZDaG9pY2VmaWVsZEdyb3VwJ107XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBuZ0ZhbHNlVmFsdWU6ICdAJyxcbiAgICAgICAgICAgIG5nTW9kZWw6ICc9JyxcbiAgICAgICAgICAgIG5nVHJ1ZVZhbHVlOiAnQCcsXG4gICAgICAgICAgICB1aWZUeXBlOiAnQCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0AnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IENob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlcjtcbiAgICB9XG4gICAgQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKHRlbXBsYXRlRWxlbWVudCwgdGVtcGxhdGVBdHRyaWJ1dGVzLCB0cmFuc2NsdWRlKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRlbXBsYXRlRWxlbWVudC5maW5kKCdpbnB1dCcpO1xuICAgICAgICBpZiAoISgnbmdNb2RlbCcgaW4gdGVtcGxhdGVBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgaW5wdXQucmVtb3ZlQXR0cignbmctbW9kZWwnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlOiB0aGlzLnByZUxpbmtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlLnByb3RvdHlwZS5wcmVMaW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBjdHJscywgdHJhbnNjbHVkZSkge1xuICAgICAgICB2YXIgY2hvaWNlZmllbGRPcHRpb25Db250cm9sbGVyID0gY3RybHNbMF07XG4gICAgICAgIHZhciBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlciA9IGN0cmxzWzFdO1xuICAgICAgICBzY29wZS4kd2F0Y2goJ3VpZlR5cGUnLCBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoY2hvaWNlZmllbGRUeXBlRW51bV8xLkNob2ljZWZpZWxkVHlwZVtuZXdWYWx1ZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNob2ljZWZpZWxkT3B0aW9uQ29udHJvbGxlci4kbG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jaG9pY2VmaWVsZCAtIFwiJyArXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICsgJ1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB1aWZUeXBlLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1N1cHBvcnRlZCBvcHRpb25zIGFyZSBsaXN0ZWQgaGVyZTogJyArXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbmdPZmZpY2VVSUZhYnJpYy9uZy1vZmZpY2V1aWZhYnJpYy9ibG9iL21hc3Rlci9zcmMvY29tcG9uZW50cy9jaG9pY2VmaWVsZC9jaG9pY2VmaWVsZFR5cGVFbnVtLnRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZCA9IChjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5nZXRWaWV3VmFsdWUoKSA9PT0gYXR0cnMudmFsdWUpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5maW5kKCdpbnB1dCcpLnByb3AoJ2NoZWNrZWQnLCBjaGVja2VkKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5hZGRSZW5kZXIocmVuZGVyKTtcbiAgICAgICAgICAgIGF0dHJzLiRvYnNlcnZlKCd2YWx1ZScsIHJlbmRlcik7XG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAub24oJyRkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLnJlbW92ZVJlbmRlcihyZW5kZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRpc2FibGVkID0gJ2Rpc2FibGVkJyBpbiBhdHRycztcbiAgICAgICAgdmFyIHBhcmVudFNjb3BlID0gc2NvcGUuJHBhcmVudC4kcGFyZW50O1xuICAgICAgICBkaXNhYmxlZCA9IGRpc2FibGVkIHx8IChwYXJlbnRTY29wZSAhPSBudWxsICYmIHBhcmVudFNjb3BlLmRpc2FibGVkKTtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQuZmluZCgnaW5wdXQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRWxlbWVudFxuICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5zZXRWaWV3VmFsdWUoYXR0cnMudmFsdWUsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hvaWNlZmllbGRPcHRpb25EaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5DaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZSA9IENob2ljZWZpZWxkT3B0aW9uRGlyZWN0aXZlO1xudmFyIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlcigkZWxlbWVudCwgJHNjb3BlKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcbiAgICAgICAgdGhpcy4kc2NvcGUgPSAkc2NvcGU7XG4gICAgICAgIHRoaXMucmVuZGVyRm5zID0gW107XG4gICAgfVxuICAgIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUubmdNb2RlbC4kcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLnByb3RvdHlwZS5hZGRSZW5kZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJGbnMucHVzaChmbik7XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlUmVuZGVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMucmVuZGVyRm5zLnNwbGljZSh0aGlzLnJlbmRlckZucy5pbmRleE9mKGZuKSk7XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Vmlld1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBldmVudFR5cGUpIHtcbiAgICAgICAgdGhpcy4kc2NvcGUubmdNb2RlbC4kc2V0Vmlld1ZhbHVlKHZhbHVlLCBldmVudFR5cGUpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH07XG4gICAgQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXIucHJvdG90eXBlLmdldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5uZ01vZGVsICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLiRzY29wZS5uZ01vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5uZ01vZGVsLiR2aWV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZW5kZXJGbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRm5zW2ldKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLiRpbmplY3QgPSBbJyRlbGVtZW50JywgJyRzY29wZSddO1xuICAgIHJldHVybiBDaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlcjtcbn0pKCk7XG5leHBvcnRzLkNob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyID0gQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXI7XG52YXIgQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtQ2hvaWNlRmllbGRHcm91cFwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtcy1DaG9pY2VGaWVsZEdyb3VwLXRpdGxlXCI+JyArXG4gICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwibXMtTGFiZWwgaXMtcmVxdWlyZWRcIj5QaWNrIG9uZTwvbGFiZWw+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPG5nLXRyYW5zY2x1ZGUgLz4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSBbJ3VpZkNob2ljZWZpZWxkR3JvdXAnLCAnP25nTW9kZWwnXTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gQ2hvaWNlZmllbGRHcm91cENvbnRyb2xsZXI7XG4gICAgfVxuICAgIENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKHRlbXBsYXRlRWxlbWVudCwgdGVtcGxhdGVBdHRyaWJ1dGVzLCB0cmFuc2NsdWRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmU6IHRoaXMucHJlTGlua1xuICAgICAgICB9O1xuICAgIH07XG4gICAgQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZS5wcm90b3R5cGUucHJlTGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBpbnN0YW5jZUF0dHJpYnV0ZXMsIGN0cmxzKSB7XG4gICAgICAgIHZhciBjaG9pY2VmaWVsZEdyb3VwQ29udHJvbGxlciA9IGN0cmxzWzBdO1xuICAgICAgICB2YXIgbW9kZWxDb250cm9sbGVyID0gY3RybHNbMV07XG4gICAgICAgIHNjb3BlLm5nTW9kZWwgPSBtb2RlbENvbnRyb2xsZXI7XG4gICAgICAgIGNob2ljZWZpZWxkR3JvdXBDb250cm9sbGVyLmluaXQoKTtcbiAgICAgICAgc2NvcGUuZGlzYWJsZWQgPSAnZGlzYWJsZWQnIGluIGluc3RhbmNlQXR0cmlidXRlcztcbiAgICB9O1xuICAgIHJldHVybiBDaG9pY2VmaWVsZEdyb3VwRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ2hvaWNlZmllbGRHcm91cERpcmVjdGl2ZSA9IENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmU7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jaG9pY2VmaWVsZCcsIFtcbiAgICAnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cydcbl0pXG4gICAgLmRpcmVjdGl2ZSgndWlmQ2hvaWNlZmllbGRPcHRpb24nLCBDaG9pY2VmaWVsZE9wdGlvbkRpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmQ2hvaWNlZmllbGRHcm91cCcsIENob2ljZWZpZWxkR3JvdXBEaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9jaG9pY2VmaWVsZC9jaG9pY2VmaWVsZERpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbihmdW5jdGlvbiAoQ2hvaWNlZmllbGRUeXBlKSB7XG4gICAgQ2hvaWNlZmllbGRUeXBlW0Nob2ljZWZpZWxkVHlwZVtcInJhZGlvXCJdID0gMF0gPSBcInJhZGlvXCI7XG4gICAgQ2hvaWNlZmllbGRUeXBlW0Nob2ljZWZpZWxkVHlwZVtcImNoZWNrYm94XCJdID0gMV0gPSBcImNoZWNrYm94XCI7XG59KShleHBvcnRzLkNob2ljZWZpZWxkVHlwZSB8fCAoZXhwb3J0cy5DaG9pY2VmaWVsZFR5cGUgPSB7fSkpO1xudmFyIENob2ljZWZpZWxkVHlwZSA9IGV4cG9ydHMuQ2hvaWNlZmllbGRUeXBlO1xuO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL2Nob2ljZWZpZWxkL2Nob2ljZWZpZWxkVHlwZUVudW0udHNcbiAqKiBtb2R1bGUgaWQgPSA4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgTWVudUl0ZW1UeXBlcztcbihmdW5jdGlvbiAoTWVudUl0ZW1UeXBlcykge1xuICAgIE1lbnVJdGVtVHlwZXNbTWVudUl0ZW1UeXBlc1tcImxpbmtcIl0gPSAwXSA9IFwibGlua1wiO1xuICAgIE1lbnVJdGVtVHlwZXNbTWVudUl0ZW1UeXBlc1tcImRpdmlkZXJcIl0gPSAxXSA9IFwiZGl2aWRlclwiO1xuICAgIE1lbnVJdGVtVHlwZXNbTWVudUl0ZW1UeXBlc1tcImhlYWRlclwiXSA9IDJdID0gXCJoZWFkZXJcIjtcbiAgICBNZW51SXRlbVR5cGVzW01lbnVJdGVtVHlwZXNbXCJzdWJNZW51XCJdID0gM10gPSBcInN1Yk1lbnVcIjtcbn0pKE1lbnVJdGVtVHlwZXMgfHwgKE1lbnVJdGVtVHlwZXMgPSB7fSkpO1xuZXhwb3J0cy5jb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmVOYW1lID0gJ3VpZkNvbnRleHR1YWxNZW51SXRlbSc7XG5leHBvcnRzLmNvbnRleHR1YWxNZW51RGlyZWN0aXZlTmFtZSA9ICd1aWZDb250ZXh0dWFsTWVudSc7XG52YXIgQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmUoJGxvZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLiRsb2cgPSAkbG9nO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSAnXnVpZkNvbnRleHR1YWxNZW51JztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlcjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IGZ1bmN0aW9uICgkZWxlbWVudCwgJGF0dHJzKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9ICRhdHRycy51aWZUeXBlO1xuICAgICAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRlbXBsYXRlVHlwZXNbTWVudUl0ZW1UeXBlcy5saW5rXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNZW51SXRlbVR5cGVzW3R5cGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy4kbG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jb250ZXh0dWFsbWVudSAtIHVuc3VwcG9ydGVkIG1lbnUgdHlwZTpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ3RoZSB0eXBlIFxcJycgKyB0eXBlICsgJ1xcJyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5nLU9mZmljZSBVSSBGYWJyaWMgYXMgdmFsaWQgdHlwZSBmb3IgY29udGV4dCBtZW51LicgK1xuICAgICAgICAgICAgICAgICAgICAnU3VwcG9ydGVkIHR5cGVzIGNhbiBiZSBmb3VuZCB1bmRlciBNZW51SXRlbVR5cGVzIGVudW0gaGVyZTpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9uZ09mZmljZVVJRmFicmljL25nLW9mZmljZXVpZmFicmljL2Jsb2IvbWFzdGVyL3NyYy9jb21wb25lbnRzL2NvbnRleHR1YWxtZW51L2NvbnRleHR1YWxNZW51LnRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMudGVtcGxhdGVUeXBlc1tNZW51SXRlbVR5cGVzW3R5cGVdXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6ICc9dWlmSXNEaXNhYmxlZCcsXG4gICAgICAgICAgICBpc1NlbGVjdGVkOiAnPXVpZklzU2VsZWN0ZWQnLFxuICAgICAgICAgICAgb25DbGljazogJyZ1aWZDbGljaycsXG4gICAgICAgICAgICB0ZXh0OiAnPXVpZlRleHQnLFxuICAgICAgICAgICAgdHlwZTogJ0B1aWZUeXBlJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZXMgPSB7fTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGVzW01lbnVJdGVtVHlwZXMuc3ViTWVudV0gPVxuICAgICAgICAgICAgXCI8bGkgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51LWl0ZW1cXFwiPlxcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtbGluayBtcy1Db250ZXh0dWFsTWVudS1saW5rLS1oYXNNZW51XFxcIlxcbiAgICAgICAgICAgICAgICBuZy1jbGFzcz1cXFwieydpcy1zZWxlY3RlZCc6IGlzU2VsZWN0ZWQsICdpcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWR9XFxcIiBuZy1jbGljaz1cXFwic2VsZWN0SXRlbSgpXFxcIiBocmVmPnt7dGV4dH19PC9hPlxcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtc3ViTWVudUljb24gbXMtSWNvbiBtcy1JY29uLS1jaGV2cm9uUmlnaHRcXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGVudFxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPC9saT5cIjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGVzW01lbnVJdGVtVHlwZXMubGlua10gPVxuICAgICAgICAgICAgXCI8bGkgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51LWl0ZW1cXFwiPlxcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cXFwibXMtQ29udGV4dHVhbE1lbnUtbGlua1xcXCIgbmctY2xhc3M9XFxcInsnaXMtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkLCAnaXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkfVxcXCJcXG4gICAgICAgICAgICAgICAgbmctY2xpY2s9XFxcInNlbGVjdEl0ZW0oKVxcXCIgaHJlZj57e3RleHR9fTwvYT5cXG4gICAgICAgICAgICA8L2xpPlwiO1xuICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZXNbTWVudUl0ZW1UeXBlcy5oZWFkZXJdID0gXCI8bGkgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51LWl0ZW0gbXMtQ29udGV4dHVhbE1lbnUtaXRlbS0taGVhZGVyXFxcIj57e3RleHR9fTwvbGk+XCI7XG4gICAgICAgIHRoaXMudGVtcGxhdGVUeXBlc1tNZW51SXRlbVR5cGVzLmRpdmlkZXJdID0gXCI8bGkgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51LWl0ZW0gbXMtQ29udGV4dHVhbE1lbnUtaXRlbS0tZGl2aWRlclxcXCI+PC9saT5cIjtcbiAgICB9XG4gICAgQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoJGxvZykgeyByZXR1cm4gbmV3IENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZSgkbG9nKTsgfTtcbiAgICAgICAgZGlyZWN0aXZlLiRpbmplY3QgPSBbJyRsb2cnXTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsIGNvbnRleHR1YWxNZW51Q29udHJvbGxlciwgJHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiAkc2NvcGUuaXNEaXNhYmxlZCAhPT0gJ2Jvb2xlYW4nICYmICRzY29wZS5pc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci4kbG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jb250ZXh0dWFsbWVudSAtICcgK1xuICAgICAgICAgICAgICAgICdpbnZhbGlkIGF0dHJpYnV0ZSB0eXBlOiBcXCd1aWYtaXMtZGlzYWJsZWRcXCcuXFxuJyArXG4gICAgICAgICAgICAgICAgJ1RoZSB0eXBlIFxcJycgKyB0eXBlb2YgJHNjb3BlLmlzRGlzYWJsZWQgKyAnXFwnIGlzIG5vdCBzdXBwb3J0ZWQgYXMgdmFsaWQgdHlwZSBmb3IgXFwndWlmLWlzLWRpc2FibGVkXFwnIGF0dHJpYnV0ZSBmb3IgJyArXG4gICAgICAgICAgICAgICAgJzx1aWYtY29udGV4dHVhbC1tZW51LWl0ZW0gLz4uIFRoZSB2YWxpZCB0eXBlIGlzIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAkc2NvcGUuaXNTZWxlY3RlZCAhPT0gJ2Jvb2xlYW4nICYmICRzY29wZS5pc1NlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci4kbG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5jb250ZXh0dWFsbWVudSAtICcgK1xuICAgICAgICAgICAgICAgICdpbnZhbGlkIGF0dHJpYnV0ZSB0eXBlOiBcXCd1aWYtaXMtc2VsZWN0ZWRcXCcuXFxuJyArXG4gICAgICAgICAgICAgICAgJ1RoZSB0eXBlIFxcJycgKyB0eXBlb2YgJHNjb3BlLmlzU2VsZWN0ZWQgKyAnXFwnIGlzIG5vdCBzdXBwb3J0ZWQgYXMgdmFsaWQgdHlwZSBmb3IgXFwndWlmLWlzLXNlbGVjdGVkXFwnIGF0dHJpYnV0ZSBmb3IgJyArXG4gICAgICAgICAgICAgICAgJzx1aWYtY29udGV4dHVhbC1tZW51LWl0ZW0gLz4uIFRoZSB2YWxpZCB0eXBlIGlzIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5maW5kKCdkaXYnKS5yZXBsYWNlV2l0aChjbG9uZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkc2NvcGUuc2VsZWN0SXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29udGV4dHVhbE1lbnVDb250cm9sbGVyLmlzTXVsdGlTZWxlY3Rpb25NZW51KCkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIub25EZXNlbGVjdEl0ZW1zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmcuaXNVbmRlZmluZWQoJHNjb3BlLmlzU2VsZWN0ZWQpICYmICEkc2NvcGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICRzY29wZS5pc1NlbGVjdGVkID0gISRzY29wZS5pc1NlbGVjdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5pc1Jvb3RNZW51KCkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIub25DbG9zZU1lbnVzKCRzY29wZS4kaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUuaGFzQ2hpbGRNZW51KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5vbkNsb3NlTWVudXMobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHR1YWxNZW51Q29udHJvbGxlci5vbkRlc2VsZWN0SXRlbXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIub25DbG9zZU1lbnVzKCRzY29wZS4kaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkc2NvcGUuaGFzQ2hpbGRNZW51KSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmNoaWxkTWVudUN0cmwub3Blbk1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbmcuaXNVbmRlZmluZWQoJHNjb3BlLm9uQ2xpY2spKSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLm9uQ2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJHNjb3BlLiRvbigndWlmLW1lbnUtZGVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkc2NvcGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgJHNjb3BlLiRvbigndWlmLW1lbnUtY2xvc2UnLCBmdW5jdGlvbiAoZXZlbnQsIG1lbnVJdGVtSWQpIHtcbiAgICAgICAgICAgIGlmICgkc2NvcGUuaGFzQ2hpbGRNZW51ICYmICRzY29wZS4kaWQgIT09IG1lbnVJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUuY2hpbGRNZW51Q3RybC5jbG9zZU1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlID0gQ29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlO1xudmFyIENvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXIoJHNjb3BlLCAkZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRzY29wZSA9ICRzY29wZTtcbiAgICAgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50O1xuICAgIH1cbiAgICBDb250ZXh0dWFsTWVudUl0ZW1Db250cm9sbGVyLnByb3RvdHlwZS5zZXRDaGlsZE1lbnUgPSBmdW5jdGlvbiAoY2hpbGRNZW51Q3RybCkge1xuICAgICAgICB0aGlzLiRzY29wZS5oYXNDaGlsZE1lbnUgPSB0cnVlO1xuICAgICAgICB0aGlzLiRzY29wZS5jaGlsZE1lbnVDdHJsID0gY2hpbGRNZW51Q3RybDtcbiAgICB9O1xuICAgIENvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXIuJGluamVjdCA9IFsnJHNjb3BlJywgJyRlbGVtZW50J107XG4gICAgcmV0dXJuIENvbnRleHR1YWxNZW51SXRlbUNvbnRyb2xsZXI7XG59KSgpO1xuZXhwb3J0cy5Db250ZXh0dWFsTWVudUl0ZW1Db250cm9sbGVyID0gQ29udGV4dHVhbE1lbnVJdGVtQ29udHJvbGxlcjtcbnZhciBDb250ZXh0dWFsTWVudURpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMucmVxdWlyZSA9IGV4cG9ydHMuY29udGV4dHVhbE1lbnVEaXJlY3RpdmVOYW1lO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gXCI8dWwgY2xhc3M9XFxcIm1zLUNvbnRleHR1YWxNZW51XFxcIiBuZy10cmFuc2NsdWRlPjwvdWw+XCI7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IENvbnRleHR1YWxNZW51Q29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIGlzT3BlbjogJz11aWZJc09wZW4nLFxuICAgICAgICAgICAgbXVsdGlzZWxlY3Q6ICdAdWlmTXVsdGlzZWxlY3QnXG4gICAgICAgIH07XG4gICAgfVxuICAgIENvbnRleHR1YWxNZW51RGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29udGV4dHVhbE1lbnVEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIENvbnRleHR1YWxNZW51RGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgY29udGV4dHVhbE1lbnVDb250cm9sbGVyKSB7XG4gICAgICAgIHZhciBwYXJlbnRNZW51SXRlbUN0cmwgPSAkZWxlbWVudC5jb250cm9sbGVyKGV4cG9ydHMuY29udGV4dHVhbE1lbnVJdGVtRGlyZWN0aXZlTmFtZSk7XG4gICAgICAgIGlmICghbmcuaXNVbmRlZmluZWQocGFyZW50TWVudUl0ZW1DdHJsKSkge1xuICAgICAgICAgICAgcGFyZW50TWVudUl0ZW1DdHJsLnNldENoaWxkTWVudShjb250ZXh0dWFsTWVudUNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmcuaXNVbmRlZmluZWQoJHNjb3BlLm11bHRpc2VsZWN0KSAmJiAkc2NvcGUubXVsdGlzZWxlY3QudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5hZGRDbGFzcygnbXMtQ29udGV4dHVhbE1lbnUtLW11bHRpc2VsZWN0Jyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0dWFsTWVudURpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLkNvbnRleHR1YWxNZW51RGlyZWN0aXZlID0gQ29udGV4dHVhbE1lbnVEaXJlY3RpdmU7XG52YXIgQ29udGV4dHVhbE1lbnVDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIoJHNjb3BlLCAkYW5pbWF0ZSwgJGVsZW1lbnQsICRsb2cpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy4kc2NvcGUgPSAkc2NvcGU7XG4gICAgICAgIHRoaXMuJGFuaW1hdGUgPSAkYW5pbWF0ZTtcbiAgICAgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50O1xuICAgICAgICB0aGlzLiRsb2cgPSAkbG9nO1xuICAgICAgICB0aGlzLmlzT3BlbkNsYXNzTmFtZSA9ICdpcy1vcGVuJztcbiAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKCRlbGVtZW50LmNvbnRyb2xsZXIoZXhwb3J0cy5jb250ZXh0dWFsTWVudUl0ZW1EaXJlY3RpdmVOYW1lKSkpIHtcbiAgICAgICAgICAgICRzY29wZS5pc1Jvb3RNZW51ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAkc2NvcGUuJHdhdGNoKCdpc09wZW4nLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgIT09ICdib29sZWFuJyAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMuY29udGV4dHVhbG1lbnUgLSBpbnZhbGlkIGF0dHJpYnV0ZSB0eXBlOiBcXCd1aWYtaXMtb3BlblxcJy5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSB0eXBlIFxcJycgKyB0eXBlb2YgbmV3VmFsdWUgKyAnXFwnIGlzIG5vdCBzdXBwb3J0ZWQgYXMgdmFsaWQgdHlwZSBmb3IgXFwndWlmLWlzLW9wZW5cXCcgYXR0cmlidXRlIGZvciAnICtcbiAgICAgICAgICAgICAgICAgICAgJzx1aWYtY29udGV4dHVhbC1tZW51IC8+LiBUaGUgdmFsaWQgdHlwZSBpcyBib29sZWFuLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGFuaW1hdGVbbmV3VmFsdWUgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJGVsZW1lbnQsIF90aGlzLmlzT3BlbkNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLm9uRGVzZWxlY3RJdGVtcyA9IGZ1bmN0aW9uIChkZXNlbGVjdFBhcmVudE1lbnVzKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoJ3VpZi1tZW51LWRlc2VsZWN0Jyk7XG4gICAgICAgIGlmIChkZXNlbGVjdFBhcmVudE1lbnVzKSB7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdCgndWlmLW1lbnUtZGVzZWxlY3QnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVDb250cm9sbGVyLnByb3RvdHlwZS5vbkNsb3NlTWVudXMgPSBmdW5jdGlvbiAobWVudUl0ZW1Ub1NraXAsIGNsb3NlUm9vdE1lbnUpIHtcbiAgICAgICAgaWYgKGNsb3NlUm9vdE1lbnUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KCd1aWYtbWVudS1jbG9zZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdCgndWlmLW1lbnUtY2xvc2UnLCBtZW51SXRlbVRvU2tpcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnRleHR1YWxNZW51Q29udHJvbGxlci5wcm90b3R5cGUub3Blbk1lbnUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlLmlzT3BlbiA9IHRydWU7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLmNsb3NlTWVudSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy4kc2NvcGUuaXNPcGVuID0gZmFsc2U7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIucHJvdG90eXBlLmlzUm9vdE1lbnUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5pc1Jvb3RNZW51O1xuICAgIH07XG4gICAgQ29udGV4dHVhbE1lbnVDb250cm9sbGVyLnByb3RvdHlwZS5pc011bHRpU2VsZWN0aW9uTWVudSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKHRoaXMuJHNjb3BlLm11bHRpc2VsZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5tdWx0aXNlbGVjdC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfTtcbiAgICBDb250ZXh0dWFsTWVudUNvbnRyb2xsZXIuJGluamVjdCA9IFsnJHNjb3BlJywgJyRhbmltYXRlJywgJyRlbGVtZW50JywgJyRsb2cnXTtcbiAgICByZXR1cm4gQ29udGV4dHVhbE1lbnVDb250cm9sbGVyO1xufSkoKTtcbmV4cG9ydHMuQ29udGV4dHVhbE1lbnVDb250cm9sbGVyID0gQ29udGV4dHVhbE1lbnVDb250cm9sbGVyO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMuY29udGV4dHVhbG1lbnUnLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXSlcbiAgICAuZGlyZWN0aXZlKGV4cG9ydHMuY29udGV4dHVhbE1lbnVEaXJlY3RpdmVOYW1lLCBDb250ZXh0dWFsTWVudURpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZShleHBvcnRzLmNvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZU5hbWUsIENvbnRleHR1YWxNZW51SXRlbURpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL2NvbnRleHR1YWxtZW51L2NvbnRleHR1YWxNZW51LnRzXG4gKiogbW9kdWxlIGlkID0gOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIERyb3Bkb3duT3B0aW9uRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8bGkgY2xhc3M9XCJtcy1Ecm9wZG93bi1pdGVtXCIgbmctdHJhbnNjbHVkZT48L2xpPic7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMucmVxdWlyZSA9ICdedWlmRHJvcGRvd24nO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgIH1cbiAgICBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9uRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZUVsZW1lbnQsIHRlbXBsYXRlQXR0cmlidXRlcywgdHJhbnNjbHVkZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zdDogdGhpcy5wb3N0TGlua1xuICAgICAgICB9O1xuICAgIH07XG4gICAgRHJvcGRvd25PcHRpb25EaXJlY3RpdmUucHJvdG90eXBlLnBvc3RMaW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBkcm9wZG93bkNvbnRyb2xsZXIsIHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgaWYgKCFkcm9wZG93bkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRocm93ICdEcm9wZG93biBjb250cm9sbGVyIG5vdCBmb3VuZCEnO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRWxlbWVudFxuICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkcm9wZG93bkNvbnRyb2xsZXIuc2V0Vmlld1ZhbHVlKGluc3RhbmNlRWxlbWVudC5maW5kKCdzcGFuJykuaHRtbCgpLCBhdHRycy52YWx1ZSwgZXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIERyb3Bkb3duT3B0aW9uRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuRHJvcGRvd25PcHRpb25EaXJlY3RpdmUgPSBEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZTtcbnZhciBEcm9wZG93bkNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERyb3Bkb3duQ29udHJvbGxlcigkZWxlbWVudCwgJHNjb3BlKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcbiAgICAgICAgdGhpcy4kc2NvcGUgPSAkc2NvcGU7XG4gICAgfVxuICAgIERyb3Bkb3duQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLiRzY29wZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuJHNjb3BlLmlzT3BlbiA9ICFzZWxmLiRzY29wZS5pc09wZW47XG4gICAgICAgICAgICAgICAgc2VsZi4kc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgICAgICAgICAgdmFyIGRyb3Bkb3duV2lkdGggPSBhbmd1bGFyLmVsZW1lbnQodGhpcy5xdWVyeVNlbGVjdG9yKCcubXMtRHJvcGRvd24nKSlbMF0uY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KHRoaXMucXVlcnlTZWxlY3RvcignLm1zLURyb3Bkb3duLWl0ZW1zJykpWzBdLnN0eWxlLndpZHRoID0gZHJvcGRvd25XaWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUubmdNb2RlbC4kcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gc2VsZi4kZWxlbWVudC5maW5kKCdsaScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gb3B0aW9uLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzZWxmLiRzY29wZS5uZ01vZGVsLiR2aWV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuJHNjb3BlLnNlbGVjdGVkVGl0bGUgPSBhbmd1bGFyLmVsZW1lbnQob3B0aW9uKS5maW5kKCdzcGFuJykuaHRtbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcm9wZG93bkNvbnRyb2xsZXIucHJvdG90eXBlLnNldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uICh0aXRsZSwgdmFsdWUsIGV2ZW50VHlwZSkge1xuICAgICAgICB0aGlzLiRzY29wZS5zZWxlY3RlZFRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuJHNjb3BlLm5nTW9kZWwuJHNldFZpZXdWYWx1ZSh2YWx1ZSwgZXZlbnRUeXBlKTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0Vmlld1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuJHNjb3BlLm5nTW9kZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLm5nTW9kZWwuJHZpZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25Db250cm9sbGVyLiRpbmplY3QgPSBbJyRlbGVtZW50JywgJyRzY29wZSddO1xuICAgIHJldHVybiBEcm9wZG93bkNvbnRyb2xsZXI7XG59KSgpO1xuZXhwb3J0cy5Ecm9wZG93bkNvbnRyb2xsZXIgPSBEcm9wZG93bkNvbnRyb2xsZXI7XG52YXIgRHJvcGRvd25EaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERyb3Bkb3duRGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxkaXYgbmctY2xpY2s9XCJkcm9wZG93bkNsaWNrXCIgJyArXG4gICAgICAgICAgICAnbmctY2xhc3M9XCJ7XFwnbXMtRHJvcGRvd25cXCcgOiB0cnVlLCBcXCdpcy1vcGVuXFwnOiBpc09wZW4sIFxcJ2lzLWRpc2FibGVkXFwnOiBkaXNhYmxlZH1cIiB0YWJpbmRleD1cIjBcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cIm1zLURyb3Bkb3duLWNhcmV0RG93biBtcy1JY29uIG1zLUljb24tLWNhcmV0RG93blwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1zLURyb3Bkb3duLXRpdGxlXCI+e3tzZWxlY3RlZFRpdGxlfX08L3NwYW4+PHVsIGNsYXNzPVwibXMtRHJvcGRvd24taXRlbXNcIj48bmctdHJhbnNjbHVkZT48L25nLXRyYW5zY2x1ZGU+PC91bD48L2Rpdj4nO1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcXVpcmUgPSBbJ3VpZkRyb3Bkb3duJywgJz9uZ01vZGVsJ107XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7fTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gRHJvcGRvd25Db250cm9sbGVyO1xuICAgIH1cbiAgICBEcm9wZG93bkRpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERyb3Bkb3duRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBEcm9wZG93bkRpcmVjdGl2ZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZUVsZW1lbnQsIHRlbXBsYXRlQXR0cmlidXRlcywgdHJhbnNjbHVkZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlOiB0aGlzLnByZUxpbmtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIERyb3Bkb3duRGlyZWN0aXZlLnByb3RvdHlwZS5wcmVMaW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGluc3RhbmNlQXR0cmlidXRlcywgY3RybHMpIHtcbiAgICAgICAgdmFyIGRyb3Bkb3duQ29udHJvbGxlciA9IGN0cmxzWzBdO1xuICAgICAgICB2YXIgbW9kZWxDb250cm9sbGVyID0gY3RybHNbMV07XG4gICAgICAgIHNjb3BlLm5nTW9kZWwgPSBtb2RlbENvbnRyb2xsZXI7XG4gICAgICAgIGRyb3Bkb3duQ29udHJvbGxlci5pbml0KCk7XG4gICAgICAgIHNjb3BlLmRpc2FibGVkID0gJ2Rpc2FibGVkJyBpbiBpbnN0YW5jZUF0dHJpYnV0ZXM7XG4gICAgfTtcbiAgICByZXR1cm4gRHJvcGRvd25EaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5Ecm9wZG93bkRpcmVjdGl2ZSA9IERyb3Bkb3duRGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMuZHJvcGRvd24nLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZk9wdGlvbicsIERyb3Bkb3duT3B0aW9uRGlyZWN0aXZlLmZhY3RvcnkoKSlcbiAgICAuZGlyZWN0aXZlKCd1aWZEcm9wZG93bicsIERyb3Bkb3duRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd25EaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAxMFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIGljb25FbnVtXzEgPSByZXF1aXJlKCcuL2ljb25FbnVtJyk7XG52YXIgSWNvbkNvbnRyb2xsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEljb25Db250cm9sbGVyKCRsb2cpIHtcbiAgICAgICAgdGhpcy4kbG9nID0gJGxvZztcbiAgICB9XG4gICAgSWNvbkNvbnRyb2xsZXIuJGluamVjdCA9IFsnJGxvZyddO1xuICAgIHJldHVybiBJY29uQ29udHJvbGxlcjtcbn0pKCk7XG52YXIgSWNvbkRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSWNvbkRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8aSBjbGFzcz1cIm1zLUljb24gbXMtSWNvbi0te3t1aWZUeXBlfX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JztcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIHVpZlR5cGU6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBJY29uQ29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyQXMgPSAnaWNvbic7XG4gICAgfVxuICAgIEljb25EaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJY29uRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBJY29uRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVyKSB7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgndWlmVHlwZScsIGZ1bmN0aW9uIChuZXdWYWx1bGUsIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaWNvbkVudW1fMS5JY29uRW51bVtuZXdWYWx1bGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRsb2cuZXJyb3IoJ0Vycm9yIFtuZ09mZmljZVVpRmFicmljXSBvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmljb24gLSBVbnN1cHBvcnRlZCBpY29uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBpY29uIChcXCcnICsgc2NvcGUudWlmVHlwZSArICdcXCcpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE9mZmljZSBVSSBGYWJyaWMuICcgK1xuICAgICAgICAgICAgICAgICAgICAnU3VwcG9ydGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBoZXJlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9uZ09mZmljZVVJRmFicmljL25nLW9mZmljZXVpZmFicmljL2Jsb2IvbWFzdGVyL3NyYy9jb21wb25lbnRzL2ljb24vaWNvbkVudW0udHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICA7XG4gICAgcmV0dXJuIEljb25EaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5JY29uRGlyZWN0aXZlID0gSWNvbkRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLmljb24nLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZkljb24nLCBJY29uRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvaWNvbi9pY29uRGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gMTFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbihmdW5jdGlvbiAoSWNvbkVudW0pIHtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFsZXJ0XCJdID0gMF0gPSBcImFsZXJ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhbGVydDJcIl0gPSAxXSA9IFwiYWxlcnQyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhbGVydE91dGxpbmVcIl0gPSAyXSA9IFwiYWxlcnRPdXRsaW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd0Rvd25cIl0gPSAzXSA9IFwiYXJyb3dEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd0Rvd24yXCJdID0gNF0gPSBcImFycm93RG93bjJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93RG93bkxlZnRcIl0gPSA1XSA9IFwiYXJyb3dEb3duTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dEb3duUmlnaHRcIl0gPSA2XSA9IFwiYXJyb3dEb3duUmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93TGVmdFwiXSA9IDddID0gXCJhcnJvd0xlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93UmlnaHRcIl0gPSA4XSA9IFwiYXJyb3dSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dVcFwiXSA9IDldID0gXCJhcnJvd1VwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhcnJvd1VwMlwiXSA9IDEwXSA9IFwiYXJyb3dVcDJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFycm93VXBMZWZ0XCJdID0gMTFdID0gXCJhcnJvd1VwTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYXJyb3dVcFJpZ2h0XCJdID0gMTJdID0gXCJhcnJvd1VwUmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImFzY2VuZGluZ1wiXSA9IDEzXSA9IFwiYXNjZW5kaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJhdFwiXSA9IDE0XSA9IFwiYXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImF0dGFjaG1lbnRcIl0gPSAxNV0gPSBcImF0dGFjaG1lbnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJhZ1wiXSA9IDE2XSA9IFwiYmFnXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJiYWxsb29uXCJdID0gMTddID0gXCJiYWxsb29uXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJiZWxsXCJdID0gMThdID0gXCJiZWxsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJib2FyZHNcIl0gPSAxOV0gPSBcImJvYXJkc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYm9sZFwiXSA9IDIwXSA9IFwiYm9sZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiYm9va21hcmtcIl0gPSAyMV0gPSBcImJvb2ttYXJrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJib29rc1wiXSA9IDIyXSA9IFwiYm9va3NcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImJyaWVmY2FzZVwiXSA9IDIzXSA9IFwiYnJpZWZjYXNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJidW5kbGVcIl0gPSAyNF0gPSBcImJ1bmRsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FrZVwiXSA9IDI1XSA9IFwiY2FrZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FsZW5kYXJcIl0gPSAyNl0gPSBcImNhbGVuZGFyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYWxlbmRhckRheVwiXSA9IDI3XSA9IFwiY2FsZW5kYXJEYXlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhbGVuZGFyUHVibGljXCJdID0gMjhdID0gXCJjYWxlbmRhclB1YmxpY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FsZW5kYXJXZWVrXCJdID0gMjldID0gXCJjYWxlbmRhcldlZWtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhbGVuZGFyV29ya1dlZWtcIl0gPSAzMF0gPSBcImNhbGVuZGFyV29ya1dlZWtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhbWVyYVwiXSA9IDMxXSA9IFwiY2FtZXJhXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJcIl0gPSAzMl0gPSBcImNhclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXREb3duXCJdID0gMzNdID0gXCJjYXJldERvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0RG93bkxlZnRcIl0gPSAzNF0gPSBcImNhcmV0RG93bkxlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0RG93bk91dGxpbmVcIl0gPSAzNV0gPSBcImNhcmV0RG93bk91dGxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0RG93blJpZ2h0XCJdID0gMzZdID0gXCJjYXJldERvd25SaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRMZWZ0XCJdID0gMzddID0gXCJjYXJldExlZnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0TGVmdE91dGxpbmVcIl0gPSAzOF0gPSBcImNhcmV0TGVmdE91dGxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0UmlnaHRcIl0gPSAzOV0gPSBcImNhcmV0UmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0UmlnaHRPdXRsaW5lXCJdID0gNDBdID0gXCJjYXJldFJpZ2h0T3V0bGluZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRVcFwiXSA9IDQxXSA9IFwiY2FyZXRVcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2FyZXRVcExlZnRcIl0gPSA0Ml0gPSBcImNhcmV0VXBMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJldFVwT3V0bGluZVwiXSA9IDQzXSA9IFwiY2FyZXRVcE91dGxpbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNhcmV0VXBSaWdodFwiXSA9IDQ0XSA9IFwiY2FyZXRVcFJpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXJ0XCJdID0gNDVdID0gXCJjYXJ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjYXRcIl0gPSA0Nl0gPSBcImNhdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hhcnRcIl0gPSA0N10gPSBcImNoYXJ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGF0XCJdID0gNDhdID0gXCJjaGF0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGF0QWRkXCJdID0gNDldID0gXCJjaGF0QWRkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGVja1wiXSA9IDUwXSA9IFwiY2hlY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZWNrYm94XCJdID0gNTFdID0gXCJjaGVja2JveFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hlY2tib3hDaGVja1wiXSA9IDUyXSA9IFwiY2hlY2tib3hDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hlY2tib3hFbXB0eVwiXSA9IDUzXSA9IFwiY2hlY2tib3hFbXB0eVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hlY2tib3hNaXhlZFwiXSA9IDU0XSA9IFwiY2hlY2tib3hNaXhlZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hlY2tQZW9wbGVcIl0gPSA1NV0gPSBcImNoZWNrUGVvcGxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uRG93blwiXSA9IDU2XSA9IFwiY2hldnJvbkRvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25MZWZ0XCJdID0gNTddID0gXCJjaGV2cm9uTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblJpZ2h0XCJdID0gNThdID0gXCJjaGV2cm9uUmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25zRG93blwiXSA9IDU5XSA9IFwiY2hldnJvbnNEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uc0xlZnRcIl0gPSA2MF0gPSBcImNoZXZyb25zTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvbnNSaWdodFwiXSA9IDYxXSA9IFwiY2hldnJvbnNSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvbnNVcFwiXSA9IDYyXSA9IFwiY2hldnJvbnNVcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaWNrRG93blwiXSA9IDYzXSA9IFwiY2hldnJvblRoaWNrRG93blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaWNrTGVmdFwiXSA9IDY0XSA9IFwiY2hldnJvblRoaWNrTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaWNrUmlnaHRcIl0gPSA2NV0gPSBcImNoZXZyb25UaGlja1JpZ2h0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpY2tVcFwiXSA9IDY2XSA9IFwiY2hldnJvblRoaWNrVXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNoZXZyb25UaGluRG93blwiXSA9IDY3XSA9IFwiY2hldnJvblRoaW5Eb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaGV2cm9uVGhpbkxlZnRcIl0gPSA2OF0gPSBcImNoZXZyb25UaGluTGVmdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaW5SaWdodFwiXSA9IDY5XSA9IFwiY2hldnJvblRoaW5SaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblRoaW5VcFwiXSA9IDcwXSA9IFwiY2hldnJvblRoaW5VcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2hldnJvblVwXCJdID0gNzFdID0gXCJjaGV2cm9uVXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZVwiXSA9IDcyXSA9IFwiY2lyY2xlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVCYWxsXCJdID0gNzNdID0gXCJjaXJjbGVCYWxsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVCYWxsb29uc1wiXSA9IDc0XSA9IFwiY2lyY2xlQmFsbG9vbnNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUNhclwiXSA9IDc1XSA9IFwiY2lyY2xlQ2FyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVDYXRcIl0gPSA3Nl0gPSBcImNpcmNsZUNhdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlQ29mZmVlXCJdID0gNzddID0gXCJjaXJjbGVDb2ZmZWVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZURvZ1wiXSA9IDc4XSA9IFwiY2lyY2xlRG9nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVFbXB0eVwiXSA9IDc5XSA9IFwiY2lyY2xlRW1wdHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUZpbGxcIl0gPSA4MF0gPSBcImNpcmNsZUZpbGxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNpcmNsZUZpbGxlZFwiXSA9IDgxXSA9IFwiY2lyY2xlRmlsbGVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVIYWxmRmlsbGVkXCJdID0gODJdID0gXCJjaXJjbGVIYWxmRmlsbGVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVJbmZvXCJdID0gODNdID0gXCJjaXJjbGVJbmZvXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVMaWdodG5pbmdcIl0gPSA4NF0gPSBcImNpcmNsZUxpZ2h0bmluZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlUGlsbFwiXSA9IDg1XSA9IFwiY2lyY2xlUGlsbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlUGxhbmVcIl0gPSA4Nl0gPSBcImNpcmNsZVBsYW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVQbHVzXCJdID0gODddID0gXCJjaXJjbGVQbHVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjaXJjbGVQb29kbGVcIl0gPSA4OF0gPSBcImNpcmNsZVBvb2RsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2lyY2xlVW5maWxsZWRcIl0gPSA4OV0gPSBcImNpcmNsZVVuZmlsbGVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjbGFzc05vdGVib29rXCJdID0gOTBdID0gXCJjbGFzc05vdGVib29rXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjbGFzc3Jvb21cIl0gPSA5MV0gPSBcImNsYXNzcm9vbVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY2xvY2tcIl0gPSA5Ml0gPSBcImNsb2NrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjbHV0dGVyXCJdID0gOTNdID0gXCJjbHV0dGVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjb2ZmZWVcIl0gPSA5NF0gPSBcImNvZmZlZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY29sbGFwc2VcIl0gPSA5NV0gPSBcImNvbGxhcHNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjb25mbGljdFwiXSA9IDk2XSA9IFwiY29uZmxpY3RcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNvbnRhY3RcIl0gPSA5N10gPSBcImNvbnRhY3RcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNvbnRhY3RGb3JtXCJdID0gOThdID0gXCJjb250YWN0Rm9ybVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY29udGFjdFB1YmxpY1wiXSA9IDk5XSA9IFwiY29udGFjdFB1YmxpY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiY29weVwiXSA9IDEwMF0gPSBcImNvcHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImNyZWRpdENhcmRcIl0gPSAxMDFdID0gXCJjcmVkaXRDYXJkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJjcmVkaXRDYXJkT3V0bGluZVwiXSA9IDEwMl0gPSBcImNyZWRpdENhcmRPdXRsaW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkYXNoYm9hcmRcIl0gPSAxMDNdID0gXCJkYXNoYm9hcmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRlc2NlbmRpbmdcIl0gPSAxMDRdID0gXCJkZXNjZW5kaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkZXNrdG9wXCJdID0gMTA1XSA9IFwiZGVza3RvcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZGV2aWNlV2lwZVwiXSA9IDEwNl0gPSBcImRldmljZVdpcGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRpYWxwYWRcIl0gPSAxMDddID0gXCJkaWFscGFkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkaXJlY3Rpb25zXCJdID0gMTA4XSA9IFwiZGlyZWN0aW9uc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG9jdW1lbnRcIl0gPSAxMDldID0gXCJkb2N1bWVudFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG9jdW1lbnRBZGRcIl0gPSAxMTBdID0gXCJkb2N1bWVudEFkZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG9jdW1lbnRGb3J3YXJkXCJdID0gMTExXSA9IFwiZG9jdW1lbnRGb3J3YXJkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudExhbmRzY2FwZVwiXSA9IDExMl0gPSBcImRvY3VtZW50TGFuZHNjYXBlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudFBERlwiXSA9IDExM10gPSBcImRvY3VtZW50UERGXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudFJlcGx5XCJdID0gMTE0XSA9IFwiZG9jdW1lbnRSZXBseVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG9jdW1lbnRzXCJdID0gMTE1XSA9IFwiZG9jdW1lbnRzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2N1bWVudFNlYXJjaFwiXSA9IDExNl0gPSBcImRvY3VtZW50U2VhcmNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb2dcIl0gPSAxMTddID0gXCJkb2dcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRvZ0FsdFwiXSA9IDExOF0gPSBcImRvZ0FsdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZG90XCJdID0gMTE5XSA9IFwiZG90XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkb3dubG9hZFwiXSA9IDEyMF0gPSBcImRvd25sb2FkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkcm1cIl0gPSAxMjFdID0gXCJkcm1cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImRyb3BcIl0gPSAxMjJdID0gXCJkcm9wXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJkcm9wZG93blwiXSA9IDEyM10gPSBcImRyb3Bkb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJlZGl0Qm94XCJdID0gMTI0XSA9IFwiZWRpdEJveFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZWxsaXBzaXNcIl0gPSAxMjVdID0gXCJlbGxpcHNpc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZW1iZWRcIl0gPSAxMjZdID0gXCJlbWJlZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZXZlbnRcIl0gPSAxMjddID0gXCJldmVudFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZXZlbnRDYW5jZWxcIl0gPSAxMjhdID0gXCJldmVudENhbmNlbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZXZlbnRJbmZvXCJdID0gMTI5XSA9IFwiZXZlbnRJbmZvXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJldmVudFJlY3VycmluZ1wiXSA9IDEzMF0gPSBcImV2ZW50UmVjdXJyaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJldmVudFNoYXJlXCJdID0gMTMxXSA9IFwiZXZlbnRTaGFyZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZXhjbGFtYXRpb25cIl0gPSAxMzJdID0gXCJleGNsYW1hdGlvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZXhwYW5kXCJdID0gMTMzXSA9IFwiZXhwYW5kXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJleWVcIl0gPSAxMzRdID0gXCJleWVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZhdm9yaXRlc1wiXSA9IDEzNV0gPSBcImZhdm9yaXRlc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmF4XCJdID0gMTM2XSA9IFwiZmF4XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaWVsZE1haWxcIl0gPSAxMzddID0gXCJmaWVsZE1haWxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpZWxkTnVtYmVyXCJdID0gMTM4XSA9IFwiZmllbGROdW1iZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpZWxkVGV4dFwiXSA9IDEzOV0gPSBcImZpZWxkVGV4dFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmllbGRUZXh0Qm94XCJdID0gMTQwXSA9IFwiZmllbGRUZXh0Qm94XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmaWxlRG9jdW1lbnRcIl0gPSAxNDFdID0gXCJmaWxlRG9jdW1lbnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpbGVJbWFnZVwiXSA9IDE0Ml0gPSBcImZpbGVJbWFnZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmlsZVBERlwiXSA9IDE0M10gPSBcImZpbGVQREZcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZpbHRlclwiXSA9IDE0NF0gPSBcImZpbHRlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmlsdGVyQ2xlYXJcIl0gPSAxNDVdID0gXCJmaWx0ZXJDbGVhclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmlyc3RBaWRcIl0gPSAxNDZdID0gXCJmaXJzdEFpZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZmxhZ1wiXSA9IDE0N10gPSBcImZsYWdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZvbGRlclwiXSA9IDE0OF0gPSBcImZvbGRlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9sZGVyTW92ZVwiXSA9IDE0OV0gPSBcImZvbGRlck1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZvbGRlclB1YmxpY1wiXSA9IDE1MF0gPSBcImZvbGRlclB1YmxpY1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9sZGVyU2VhcmNoXCJdID0gMTUxXSA9IFwiZm9sZGVyU2VhcmNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmb250Q29sb3JcIl0gPSAxNTJdID0gXCJmb250Q29sb3JcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZvbnREZWNyZWFzZVwiXSA9IDE1M10gPSBcImZvbnREZWNyZWFzZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZm9udEluY3JlYXNlXCJdID0gMTU0XSA9IFwiZm9udEluY3JlYXNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJmcm93bnlcIl0gPSAxNTVdID0gXCJmcm93bnlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImZ1bGxzY3JlZW5cIl0gPSAxNTZdID0gXCJmdWxsc2NyZWVuXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJnZWFyXCJdID0gMTU3XSA9IFwiZ2VhclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiZ2xhc3Nlc1wiXSA9IDE1OF0gPSBcImdsYXNzZXNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImdsb2JlXCJdID0gMTU5XSA9IFwiZ2xvYmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImdyYXBoXCJdID0gMTYwXSA9IFwiZ3JhcGhcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImdyb3VwXCJdID0gMTYxXSA9IFwiZ3JvdXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImhlYWRlclwiXSA9IDE2Ml0gPSBcImhlYWRlclwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaGVhcnRcIl0gPSAxNjNdID0gXCJoZWFydFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaGVhcnRFbXB0eVwiXSA9IDE2NF0gPSBcImhlYXJ0RW1wdHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImhpZGVcIl0gPSAxNjVdID0gXCJoaWRlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJob21lXCJdID0gMTY2XSA9IFwiaG9tZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaW5ib3hDaGVja1wiXSA9IDE2N10gPSBcImluYm94Q2hlY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImluZm9cIl0gPSAxNjhdID0gXCJpbmZvXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJpbmZvQ2lyY2xlXCJdID0gMTY5XSA9IFwiaW5mb0NpcmNsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wiaXRhbGljXCJdID0gMTcwXSA9IFwiaXRhbGljXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJrZXlcIl0gPSAxNzFdID0gXCJrZXlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxhdGVcIl0gPSAxNzJdID0gXCJsYXRlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaWZlc2F2ZXJcIl0gPSAxNzNdID0gXCJsaWZlc2F2ZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpZmVzYXZlckxvY2tcIl0gPSAxNzRdID0gXCJsaWZlc2F2ZXJMb2NrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaWdodEJ1bGJcIl0gPSAxNzVdID0gXCJsaWdodEJ1bGJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpZ2h0bmluZ1wiXSA9IDE3Nl0gPSBcImxpZ2h0bmluZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlua1wiXSA9IDE3N10gPSBcImxpbmtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpbmtSZW1vdmVcIl0gPSAxNzhdID0gXCJsaW5rUmVtb3ZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaXN0QnVsbGV0c1wiXSA9IDE3OV0gPSBcImxpc3RCdWxsZXRzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaXN0Q2hlY2tcIl0gPSAxODBdID0gXCJsaXN0Q2hlY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcImxpc3RDaGVja2JveFwiXSA9IDE4MV0gPSBcImxpc3RDaGVja2JveFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlzdEdyb3VwXCJdID0gMTgyXSA9IFwibGlzdEdyb3VwXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsaXN0R3JvdXAyXCJdID0gMTgzXSA9IFwibGlzdEdyb3VwMlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibGlzdE51bWJlcmVkXCJdID0gMTg0XSA9IFwibGlzdE51bWJlcmVkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJsb2NrXCJdID0gMTg1XSA9IFwibG9ja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFwiXSA9IDE4Nl0gPSBcIm1haWxcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxDaGVja1wiXSA9IDE4N10gPSBcIm1haWxDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbERvd25cIl0gPSAxODhdID0gXCJtYWlsRG93blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbEVkaXRcIl0gPSAxODldID0gXCJtYWlsRWRpdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbEVtcHR5XCJdID0gMTkwXSA9IFwibWFpbEVtcHR5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYWlsRXJyb3JcIl0gPSAxOTFdID0gXCJtYWlsRXJyb3JcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxPcGVuXCJdID0gMTkyXSA9IFwibWFpbE9wZW5cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxQYXVzZVwiXSA9IDE5M10gPSBcIm1haWxQYXVzZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWFpbFB1YmxpY1wiXSA9IDE5NF0gPSBcIm1haWxQdWJsaWNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxSZWFkXCJdID0gMTk1XSA9IFwibWFpbFJlYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxTZW5kXCJdID0gMTk2XSA9IFwibWFpbFNlbmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxTeW5jXCJdID0gMTk3XSA9IFwibWFpbFN5bmNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1haWxVbnJlYWRcIl0gPSAxOThdID0gXCJtYWlsVW5yZWFkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtYXBNYXJrZXJcIl0gPSAxOTldID0gXCJtYXBNYXJrZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1lYWxcIl0gPSAyMDBdID0gXCJtZWFsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtZW51XCJdID0gMjAxXSA9IFwibWVudVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWVudTJcIl0gPSAyMDJdID0gXCJtZW51MlwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWVyZ2VcIl0gPSAyMDNdID0gXCJtZXJnZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWV0YWRhdGFcIl0gPSAyMDRdID0gXCJtZXRhZGF0YVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wibWljcm9waG9uZVwiXSA9IDIwNV0gPSBcIm1pY3JvcGhvbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1pbmlhdHVyZXNcIl0gPSAyMDZdID0gXCJtaW5pYXR1cmVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtaW51c1wiXSA9IDIwN10gPSBcIm1pbnVzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtb2JpbGVcIl0gPSAyMDhdID0gXCJtb2JpbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1vbmV5XCJdID0gMjA5XSA9IFwibW9uZXlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm1vdmVcIl0gPSAyMTBdID0gXCJtb3ZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtdWx0aUNob2ljZVwiXSA9IDIxMV0gPSBcIm11bHRpQ2hvaWNlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJtdXNpY1wiXSA9IDIxMl0gPSBcIm11c2ljXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJuYXZpZ2F0ZVwiXSA9IDIxM10gPSBcIm5hdmlnYXRlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJuZXdcIl0gPSAyMTRdID0gXCJuZXdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5ld3NmZWVkXCJdID0gMjE1XSA9IFwibmV3c2ZlZWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdGVcIl0gPSAyMTZdID0gXCJub3RlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJub3RlYm9va1wiXSA9IDIxN10gPSBcIm5vdGVib29rXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJub3RlRWRpdFwiXSA9IDIxOF0gPSBcIm5vdGVFZGl0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJub3RlRm9yd2FyZFwiXSA9IDIxOV0gPSBcIm5vdGVGb3J3YXJkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJub3RlUmVwbHlcIl0gPSAyMjBdID0gXCJub3RlUmVwbHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIm5vdFJlY3VycmluZ1wiXSA9IDIyMV0gPSBcIm5vdFJlY3VycmluZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wib25lZHJpdmVcIl0gPSAyMjJdID0gXCJvbmVkcml2ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wib25saW5lQWRkXCJdID0gMjIzXSA9IFwib25saW5lQWRkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJvbmxpbmVKb2luXCJdID0gMjI0XSA9IFwib25saW5lSm9pblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wib29mUmVwbHlcIl0gPSAyMjVdID0gXCJvb2ZSZXBseVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wib3JnXCJdID0gMjI2XSA9IFwib3JnXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwYWdlXCJdID0gMjI3XSA9IFwicGFnZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGFpbnRcIl0gPSAyMjhdID0gXCJwYWludFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGFuZWxcIl0gPSAyMjldID0gXCJwYW5lbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGFydG5lclwiXSA9IDIzMF0gPSBcInBhcnRuZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBhdXNlXCJdID0gMjMxXSA9IFwicGF1c2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlbmNpbFwiXSA9IDIzMl0gPSBcInBlbmNpbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlXCJdID0gMjMzXSA9IFwicGVvcGxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZW9wbGVBZGRcIl0gPSAyMzRdID0gXCJwZW9wbGVBZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlb3BsZUNoZWNrXCJdID0gMjM1XSA9IFwicGVvcGxlQ2hlY2tcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlb3BsZUVycm9yXCJdID0gMjM2XSA9IFwicGVvcGxlRXJyb3JcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlb3BsZVBhdXNlXCJdID0gMjM3XSA9IFwicGVvcGxlUGF1c2VcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlb3BsZVJlbW92ZVwiXSA9IDIzOF0gPSBcInBlb3BsZVJlbW92ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlU2VjdXJpdHlcIl0gPSAyMzldID0gXCJwZW9wbGVTZWN1cml0eVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVvcGxlU3luY1wiXSA9IDI0MF0gPSBcInBlb3BsZVN5bmNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBlcnNvblwiXSA9IDI0MV0gPSBcInBlcnNvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGVyc29uQWRkXCJdID0gMjQyXSA9IFwicGVyc29uQWRkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwZXJzb25SZW1vdmVcIl0gPSAyNDNdID0gXCJwZXJzb25SZW1vdmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBob25lXCJdID0gMjQ0XSA9IFwicGhvbmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBob25lQWRkXCJdID0gMjQ1XSA9IFwicGhvbmVBZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBob25lVHJhbnNmZXJcIl0gPSAyNDZdID0gXCJwaG9uZVRyYW5zZmVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwaWN0dXJlXCJdID0gMjQ3XSA9IFwicGljdHVyZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGljdHVyZUFkZFwiXSA9IDI0OF0gPSBcInBpY3R1cmVBZGRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBpY3R1cmVFZGl0XCJdID0gMjQ5XSA9IFwicGljdHVyZUVkaXRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBpY3R1cmVSZW1vdmVcIl0gPSAyNTBdID0gXCJwaWN0dXJlUmVtb3ZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwaWxsXCJdID0gMjUxXSA9IFwicGlsbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGluRG93blwiXSA9IDI1Ml0gPSBcInBpbkRvd25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBpbkxlZnRcIl0gPSAyNTNdID0gXCJwaW5MZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwbGFjZWhvbGRlclwiXSA9IDI1NF0gPSBcInBsYWNlaG9sZGVyXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwbGFuZVwiXSA9IDI1NV0gPSBcInBsYW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwbGF5XCJdID0gMjU2XSA9IFwicGxheVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicGx1c1wiXSA9IDI1N10gPSBcInBsdXNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBsdXMyXCJdID0gMjU4XSA9IFwicGx1czJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInBvaW50SXRlbVwiXSA9IDI1OV0gPSBcInBvaW50SXRlbVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicG9wb3V0XCJdID0gMjYwXSA9IFwicG9wb3V0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJwb3N0XCJdID0gMjYxXSA9IFwicG9zdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicHJpbnRcIl0gPSAyNjJdID0gXCJwcmludFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicHJvdGVjdGlvbkNlbnRlclwiXSA9IDI2M10gPSBcInByb3RlY3Rpb25DZW50ZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInF1ZXN0aW9uXCJdID0gMjY0XSA9IFwicXVlc3Rpb25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInF1ZXN0aW9uUmV2ZXJzZVwiXSA9IDI2NV0gPSBcInF1ZXN0aW9uUmV2ZXJzZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicXVvdGVcIl0gPSAyNjZdID0gXCJxdW90ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmFkaW9CdXR0b25cIl0gPSAyNjddID0gXCJyYWRpb0J1dHRvblwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmVhY3RpdmF0ZVwiXSA9IDI2OF0gPSBcInJlYWN0aXZhdGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJlY2VpcHRDaGVja1wiXSA9IDI2OV0gPSBcInJlY2VpcHRDaGVja1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmVjZWlwdEZvcndhcmRcIl0gPSAyNzBdID0gXCJyZWNlaXB0Rm9yd2FyZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmVjZWlwdFJlcGx5XCJdID0gMjcxXSA9IFwicmVjZWlwdFJlcGx5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZWZyZXNoXCJdID0gMjcyXSA9IFwicmVmcmVzaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wicmVsb2FkXCJdID0gMjczXSA9IFwicmVsb2FkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZXBseVwiXSA9IDI3NF0gPSBcInJlcGx5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZXBseUFsbFwiXSA9IDI3NV0gPSBcInJlcGx5QWxsXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZXBseUFsbEFsdFwiXSA9IDI3Nl0gPSBcInJlcGx5QWxsQWx0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyZXBseUFsdFwiXSA9IDI3N10gPSBcInJlcGx5QWx0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJyaWJib25cIl0gPSAyNzhdID0gXCJyaWJib25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInJvb21cIl0gPSAyNzldID0gXCJyb29tXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzYXZlXCJdID0gMjgwXSA9IFwic2F2ZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2NoZWR1bGluZ1wiXSA9IDI4MV0gPSBcInNjaGVkdWxpbmdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNlYXJjaFwiXSA9IDI4Ml0gPSBcInNlYXJjaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2VjdGlvblwiXSA9IDI4M10gPSBcInNlY3Rpb25cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNlY3Rpb25zXCJdID0gMjg0XSA9IFwic2VjdGlvbnNcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNldHRpbmdzXCJdID0gMjg1XSA9IFwic2V0dGluZ3NcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNoYXJlXCJdID0gMjg2XSA9IFwic2hhcmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNoaWVsZFwiXSA9IDI4N10gPSBcInNoaWVsZFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic2l0ZXNcIl0gPSAyODhdID0gXCJzaXRlc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic21pbGV5XCJdID0gMjg5XSA9IFwic21pbGV5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzb2NjZXJcIl0gPSAyOTBdID0gXCJzb2NjZXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNvY2lhbExpc3RlbmluZ1wiXSA9IDI5MV0gPSBcInNvY2lhbExpc3RlbmluZ1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic29ydFwiXSA9IDI5Ml0gPSBcInNvcnRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInNvcnRMaW5lc1wiXSA9IDI5M10gPSBcInNvcnRMaW5lc1wiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3BsaXRcIl0gPSAyOTRdID0gXCJzcGxpdFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3RhclwiXSA9IDI5NV0gPSBcInN0YXJcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN0YXJFbXB0eVwiXSA9IDI5Nl0gPSBcInN0YXJFbXB0eVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3RvcHdhdGNoXCJdID0gMjk3XSA9IFwic3RvcHdhdGNoXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdG9yeVwiXSA9IDI5OF0gPSBcInN0b3J5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdHlsZVJlbW92ZVwiXSA9IDI5OV0gPSBcInN0eWxlUmVtb3ZlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdWJzY3JpYmVcIl0gPSAzMDBdID0gXCJzdWJzY3JpYmVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInN1blwiXSA9IDMwMV0gPSBcInN1blwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wic3VuQWRkXCJdID0gMzAyXSA9IFwic3VuQWRkXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdW5RdWVzdGlvblwiXSA9IDMwM10gPSBcInN1blF1ZXN0aW9uXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJzdXBwb3J0XCJdID0gMzA0XSA9IFwic3VwcG9ydFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widGFibGVcIl0gPSAzMDVdID0gXCJ0YWJsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widGFibGV0XCJdID0gMzA2XSA9IFwidGFibGV0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0YWdcIl0gPSAzMDddID0gXCJ0YWdcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRhc2tSZWN1cnJpbmdcIl0gPSAzMDhdID0gXCJ0YXNrUmVjdXJyaW5nXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0YXNrc1wiXSA9IDMwOV0gPSBcInRhc2tzXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0ZWFtd29ya1wiXSA9IDMxMF0gPSBcInRlYW13b3JrXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0ZXh0XCJdID0gMzExXSA9IFwidGV4dFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widGV4dEJveFwiXSA9IDMxMl0gPSBcInRleHRCb3hcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRpbGVcIl0gPSAzMTNdID0gXCJ0aWxlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0aW1lbGluZVwiXSA9IDMxNF0gPSBcInRpbWVsaW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0b2RheVwiXSA9IDMxNV0gPSBcInRvZGF5XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0b2dnbGVcIl0gPSAzMTZdID0gXCJ0b2dnbGVcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRvZ2dsZU1pZGRsZVwiXSA9IDMxN10gPSBcInRvZ2dsZU1pZGRsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widG91Y2hcIl0gPSAzMThdID0gXCJ0b3VjaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJhc2hcIl0gPSAzMTldID0gXCJ0cmFzaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJpYW5nbGVEb3duXCJdID0gMzIwXSA9IFwidHJpYW5nbGVEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZUVtcHR5RG93blwiXSA9IDMyMV0gPSBcInRyaWFuZ2xlRW1wdHlEb3duXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZUVtcHR5TGVmdFwiXSA9IDMyMl0gPSBcInRyaWFuZ2xlRW1wdHlMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZUVtcHR5UmlnaHRcIl0gPSAzMjNdID0gXCJ0cmlhbmdsZUVtcHR5UmlnaHRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyaWFuZ2xlRW1wdHlVcFwiXSA9IDMyNF0gPSBcInRyaWFuZ2xlRW1wdHlVcFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJpYW5nbGVMZWZ0XCJdID0gMzI1XSA9IFwidHJpYW5nbGVMZWZ0XCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ0cmlhbmdsZVJpZ2h0XCJdID0gMzI2XSA9IFwidHJpYW5nbGVSaWdodFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widHJpYW5nbGVVcFwiXSA9IDMyN10gPSBcInRyaWFuZ2xlVXBcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInRyb3BoeVwiXSA9IDMyOF0gPSBcInRyb3BoeVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widW5kZXJsaW5lXCJdID0gMzI5XSA9IFwidW5kZXJsaW5lXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ1bnN1YnNjcmliZVwiXSA9IDMzMF0gPSBcInVuc3Vic2NyaWJlXCI7XG4gICAgSWNvbkVudW1bSWNvbkVudW1bXCJ1cGxvYWRcIl0gPSAzMzFdID0gXCJ1cGxvYWRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInZpZGVvXCJdID0gMzMyXSA9IFwidmlkZW9cIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInZvaWNlbWFpbFwiXSA9IDMzM10gPSBcInZvaWNlbWFpbFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1widm9pY2VtYWlsRm9yd2FyZFwiXSA9IDMzNF0gPSBcInZvaWNlbWFpbEZvcndhcmRcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInZvaWNlbWFpbFJlcGx5XCJdID0gMzM1XSA9IFwidm9pY2VtYWlsUmVwbHlcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIndhZmZsZVwiXSA9IDMzNl0gPSBcIndhZmZsZVwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wid29ya1wiXSA9IDMzN10gPSBcIndvcmtcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcIndyZW5jaFwiXSA9IDMzOF0gPSBcIndyZW5jaFwiO1xuICAgIEljb25FbnVtW0ljb25FbnVtW1wieFwiXSA9IDMzOV0gPSBcInhcIjtcbiAgICBJY29uRW51bVtJY29uRW51bVtcInhDaXJjbGVcIl0gPSAzNDBdID0gXCJ4Q2lyY2xlXCI7XG59KShleHBvcnRzLkljb25FbnVtIHx8IChleHBvcnRzLkljb25FbnVtID0ge30pKTtcbnZhciBJY29uRW51bSA9IGV4cG9ydHMuSWNvbkVudW07XG47XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvaWNvbi9pY29uRW51bS50c1xuICoqIG1vZHVsZSBpZCA9IDEyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgTGlua0RpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGlua0RpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8YSBuZy1ocmVmPVwie3sgbmdIcmVmIH19XCIgY2xhc3M9XCJtcy1MaW5rXCIgbmctdHJhbnNjbHVkZT48L2E+JztcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIG5nSHJlZjogJ0AnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgfVxuICAgIExpbmtEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBMaW5rRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICByZXR1cm4gTGlua0RpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLkxpbmtEaXJlY3RpdmUgPSBMaW5rRGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMubGluaycsIFtcbiAgICAnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cydcbl0pXG4gICAgLmRpcmVjdGl2ZSgndWlmTGluaycsIExpbmtEaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9saW5rL2xpbmtEaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAxM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIG92ZXJsYXlNb2RlRW51bV90c18xID0gcmVxdWlyZSgnLi9vdmVybGF5TW9kZUVudW0udHMnKTtcbnZhciBPdmVybGF5Q29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3ZlcmxheUNvbnRyb2xsZXIobG9nKSB7XG4gICAgICAgIHRoaXMubG9nID0gbG9nO1xuICAgIH1cbiAgICBPdmVybGF5Q29udHJvbGxlci4kaW5qZWN0ID0gWyckbG9nJ107XG4gICAgcmV0dXJuIE92ZXJsYXlDb250cm9sbGVyO1xufSkoKTtcbnZhciBPdmVybGF5RGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPdmVybGF5RGlyZWN0aXZlKGxvZykge1xuICAgICAgICB0aGlzLmxvZyA9IGxvZztcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtT3ZlcmxheVwiIG5nLWNsYXNzPVwie1xcJ21zLU92ZXJsYXktLWRhcmtcXCc6IHVpZk1vZGUgPT0gXFwnZGFya1xcJ31cIiBuZy10cmFuc2NsdWRlPjwvZGl2Pic7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICB1aWZNb2RlOiAnQCdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgT3ZlcmxheURpcmVjdGl2ZS5sb2cgPSBsb2c7XG4gICAgfVxuICAgIE92ZXJsYXlEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uIChsb2cpIHsgcmV0dXJuIG5ldyBPdmVybGF5RGlyZWN0aXZlKGxvZyk7IH07XG4gICAgICAgIGRpcmVjdGl2ZS4kaW5qZWN0ID0gWyckbG9nJ107XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBPdmVybGF5RGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgndWlmTW9kZScsIGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvdmVybGF5TW9kZUVudW1fdHNfMS5PdmVybGF5TW9kZVtuZXdWYWx1ZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIE92ZXJsYXlEaXJlY3RpdmUubG9nLmVycm9yKCdFcnJvciBbbmdPZmZpY2VVaUZhYnJpY10gb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5vdmVybGF5IC0gVW5zdXBwb3J0ZWQgb3ZlcmxheSBtb2RlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBvdmVybGF5IG1vZGUgKFxcJycgKyBzY29wZS51aWZNb2RlICsgJ1xcJykgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgT2ZmaWNlIFVJIEZhYnJpYy4gJyArXG4gICAgICAgICAgICAgICAgICAgICdTdXBwb3J0ZWQgb3B0aW9ucyBhcmUgbGlzdGVkIGhlcmU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL25nT2ZmaWNlVUlGYWJyaWMvbmctb2ZmaWNldWlmYWJyaWMvYmxvYi9tYXN0ZXIvc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9vdmVybGF5TW9kZUVudW0udHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICA7XG4gICAgcmV0dXJuIE92ZXJsYXlEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5PdmVybGF5RGlyZWN0aXZlID0gT3ZlcmxheURpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLm92ZXJsYXknLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZk92ZXJsYXknLCBPdmVybGF5RGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9vdmVybGF5RGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gMTRcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbihmdW5jdGlvbiAoT3ZlcmxheU1vZGUpIHtcbiAgICBPdmVybGF5TW9kZVtPdmVybGF5TW9kZVtcImxpZ2h0XCJdID0gMF0gPSBcImxpZ2h0XCI7XG4gICAgT3ZlcmxheU1vZGVbT3ZlcmxheU1vZGVbXCJkYXJrXCJdID0gMV0gPSBcImRhcmtcIjtcbn0pKGV4cG9ydHMuT3ZlcmxheU1vZGUgfHwgKGV4cG9ydHMuT3ZlcmxheU1vZGUgPSB7fSkpO1xudmFyIE92ZXJsYXlNb2RlID0gZXhwb3J0cy5PdmVybGF5TW9kZTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9vdmVybGF5L292ZXJsYXlNb2RlRW51bS50c1xuICoqIG1vZHVsZSBpZCA9IDE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlKGxvZykge1xuICAgICAgICB0aGlzLmxvZyA9IGxvZztcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3JcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3ItaXRlbU5hbWVcIj57e3VpZk5hbWV9fTwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtcy1Qcm9ncmVzc0luZGljYXRvci1pdGVtUHJvZ3Jlc3NcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3ItcHJvZ3Jlc3NUcmFja1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtcy1Qcm9ncmVzc0luZGljYXRvci1wcm9ncmVzc0JhclwiIG5nLXN0eWxlPVwie3dpZHRoOiB1aWZQZXJjZW50Q29tcGxldGUrXFwnJVxcJ31cIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXMtUHJvZ3Jlc3NJbmRpY2F0b3ItaXRlbURlc2NyaXB0aW9uXCI+e3t1aWZEZXNjcmlwdGlvbn19PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgdGhpcy5zY29wZSA9IHtcbiAgICAgICAgICAgIHVpZkRlc2NyaXB0aW9uOiAnQCcsXG4gICAgICAgICAgICB1aWZOYW1lOiAnQCcsXG4gICAgICAgICAgICB1aWZQZXJjZW50Q29tcGxldGU6ICdAJ1xuICAgICAgICB9O1xuICAgICAgICBQcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS5sb2cgPSBsb2c7XG4gICAgfVxuICAgIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAobG9nKSB7IHJldHVybiBuZXcgUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUobG9nKTsgfTtcbiAgICAgICAgZGlyZWN0aXZlLiRpbmplY3QgPSBbJyRsb2cnXTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgndWlmUGVyY2VudENvbXBsZXRlJywgZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IG51bGwgfHwgbmV3VmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUudWlmUGVyY2VudENvbXBsZXRlID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbmV3UGVyY2VudENvbXBsZXRlID0gcGFyc2VGbG9hdChuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4obmV3UGVyY2VudENvbXBsZXRlKSB8fCBuZXdQZXJjZW50Q29tcGxldGUgPCAwIHx8IG5ld1BlcmNlbnRDb21wbGV0ZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgIFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlLmxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMucHJvZ3Jlc3NpbmRpY2F0b3IgLSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BlcmNlbnQgY29tcGxldGUgbXVzdCBiZSBhIHZhbGlkIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMC4nKTtcbiAgICAgICAgICAgICAgICBzY29wZS51aWZQZXJjZW50Q29tcGxldGUgPSBNYXRoLm1heChNYXRoLm1pbihuZXdQZXJjZW50Q29tcGxldGUsIDEwMCksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIDtcbiAgICByZXR1cm4gUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5Qcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZSA9IFByb2dyZXNzSW5kaWNhdG9yRGlyZWN0aXZlO1xuZXhwb3J0cy5tb2R1bGUgPSBuZy5tb2R1bGUoJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMucHJvZ3Jlc3NpbmRpY2F0b3InLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZlByb2dyZXNzSW5kaWNhdG9yJywgUHJvZ3Jlc3NJbmRpY2F0b3JEaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzc2luZGljYXRvci9wcm9ncmVzc0luZGljYXRvckRpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDE2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgU2VhcmNoQm94RGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZWFyY2hCb3hEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLVNlYXJjaEJveFwiIG5nLWNsYXNzPVwie1xcJ2lzLWFjdGl2ZVxcJzppc0FjdGl2ZX1cIj4nICtcbiAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJtcy1TZWFyY2hCb3gtZmllbGRcIiBuZy1mb2N1cz1cImlucHV0Rm9jdXMoKVwiIG5nLWJsdXI9XCJpbnB1dEJsdXIoKVwiJyArXG4gICAgICAgICAgICAnIG5nLW1vZGVsPVwidmFsdWVcIiBpZD1cInt7OjpcXCdzZWFyY2hCb3hfXFwnKyRpZH19XCIgLz4nICtcbiAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJtcy1TZWFyY2hCb3gtbGFiZWxcIiBmb3I9XCJ7ezo6XFwnc2VhcmNoQm94X1xcJyskaWR9fVwiIG5nLWhpZGU9XCJpc0xhYmVsSGlkZGVuXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJtcy1TZWFyY2hCb3gtaWNvbiBtcy1JY29uIG1zLUljb24tLXNlYXJjaFwiID48L2k+IHt7cGxhY2Vob2xkZXJ9fTwvbGFiZWw+JyArXG4gICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cIm1zLVNlYXJjaEJveC1jbG9zZUJ1dHRvblwiIG5nLW1vdXNlZG93bj1cImJ0bk1vdXNlZG93bigpXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS14XCI+PC9pPjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJz0nLFxuICAgICAgICAgICAgdmFsdWU6ICc9J1xuICAgICAgICB9O1xuICAgIH1cbiAgICBTZWFyY2hCb3hEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTZWFyY2hCb3hEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFNlYXJjaEJveERpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgc2NvcGUuaXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICBzY29wZS5pc0NhbmNlbCA9IGZhbHNlO1xuICAgICAgICBzY29wZS5pc0xhYmVsSGlkZGVuID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLmlucHV0Rm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjb3BlLmlzTGFiZWxIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgc2NvcGUuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBzY29wZS5pbnB1dEJsdXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIHNjb3BlLmlzTGFiZWxIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIChzY29wZS52YWx1ZSkgPT09ICd1bmRlZmluZWQnIHx8IHNjb3BlLnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNjb3BlLmlzTGFiZWxIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLmlzRm9jdXMgPSBzY29wZS5pc0NhbmNlbCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBzY29wZS5idG5Nb3VzZWRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLiR3YXRjaCgndmFsdWUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzRm9jdXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaXNMYWJlbEhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5pc0xhYmVsSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdwbGFjZWhvbGRlcicsIGZ1bmN0aW9uIChzZWFyY2gpIHtcbiAgICAgICAgICAgIHNjb3BlLnBsYWNlaG9sZGVyID0gc2VhcmNoO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBTZWFyY2hCb3hEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5TZWFyY2hCb3hEaXJlY3RpdmUgPSBTZWFyY2hCb3hEaXJlY3RpdmU7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy5zZWFyY2hib3gnLCBbJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZTZWFyY2hib3gnLCBTZWFyY2hCb3hEaXJlY3RpdmUuZmFjdG9yeSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy9zZWFyY2hib3gvc2VhcmNoYm94RGlyZWN0aXZlLnRzXG4gKiogbW9kdWxlIGlkID0gMTdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBzcGlubmVyU2l6ZUVudW1fMSA9IHJlcXVpcmUoJy4vc3Bpbm5lclNpemVFbnVtJyk7XG52YXIgU3Bpbm5lckRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Bpbm5lckRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yZXN0cmljdCA9ICdFJztcbiAgICAgICAgdGhpcy50cmFuc2NsdWRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwibXMtU3Bpbm5lclwiPjwvZGl2Pic7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IFNwaW5uZXJDb250cm9sbGVyO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgJ25nU2hvdyc6ICc9J1xuICAgICAgICB9O1xuICAgIH1cbiAgICBTcGlubmVyRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3Bpbm5lckRpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgU3Bpbm5lckRpcmVjdGl2ZS5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uIChzY29wZSwgaW5zdGFuY2VFbGVtZW50LCBhdHRycywgY29udHJvbGxlciwgJHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgaWYgKG5nLmlzRGVmaW5lZChhdHRycy51aWZTaXplKSkge1xuICAgICAgICAgICAgaWYgKG5nLmlzVW5kZWZpbmVkKHNwaW5uZXJTaXplRW51bV8xLlNwaW5uZXJTaXplW2F0dHJzLnVpZlNpemVdKSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMuc3Bpbm5lciAtIFVuc3VwcG9ydGVkIHNpemU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAnU3Bpbm5lciBzaXplIChcXCcnICsgYXR0cnMudWlmU2l6ZSArICdcXCcpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE9mZmljZSBVSSBGYWJyaWMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3Bpbm5lclNpemVFbnVtXzEuU3Bpbm5lclNpemVbYXR0cnMudWlmU2l6ZV0gPT09IHNwaW5uZXJTaXplRW51bV8xLlNwaW5uZXJTaXplLmxhcmdlKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50LmFkZENsYXNzKCdtcy1TcGlubmVyLS1sYXJnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRycy5uZ1Nob3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKCduZ1Nob3cnLCBmdW5jdGlvbiAobmV3VmlzaWJsZSwgb2xkVmlzaWJsZSwgc3Bpbm5lclNjb3BlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lclNjb3BlLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGlubmVyU2NvcGUuc3RvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2NvcGUuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgIGlmIChjbG9uZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBuZy5lbGVtZW50KCc8ZGl2PjwvZGl2PicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuYWRkQ2xhc3MoJ21zLVNwaW5uZXItbGFiZWwnKS5hcHBlbmQoY2xvbmUpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5hcHBlbmQod3JhcHBlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzY29wZS5pbml0KCk7XG4gICAgfTtcbiAgICByZXR1cm4gU3Bpbm5lckRpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlNwaW5uZXJEaXJlY3RpdmUgPSBTcGlubmVyRGlyZWN0aXZlO1xudmFyIFNwaW5uZXJDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTcGlubmVyQ29udHJvbGxlcigkc2NvcGUsICRlbGVtZW50LCAkaW50ZXJ2YWwsICRsb2cpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy4kc2NvcGUgPSAkc2NvcGU7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcbiAgICAgICAgdGhpcy4kaW50ZXJ2YWwgPSAkaW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuJGxvZyA9ICRsb2c7XG4gICAgICAgIHRoaXMuX29mZnNldFNpemUgPSAwLjE3OTtcbiAgICAgICAgdGhpcy5fbnVtQ2lyY2xlcyA9IDg7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvblNwZWVkID0gOTA7XG4gICAgICAgIHRoaXMuX2NpcmNsZXMgPSBbXTtcbiAgICAgICAgJHNjb3BlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jcmVhdGVDaXJjbGVzQW5kQXJyYW5nZSgpO1xuICAgICAgICAgICAgX3RoaXMuc2V0SW5pdGlhbE9wYWNpdHkoKTtcbiAgICAgICAgfTtcbiAgICAgICAgJHNjb3BlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX2FuaW1hdGlvbkludGVydmFsID0gJGludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IF90aGlzLl9jaXJjbGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmZhZGVDaXJjbGUoX3RoaXMuX2NpcmNsZXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIF90aGlzLl9hbmltYXRpb25TcGVlZCk7XG4gICAgICAgIH07XG4gICAgICAgICRzY29wZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChfdGhpcy5fYW5pbWF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBTcGlubmVyQ29udHJvbGxlci5wcm90b3R5cGUuY3JlYXRlQ2lyY2xlc0FuZEFycmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuJGVsZW1lbnRbMF0uY2xpZW50V2lkdGg7XG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLiRlbGVtZW50WzBdLmNsaWVudEhlaWdodDtcbiAgICAgICAgdmFyIGFuZ2xlID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IHdpZHRoICogdGhpcy5fb2Zmc2V0U2l6ZTtcbiAgICAgICAgdmFyIHN0ZXAgPSAoMiAqIE1hdGguUEkpIC8gdGhpcy5fbnVtQ2lyY2xlcztcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9udW1DaXJjbGVzO1xuICAgICAgICB2YXIgcmFkaXVzID0gKHdpZHRoIC0gb2Zmc2V0KSAqIDAuNTtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdmFyIGNpcmNsZSA9IHRoaXMuY3JlYXRlQ2lyY2xlKCk7XG4gICAgICAgICAgICB2YXIgeCA9IE1hdGgucm91bmQod2lkdGggKiAwLjUgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSkgLSBjaXJjbGVbMF0uY2xpZW50V2lkdGggKiAwLjUpIC0gb2Zmc2V0ICogMC41O1xuICAgICAgICAgICAgdmFyIHkgPSBNYXRoLnJvdW5kKGhlaWdodCAqIDAuNSArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSAtIGNpcmNsZVswXS5jbGllbnRIZWlnaHQgKiAwLjUpIC0gb2Zmc2V0ICogMC41O1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hcHBlbmQoY2lyY2xlKTtcbiAgICAgICAgICAgIGNpcmNsZS5jc3MoJ2xlZnQnLCAoeCArICdweCcpKTtcbiAgICAgICAgICAgIGNpcmNsZS5jc3MoJ3RvcCcsICh5ICsgJ3B4JykpO1xuICAgICAgICAgICAgYW5nbGUgKz0gc3RlcDtcbiAgICAgICAgICAgIHZhciBjaXJjbGVPYmplY3QgPSBuZXcgQ2lyY2xlT2JqZWN0KGNpcmNsZSwgaSk7XG4gICAgICAgICAgICB0aGlzLl9jaXJjbGVzLnB1c2goY2lyY2xlT2JqZWN0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Bpbm5lckNvbnRyb2xsZXIucHJvdG90eXBlLmNyZWF0ZUNpcmNsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNpcmNsZSA9IG5nLmVsZW1lbnQoJzxkaXY+PC9kaXY+Jyk7XG4gICAgICAgIHZhciBwYXJlbnRXaWR0aCA9IHRoaXMuJGVsZW1lbnRbMF0uY2xpZW50V2lkdGg7XG4gICAgICAgIHZhciBkb3RTaXplID0gKHBhcmVudFdpZHRoICogdGhpcy5fb2Zmc2V0U2l6ZSkgKyAncHgnO1xuICAgICAgICBjaXJjbGUuYWRkQ2xhc3MoJ21zLVNwaW5uZXItY2lyY2xlJykuY3NzKCd3aWR0aCcsIGRvdFNpemUpLmNzcygnaGVpZ2h0JywgZG90U2l6ZSk7XG4gICAgICAgIHJldHVybiBjaXJjbGU7XG4gICAgfTtcbiAgICA7XG4gICAgU3Bpbm5lckNvbnRyb2xsZXIucHJvdG90eXBlLnNldEluaXRpYWxPcGFjaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgb3BjYWl0eVRvU2V0O1xuICAgICAgICB0aGlzLl9mYWRlSW5jcmVtZW50ID0gMSAvIHRoaXMuX251bUNpcmNsZXM7XG4gICAgICAgIHRoaXMuX2NpcmNsZXMuZm9yRWFjaChmdW5jdGlvbiAoY2lyY2xlLCBpbmRleCkge1xuICAgICAgICAgICAgb3BjYWl0eVRvU2V0ID0gKF90aGlzLl9mYWRlSW5jcmVtZW50ICogKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgY2lyY2xlLm9wYWNpdHkgPSBvcGNhaXR5VG9TZXQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3Bpbm5lckNvbnRyb2xsZXIucHJvdG90eXBlLmZhZGVDaXJjbGUgPSBmdW5jdGlvbiAoY2lyY2xlKSB7XG4gICAgICAgIHZhciBuZXdPcGFjaXR5ID0gY2lyY2xlLm9wYWNpdHkgLSB0aGlzLl9mYWRlSW5jcmVtZW50O1xuICAgICAgICBpZiAobmV3T3BhY2l0eSA8PSAwKSB7XG4gICAgICAgICAgICBuZXdPcGFjaXR5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjaXJjbGUub3BhY2l0eSA9IG5ld09wYWNpdHk7XG4gICAgfTtcbiAgICBTcGlubmVyQ29udHJvbGxlci4kaW5qZWN0ID0gWyckc2NvcGUnLCAnJGVsZW1lbnQnLCAnJGludGVydmFsJywgJyRsb2cnXTtcbiAgICByZXR1cm4gU3Bpbm5lckNvbnRyb2xsZXI7XG59KSgpO1xudmFyIENpcmNsZU9iamVjdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2lyY2xlT2JqZWN0KGNpcmNsZUVsZW1lbnQsIGNpcmNsZUluZGV4KSB7XG4gICAgICAgIHRoaXMuY2lyY2xlRWxlbWVudCA9IGNpcmNsZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY2lyY2xlSW5kZXggPSBjaXJjbGVJbmRleDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENpcmNsZU9iamVjdC5wcm90b3R5cGUsIFwib3BhY2l0eVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICsodGhpcy5jaXJjbGVFbGVtZW50LmNzcygnb3BhY2l0eScpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAob3BhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jaXJjbGVFbGVtZW50LmNzcygnb3BhY2l0eScsIG9wYWNpdHkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gQ2lyY2xlT2JqZWN0O1xufSkoKTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnNwaW5uZXInLCBbJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXSlcbiAgICAuZGlyZWN0aXZlKCd1aWZTcGlubmVyJywgU3Bpbm5lckRpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lckRpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDE4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG4oZnVuY3Rpb24gKFNwaW5uZXJTaXplKSB7XG4gICAgU3Bpbm5lclNpemVbU3Bpbm5lclNpemVbJ3NtYWxsJ10gPSAwXSA9ICdzbWFsbCc7XG4gICAgU3Bpbm5lclNpemVbU3Bpbm5lclNpemVbJ2xhcmdlJ10gPSAxXSA9ICdsYXJnZSc7XG59KShleHBvcnRzLlNwaW5uZXJTaXplIHx8IChleHBvcnRzLlNwaW5uZXJTaXplID0ge30pKTtcbnZhciBTcGlubmVyU2l6ZSA9IGV4cG9ydHMuU3Bpbm5lclNpemU7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyU2l6ZUVudW0udHNcbiAqKiBtb2R1bGUgaWQgPSAxOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5nID0gcmVxdWlyZSgnYW5ndWxhcicpO1xudmFyIHRhYmxlUm93U2VsZWN0TW9kZUVudW1fMSA9IHJlcXVpcmUoJy4vdGFibGVSb3dTZWxlY3RNb2RlRW51bScpO1xudmFyIFRhYmxlQ29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVDb250cm9sbGVyKCRzY29wZSwgJGxvZykge1xuICAgICAgICB0aGlzLiRzY29wZSA9ICRzY29wZTtcbiAgICAgICAgdGhpcy4kbG9nID0gJGxvZztcbiAgICAgICAgdGhpcy4kc2NvcGUub3JkZXJCeSA9IG51bGw7XG4gICAgICAgIHRoaXMuJHNjb3BlLm9yZGVyQXNjID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kc2NvcGUucm93cyA9IFtdO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGFibGVDb250cm9sbGVyLnByb3RvdHlwZSwgXCJvcmRlckJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUub3JkZXJCeTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9yZGVyQnkgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRhYmxlQ29udHJvbGxlci5wcm90b3R5cGUsIFwib3JkZXJBc2NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5vcmRlckFzYztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXJBc2MpIHtcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9yZGVyQXNjID0gb3JkZXJBc2M7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYWJsZUNvbnRyb2xsZXIucHJvdG90eXBlLCBcInJvd1NlbGVjdE1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5yb3dTZWxlY3RNb2RlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyb3dTZWxlY3RNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bcm93U2VsZWN0TW9kZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMudGFibGUuICcgK1xuICAgICAgICAgICAgICAgICAgICAnXFwnJyArIHJvd1NlbGVjdE1vZGUgKyAnXFwnIGlzIG5vdCBhIHZhbGlkIG9wdGlvbiBmb3IgXFwndWlmLXJvdy1zZWxlY3QtbW9kZVxcJy4gJyArXG4gICAgICAgICAgICAgICAgICAgICdWYWxpZCBvcHRpb25zIGFyZSBub25lfHNpbmdsZXxtdWx0aXBsZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnJvd1NlbGVjdE1vZGUgPSByb3dTZWxlY3RNb2RlO1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGFibGVDb250cm9sbGVyLnByb3RvdHlwZSwgXCJyb3dzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUucm93cztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocm93cykge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUucm93cyA9IHJvd3M7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYWJsZUNvbnRyb2xsZXIucHJvdG90eXBlLCBcInNlbGVjdGVkSXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd3NbaV0uc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMucm93c1tpXS5pdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVGFibGVDb250cm9sbGVyLiRpbmplY3QgPSBbJyRzY29wZScsICckbG9nJ107XG4gICAgcmV0dXJuIFRhYmxlQ29udHJvbGxlcjtcbn0pKCk7XG52YXIgVGFibGVEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYmxlRGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxkaXYgY2xhc3M9XCJtcy1UYWJsZVwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+JztcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gVGFibGVDb250cm9sbGVyO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcyA9ICd0YWJsZSc7XG4gICAgfVxuICAgIFRhYmxlRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGFibGVEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFRhYmxlRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGlmIChhdHRycy51aWZSb3dTZWxlY3RNb2RlICE9PSB1bmRlZmluZWQgJiYgYXR0cnMudWlmUm93U2VsZWN0TW9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRhYmxlUm93U2VsZWN0TW9kZUVudW1fMS5UYWJsZVJvd1NlbGVjdE1vZGVFbnVtW2F0dHJzLnVpZlJvd1NlbGVjdE1vZGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRsb2cuZXJyb3IoJ0Vycm9yIFtuZ09mZmljZVVpRmFicmljXSBvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnRhYmxlLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcJycgKyBhdHRycy51aWZSb3dTZWxlY3RNb2RlICsgJ1xcJyBpcyBub3QgYSB2YWxpZCBvcHRpb24gZm9yIFxcJ3VpZi1yb3ctc2VsZWN0LW1vZGVcXCcuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVmFsaWQgb3B0aW9ucyBhcmUgbm9uZXxzaW5nbGV8bXVsdGlwbGUuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yb3dTZWxlY3RNb2RlID0gYXR0cnMudWlmUm93U2VsZWN0TW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NvcGUucm93U2VsZWN0TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzY29wZS5yb3dTZWxlY3RNb2RlID0gdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW0ubm9uZV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUYWJsZURpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRhYmxlRGlyZWN0aXZlID0gVGFibGVEaXJlY3RpdmU7XG52YXIgVGFibGVSb3dDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWJsZVJvd0NvbnRyb2xsZXIoJHNjb3BlLCAkbG9nKSB7XG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xuICAgICAgICB0aGlzLiRsb2cgPSAkbG9nO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGFibGVSb3dDb250cm9sbGVyLnByb3RvdHlwZSwgXCJpdGVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUuaXRlbTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUuaXRlbSA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYWJsZVJvd0NvbnRyb2xsZXIucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUuc2VsZWN0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBUYWJsZVJvd0NvbnRyb2xsZXIuJGluamVjdCA9IFsnJHNjb3BlJywgJyRsb2cnXTtcbiAgICByZXR1cm4gVGFibGVSb3dDb250cm9sbGVyO1xufSkoKTtcbnZhciBUYWJsZVJvd0RpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVSb3dEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBjbGFzcz1cIm1zLVRhYmxlLXJvd1wiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+JztcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gJ151aWZUYWJsZSc7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBpdGVtOiAnPXVpZkl0ZW0nXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IFRhYmxlUm93Q29udHJvbGxlcjtcbiAgICB9XG4gICAgVGFibGVSb3dEaXJlY3RpdmUuZmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBUYWJsZVJvd0RpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgVGFibGVSb3dEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGluc3RhbmNlRWxlbWVudCwgYXR0cnMsIHRhYmxlKSB7XG4gICAgICAgIGlmIChhdHRycy51aWZTZWxlY3RlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBhdHRycy51aWZTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkU3RyaW5nID0gYXR0cnMudWlmU2VsZWN0ZWQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFN0cmluZyAhPT0gJ3RydWUnICYmIHNlbGVjdGVkU3RyaW5nICE9PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgdGFibGUuJGxvZy5lcnJvcignRXJyb3IgW25nT2ZmaWNlVWlGYWJyaWNdIG9mZmljZXVpZmFicmljLmNvbXBvbmVudHMudGFibGUuICcgK1xuICAgICAgICAgICAgICAgICAgICAnXFwnJyArIGF0dHJzLnVpZlNlbGVjdGVkICsgJ1xcJyBpcyBub3QgYSB2YWxpZCBib29sZWFuIHZhbHVlLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1ZhbGlkIG9wdGlvbnMgYXJlIHRydWV8ZmFsc2UuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRTdHJpbmcgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzY29wZS5pdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhYmxlLnJvd3MucHVzaChzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUucm93Q2xpY2sgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHNjb3BlLnNlbGVjdGVkID0gIXNjb3BlLnNlbGVjdGVkO1xuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLiR3YXRjaCgnc2VsZWN0ZWQnLCBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlLCB0YWJsZVJvd1Njb3BlKSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFibGUucm93U2VsZWN0TW9kZSA9PT0gdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW0uc2luZ2xlXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFibGUucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlLnJvd3NbaV0gIT09IHRhYmxlUm93U2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUucm93c1tpXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQuYWRkQ2xhc3MoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGFibGUucm93U2VsZWN0TW9kZSAhPT0gdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW0ubm9uZV0gJiZcbiAgICAgICAgICAgIHNjb3BlLml0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50Lm9uKCdjbGljaycsIHNjb3BlLnJvd0NsaWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGUucm93U2VsZWN0TW9kZSA9PT0gdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW0ubm9uZV0pIHtcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5jc3MoJ2N1cnNvcicsICdkZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUYWJsZVJvd0RpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRhYmxlUm93RGlyZWN0aXZlID0gVGFibGVSb3dEaXJlY3RpdmU7XG52YXIgVGFibGVSb3dTZWxlY3REaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxzcGFuIGNsYXNzPVwibXMtVGFibGUtcm93Q2hlY2tcIj48L3NwYW4+JztcbiAgICAgICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gWydedWlmVGFibGUnLCAnXnVpZlRhYmxlUm93J107XG4gICAgfVxuICAgIFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGFibGVSb3dTZWxlY3REaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVycykge1xuICAgICAgICBzY29wZS5yb3dTZWxlY3RDbGljayA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHRhYmxlID0gY29udHJvbGxlcnNbMF07XG4gICAgICAgICAgICB2YXIgcm93ID0gY29udHJvbGxlcnNbMV07XG4gICAgICAgICAgICBpZiAodGFibGUucm93U2VsZWN0TW9kZSAhPT0gdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW1bdGFibGVSb3dTZWxlY3RNb2RlRW51bV8xLlRhYmxlUm93U2VsZWN0TW9kZUVudW0ubXVsdGlwbGVdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdy5pdGVtID09PSB1bmRlZmluZWQgfHwgcm93Lml0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hvdWxkU2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZS5yb3dzW2ldLnNlbGVjdGVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTZWxlY3RBbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZS5yb3dzW2ldLnNlbGVjdGVkICE9PSBzaG91bGRTZWxlY3RBbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnJvd3NbaV0uc2VsZWN0ZWQgPSBzaG91bGRTZWxlY3RBbGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGluc3RhbmNlRWxlbWVudC5vbignY2xpY2snLCBzY29wZS5yb3dTZWxlY3RDbGljayk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFibGVSb3dTZWxlY3REaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5UYWJsZVJvd1NlbGVjdERpcmVjdGl2ZSA9IFRhYmxlUm93U2VsZWN0RGlyZWN0aXZlO1xudmFyIFRhYmxlQ2VsbERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVDZWxsRGlyZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJlc3RyaWN0ID0gJ0UnO1xuICAgICAgICB0aGlzLnRyYW5zY2x1ZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gJzxzcGFuIGNsYXNzPVwibXMtVGFibGUtY2VsbFwiIG5nLXRyYW5zY2x1ZGU+PC9zcGFuPic7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgfVxuICAgIFRhYmxlQ2VsbERpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRhYmxlQ2VsbERpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlQ2VsbERpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRhYmxlQ2VsbERpcmVjdGl2ZSA9IFRhYmxlQ2VsbERpcmVjdGl2ZTtcbnZhciBUYWJsZUhlYWRlckRpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGVIZWFkZXJEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPHNwYW4gY2xhc3M9XCJtcy1UYWJsZS1jZWxsXCIgbmctdHJhbnNjbHVkZT48L3NwYW4+JztcbiAgICAgICAgdGhpcy5yZXF1aXJlID0gJ151aWZUYWJsZSc7XG4gICAgfVxuICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVGFibGVIZWFkZXJEaXJlY3RpdmUoKTsgfTtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9O1xuICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCB0YWJsZSkge1xuICAgICAgICBzY29wZS5oZWFkZXJDbGljayA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgaWYgKHRhYmxlLm9yZGVyQnkgPT09IGF0dHJzLnVpZk9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5vcmRlckFzYyA9ICF0YWJsZS5vcmRlckFzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhYmxlLm9yZGVyQnkgPSBhdHRycy51aWZPcmRlckJ5O1xuICAgICAgICAgICAgICAgIHRhYmxlLm9yZGVyQXNjID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCd0YWJsZS5vcmRlckJ5JywgZnVuY3Rpb24gKG5ld09yZGVyQnksIG9sZE9yZGVyQnksIHRhYmxlSGVhZGVyU2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChvbGRPcmRlckJ5ICE9PSBuZXdPcmRlckJ5ICYmXG4gICAgICAgICAgICAgICAgbmV3T3JkZXJCeSA9PT0gYXR0cnMudWlmT3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IGluc3RhbmNlRWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzLmVxKGkpLmNoaWxkcmVuKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5lcShpKS5jaGlsZHJlbigpLmVxKDEpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudC5hcHBlbmQoJzxzcGFuIGNsYXNzPVwidWlmLXNvcnQtb3JkZXJcIj4mbmJzcDtcXFxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS1jYXJldERvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9zcGFuPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCd0YWJsZS5vcmRlckFzYycsIGZ1bmN0aW9uIChuZXdPcmRlckFzYywgb2xkT3JkZXJBc2MsIHRhYmxlSGVhZGVyU2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUVsZW1lbnQuY2hpbGRyZW4oKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ3NzQ2xhc3MgPSBvbGRPcmRlckFzYyA/ICdtcy1JY29uLS1jYXJldERvd24nIDogJ21zLUljb24tLWNhcmV0VXAnO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDc3NDbGFzcyA9IG5ld09yZGVyQXNjID8gJ21zLUljb24tLWNhcmV0RG93bicgOiAnbXMtSWNvbi0tY2FyZXRVcCc7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50LmNoaWxkcmVuKCkuZXEoMSkuY2hpbGRyZW4oKS5lcSgwKS5yZW1vdmVDbGFzcyhvbGRDc3NDbGFzcykuYWRkQ2xhc3MobmV3Q3NzQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCd1aWZPcmRlckJ5JyBpbiBhdHRycykge1xuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50Lm9uKCdjbGljaycsIHNjb3BlLmhlYWRlckNsaWNrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRhYmxlSGVhZGVyRGlyZWN0aXZlO1xufSkoKTtcbmV4cG9ydHMuVGFibGVIZWFkZXJEaXJlY3RpdmUgPSBUYWJsZUhlYWRlckRpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnRhYmxlJywgWydvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzJ10pXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGUnLCBUYWJsZURpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVSb3cnLCBUYWJsZVJvd0RpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVSb3dTZWxlY3QnLCBUYWJsZVJvd1NlbGVjdERpcmVjdGl2ZS5mYWN0b3J5KCkpXG4gICAgLmRpcmVjdGl2ZSgndWlmVGFibGVDZWxsJywgVGFibGVDZWxsRGlyZWN0aXZlLmZhY3RvcnkoKSlcbiAgICAuZGlyZWN0aXZlKCd1aWZUYWJsZUhlYWRlcicsIFRhYmxlSGVhZGVyRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGVEaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAyMFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xuKGZ1bmN0aW9uIChUYWJsZVJvd1NlbGVjdE1vZGVFbnVtKSB7XG4gICAgVGFibGVSb3dTZWxlY3RNb2RlRW51bVtUYWJsZVJvd1NlbGVjdE1vZGVFbnVtW1wibm9uZVwiXSA9IDBdID0gXCJub25lXCI7XG4gICAgVGFibGVSb3dTZWxlY3RNb2RlRW51bVtUYWJsZVJvd1NlbGVjdE1vZGVFbnVtW1wic2luZ2xlXCJdID0gMV0gPSBcInNpbmdsZVwiO1xuICAgIFRhYmxlUm93U2VsZWN0TW9kZUVudW1bVGFibGVSb3dTZWxlY3RNb2RlRW51bVtcIm11bHRpcGxlXCJdID0gMl0gPSBcIm11bHRpcGxlXCI7XG59KShleHBvcnRzLlRhYmxlUm93U2VsZWN0TW9kZUVudW0gfHwgKGV4cG9ydHMuVGFibGVSb3dTZWxlY3RNb2RlRW51bSA9IHt9KSk7XG52YXIgVGFibGVSb3dTZWxlY3RNb2RlRW51bSA9IGV4cG9ydHMuVGFibGVSb3dTZWxlY3RNb2RlRW51bTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZVJvd1NlbGVjdE1vZGVFbnVtLnRzXG4gKiogbW9kdWxlIGlkID0gMjFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcbnZhciBuZyA9IHJlcXVpcmUoJ2FuZ3VsYXInKTtcbnZhciBUZXh0RmllbGREaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRleHRGaWVsZERpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IG5nLWNsYXNzPVwie1xcJ2lzLWFjdGl2ZVxcJzogaXNBY3RpdmUsIFxcJ21zLVRleHRGaWVsZFxcJzogdHJ1ZSwgJyArXG4gICAgICAgICAgICAnXFwnbXMtVGV4dEZpZWxkLS11bmRlcmxpbmVkXFwnOiB1aWZVbmRlcmxpbmVkLCBcXCdtcy1UZXh0RmllbGQtLXBsYWNlaG9sZGVyXFwnOiBwbGFjZWhvbGRlcn1cIj4nICtcbiAgICAgICAgICAgICc8bGFiZWwgbmctc2hvdz1cImxhYmVsU2hvd25cIiBjbGFzcz1cIm1zLUxhYmVsXCI+e3t1aWZMYWJlbCB8fCBwbGFjZWhvbGRlcn19PC9sYWJlbD4nICtcbiAgICAgICAgICAgICc8aW5wdXQgbmctbW9kZWw9XCJuZ01vZGVsXCIgbmctYmx1cj1cImlucHV0Qmx1cigpXCIgbmctZm9jdXM9XCJpbnB1dEZvY3VzKClcIiBuZy1jbGljaz1cImlucHV0Q2xpY2soKVwiIGNsYXNzPVwibXMtVGV4dEZpZWxkLWZpZWxkXCIgLz4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1zLVRleHRGaWVsZC1kZXNjcmlwdGlvblwiPnt7dWlmRGVzY3JpcHRpb259fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICB0aGlzLnNjb3BlID0ge1xuICAgICAgICAgICAgbmdNb2RlbDogJz0nLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAJyxcbiAgICAgICAgICAgIHVpZkRlc2NyaXB0aW9uOiAnQCcsXG4gICAgICAgICAgICB1aWZMYWJlbDogJ0AnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgfVxuICAgIFRleHRGaWVsZERpcmVjdGl2ZS5mYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFRleHRGaWVsZERpcmVjdGl2ZSgpOyB9O1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH07XG4gICAgVGV4dEZpZWxkRGlyZWN0aXZlLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24gKHNjb3BlLCBpbnN0YW5jZUVsZW1lbnQsIGF0dHJzLCBuZ01vZGVsKSB7XG4gICAgICAgIHNjb3BlLmxhYmVsU2hvd24gPSB0cnVlO1xuICAgICAgICBzY29wZS51aWZVbmRlcmxpbmVkID0gJ3VpZlVuZGVybGluZWQnIGluIGF0dHJzO1xuICAgICAgICBzY29wZS5pbnB1dEZvY3VzID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUudWlmVW5kZXJsaW5lZCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuaW5wdXRDbGljayA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUubGFiZWxTaG93biA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5pbnB1dEJsdXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGluc3RhbmNlRWxlbWVudC5maW5kKCdpbnB1dCcpO1xuICAgICAgICAgICAgaWYgKHNjb3BlLnBsYWNlaG9sZGVyICYmIGlucHV0LnZhbCgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsU2hvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjb3BlLnVpZlVuZGVybGluZWQpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRleHRGaWVsZERpcmVjdGl2ZTtcbn0pKCk7XG5leHBvcnRzLlRleHRGaWVsZERpcmVjdGl2ZSA9IFRleHRGaWVsZERpcmVjdGl2ZTtcbmV4cG9ydHMubW9kdWxlID0gbmcubW9kdWxlKCdvZmZpY2V1aWZhYnJpYy5jb21wb25lbnRzLnRleHRmaWVsZCcsIFtcbiAgICAnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cydcbl0pXG4gICAgLmRpcmVjdGl2ZSgndWlmVGV4dGZpZWxkJywgVGV4dEZpZWxkRGlyZWN0aXZlLmZhY3RvcnkoKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vc3JjL2NvbXBvbmVudHMvdGV4dGZpZWxkL3RleHRGaWVsZERpcmVjdGl2ZS50c1xuICoqIG1vZHVsZSBpZCA9IDIyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG52YXIgbmcgPSByZXF1aXJlKCdhbmd1bGFyJyk7XG52YXIgVG9nZ2xlRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2dnbGVEaXJlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPGRpdiBuZy1jbGFzcz1cInRvZ2dsZUNsYXNzXCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtcy1Ub2dnbGUtZGVzY3JpcHRpb25cIj48bmctdHJhbnNjbHVkZS8+PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInt7OjokaWR9fVwiIGNsYXNzPVwibXMtVG9nZ2xlLWlucHV0XCIgbmctbW9kZWw9XCJuZ01vZGVsXCIgLz4nICtcbiAgICAgICAgICAgICc8bGFiZWwgZm9yPVwie3s6OiRpZH19XCIgY2xhc3M9XCJtcy1Ub2dnbGUtZmllbGRcIj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1zLUxhYmVsIG1zLUxhYmVsLS1vZmZcIj57e3VpZkxhYmVsT2ZmfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtcy1MYWJlbCBtcy1MYWJlbC0tb25cIj57e3VpZkxhYmVsT259fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgIHRoaXMucmVzdHJpY3QgPSAnRSc7XG4gICAgICAgIHRoaXMudHJhbnNjbHVkZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB7XG4gICAgICAgICAgICBuZ01vZGVsOiAnPScsXG4gICAgICAgICAgICB1aWZMYWJlbE9mZjogJ0AnLFxuICAgICAgICAgICAgdWlmTGFiZWxPbjogJ0AnLFxuICAgICAgICAgICAgdWlmVGV4dExvY2F0aW9uOiAnQCdcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVG9nZ2xlRGlyZWN0aXZlLmZhY3RvcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVG9nZ2xlRGlyZWN0aXZlKCk7IH07XG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfTtcbiAgICBUb2dnbGVEaXJlY3RpdmUucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbiAoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLnRvZ2dsZUNsYXNzID0gJ21zLVRvZ2dsZSc7XG4gICAgICAgIGlmIChzY29wZS51aWZUZXh0TG9jYXRpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2MgPSBzY29wZS51aWZUZXh0TG9jYXRpb247XG4gICAgICAgICAgICBsb2MgPSBsb2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsb2Muc2xpY2UoMSk7XG4gICAgICAgICAgICBzY29wZS50b2dnbGVDbGFzcyArPSAnIG1zLVRvZ2dsZS0tdGV4dCcgKyBsb2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUb2dnbGVEaXJlY3RpdmU7XG59KSgpO1xuZXhwb3J0cy5Ub2dnbGVEaXJlY3RpdmUgPSBUb2dnbGVEaXJlY3RpdmU7XG5leHBvcnRzLm1vZHVsZSA9IG5nLm1vZHVsZSgnb2ZmaWNldWlmYWJyaWMuY29tcG9uZW50cy50b2dnbGUnLCBbXG4gICAgJ29mZmljZXVpZmFicmljLmNvbXBvbmVudHMnXG5dKVxuICAgIC5kaXJlY3RpdmUoJ3VpZlRvZ2dsZScsIFRvZ2dsZURpcmVjdGl2ZS5mYWN0b3J5KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3NyYy9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGVEaXJlY3RpdmUudHNcbiAqKiBtb2R1bGUgaWQgPSAyM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/ngOfficeUiFabric.min.js b/ngOfficeUiFabric.min.js index 2f893c8..8fbe250 100644 --- a/ngOfficeUiFabric.min.js +++ b/ngOfficeUiFabric.min.js @@ -3,7 +3,7 @@ * http://ngofficeuifabric.com * Angular 1.x directives for Microsoft's Office UI Fabric * https://angularjs.org & https://dev.office.com/fabric - * v0.2.0 + * v0.3.0 */ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("angular"));else if("function"==typeof define&&define.amd)define(["angular"],t);else{var i=t("object"==typeof exports?require("angular"):e.angular);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(this,function(e){return function(e){function t(n){if(i[n])return i[n].exports;var o=i[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){i(1),e.exports=i(3)},function(e,t,i){"use strict";var n=i(2);t.module=n.module("officeuifabric.core",[])},function(t,i){t.exports=e},function(e,t,i){"use strict";var n=i(2),o=i(4),r=i(6),c=i(7),l=i(8),s=i(10),a=i(11),u=i(13),d=i(14),p=i(15),f=i(16),h=i(17),m=i(18);t.module=n.module("officeuifabric.components",[o.module.name,r.module.name,c.module.name,l.module.name,s.module.name,a.module.name,u.module.name,d.module.name,p.module.name,f.module.name,h.module.name,m.module.name])},function(e,t,i){"use strict";var n=i(2),o=i(5),r=function(){function e(e){this.$log=e}return e.$inject=["$log"],e}();t.ChoicefieldOptionController=r;var c=function(){function e(){this.template='
    ',this.restrict="E",this.require=["uifChoicefieldOption","^?uifChoicefieldGroup"],this.replace=!0,this.transclude=!0,this.scope={ngFalseValue:"@",ngModel:"=",ngTrueValue:"@",uifType:"@",value:"@"},this.controller=r}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){var n=e.find("input");return"ngModel"in t||n.removeAttr("ng-model"),{pre:this.preLink}},e.prototype.preLink=function(e,t,i,n,r){var c=n[0],l=n[1];if(e.$watch("uifType",function(e,t){void 0===o.ChoicefieldType[e]&&c.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.choicefield - "'+e+'" is not a valid value for uifType. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/choicefield/choicefieldTypeEnum.ts')}),null!=l){var s=function(){var e=l.getViewValue()===i.value;t.find("input").prop("checked",e)};l.addRender(s),i.$observe("value",s),t.on("$destroy",function(){l.removeRender(s)})}var a="disabled"in i,u=e.$parent.$parent;a=a||null!=u&&u.disabled,a&&t.find("input").attr("disabled","disabled"),t.on("click",function(t){a||e.$apply(function(){null!=l&&l.setViewValue(i.value,t)})})},e}();t.ChoicefieldOptionDirective=c;var l=function(){function e(e,t){this.$element=e,this.$scope=t,this.renderFns=[]}return e.prototype.init=function(){var e=this;"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel&&(this.$scope.ngModel.$render=function(){e.render()},this.render())},e.prototype.addRender=function(e){this.renderFns.push(e)},e.prototype.removeRender=function(e){this.renderFns.splice(this.renderFns.indexOf(e))},e.prototype.setViewValue=function(e,t){this.$scope.ngModel.$setViewValue(e,t),this.render()},e.prototype.getViewValue=function(){return"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel?this.$scope.ngModel.$viewValue:void 0},e.prototype.render=function(){for(var e=0;e\n {{text}}\n \n
    \n ',this.templateTypes[n.link]='
  • \n {{text}}\n
  • ',this.templateTypes[n.header]='
  • {{text}}
  • ',this.templateTypes[n.divider]='
  • '}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n,r){r(function(e){t.find("div").replaceWith(e)}),e.selectItem=function(){n.isMultiSelectionMenu()||n.onDeselectItems(),o.isUndefined(e.isSelected)&&!e.isDisabled?e.isSelected=!0:e.isSelected=!e.isSelected,n.isRootMenu()?n.onCloseMenus(e.$id):e.hasChildMenu?n.onCloseMenus(e.$id):(n.onCloseMenus(null,!0),n.onDeselectItems(!0)),e.hasChildMenu&&e.childMenuCtrl.openMenu(),o.isUndefined(e.onClick)||e.onClick()},e.$on("uif-menu-deselect",function(){e.isSelected=!1}),e.$on("uif-menu-close",function(t,i){e.hasChildMenu&&e.$id!==i&&e.childMenuCtrl.closeMenu()})},e}();t.ContextualMenuItemDirective=r;var c=function(){function e(e,t){this.$scope=e,this.$element=t}return e.prototype.setChildMenu=function(e){this.$scope.hasChildMenu=!0,this.$scope.childMenuCtrl=e},e.$inject=["$scope","$element"],e}();t.ContextualMenuItemController=c,t.contextualMenuDirectiveName="uifContextualMenu";var l=function(){function e(){this.restrict="E",this.require=t.contextualMenuDirectiveName,this.transclude=!0,this.template='
      ',this.replace=!0,this.controller=s,this.scope={isOpen:"=uifIsOpen",multiselect:"@uifMultiselect"}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,i,n,r){var c=i.controller(t.contextualMenuItemDirectiveName);o.isUndefined(c)||c.setChildMenu(r),o.isUndefined(e.multiselect)||"true"!==e.multiselect.toLowerCase()||i.addClass("ms-ContextualMenu--multiselect")},e}();t.ContextualMenuDirective=l;var s=function(){function e(e,i,n){var r=this;this.$scope=e,this.$animate=i,this.$element=n,this.isOpenClassName="is-open",o.isUndefined(n.controller(t.contextualMenuItemDirectiveName))&&(e.isRootMenu=!0),e.$watch("isOpen",function(e){i[e?"addClass":"removeClass"](n,r.isOpenClassName)})}return e.prototype.onDeselectItems=function(e){this.$scope.$broadcast("uif-menu-deselect"),e&&this.$scope.$emit("uif-menu-deselect")},e.prototype.onCloseMenus=function(e,t){t?this.$scope.$emit("uif-menu-close"):this.$scope.$broadcast("uif-menu-close",e)},e.prototype.openMenu=function(){this.$scope.isOpen=!0},e.prototype.closeMenu=function(){this.$scope.isOpen=!1},e.prototype.isRootMenu=function(){return this.$scope.isRootMenu},e.prototype.isMultiSelectionMenu=function(){return o.isUndefined(this.$scope.multiselect)?!1:"true"===this.$scope.multiselect.toLowerCase()},e.$inject=["$scope","$animate","$element"],e}();t.ContextualMenuController=s,t.module=o.module("officeuifabric.components.contextualmenu",["officeuifabric.components"]).directive(t.contextualMenuDirectiveName,l.factory()).directive(t.contextualMenuItemDirectiveName,r.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='
    • ',this.restrict="E",this.require="^uifDropdown",this.replace=!0,this.transclude=!0}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){return{post:this.postLink}},e.prototype.postLink=function(e,t,i,n,o){if(!n)throw"Dropdown controller not found!";t.on("click",function(o){e.$apply(function(){n.setViewValue(t.find("span").html(),i.value,o)})})},e}();t.DropdownOptionDirective=o;var r=function(){function e(e,t){this.$element=e,this.$scope=t}return e.prototype.init=function(){var e=this;this.$element.bind("click",function(){if(!e.$scope.disabled){e.$scope.isOpen=!e.$scope.isOpen,e.$scope.$apply();var t=angular.element(this.querySelector(".ms-Dropdown"))[0].clientWidth;angular.element(this.querySelector(".ms-Dropdown-items"))[0].style.width=t+"px"}}),"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel&&(this.$scope.ngModel.$render=function(){for(var t=e.$element.find("li"),i=0;i{{selectedTitle}}
      ',this.restrict="E",this.transclude=!0,this.require=["uifDropdown","?ngModel"],this.scope={},this.controller=r}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){return{pre:this.preLink}},e.prototype.preLink=function(e,t,i,n){var o=n[0],r=n[1];e.ngModel=r,o.init(),e.disabled="disabled"in i},e}();t.DropdownDirective=c,t.module=n.module("officeuifabric.components.dropdown",["officeuifabric.components"]).directive("uifOption",o.factory()).directive("uifDropdown",c.factory())},function(e,t,i){"use strict";var n=i(2),o=i(9),r=function(){function e(e){this.$log=e}return e.$inject=["$log"],e}(),c=function(){function e(){this.restrict="E",this.template='',this.scope={uifType:"@"},this.transclude=!0,this.controller=r,this.controllerAs="icon"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.$watch("uifType",function(t,i){void 0===o.IconEnum[t]&&n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.icon - Unsupported icon: The icon ('"+e.uifType+"') is not supported by the Office UI Fabric. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/icon/iconEnum.ts")})},e}();t.IconDirective=c,t.module=n.module("officeuifabric.components.icon",["officeuifabric.components"]).directive("uifIcon",c.factory())},function(e,t){"use strict";!function(e){e[e.alert=0]="alert",e[e.alert2=1]="alert2",e[e.alertOutline=2]="alertOutline",e[e.arrowDown=3]="arrowDown",e[e.arrowDown2=4]="arrowDown2",e[e.arrowDownLeft=5]="arrowDownLeft",e[e.arrowDownRight=6]="arrowDownRight",e[e.arrowLeft=7]="arrowLeft",e[e.arrowRight=8]="arrowRight",e[e.arrowUp=9]="arrowUp",e[e.arrowUp2=10]="arrowUp2",e[e.arrowUpLeft=11]="arrowUpLeft",e[e.arrowUpRight=12]="arrowUpRight",e[e.ascending=13]="ascending",e[e.at=14]="at",e[e.attachment=15]="attachment",e[e.bag=16]="bag",e[e.balloon=17]="balloon",e[e.bell=18]="bell",e[e.boards=19]="boards",e[e.bold=20]="bold",e[e.bookmark=21]="bookmark",e[e.books=22]="books",e[e.briefcase=23]="briefcase",e[e.bundle=24]="bundle",e[e.cake=25]="cake",e[e.calendar=26]="calendar",e[e.calendarDay=27]="calendarDay",e[e.calendarPublic=28]="calendarPublic",e[e.calendarWeek=29]="calendarWeek",e[e.calendarWorkWeek=30]="calendarWorkWeek",e[e.camera=31]="camera",e[e.car=32]="car",e[e.caretDown=33]="caretDown",e[e.caretDownLeft=34]="caretDownLeft",e[e.caretDownOutline=35]="caretDownOutline",e[e.caretDownRight=36]="caretDownRight",e[e.caretLeft=37]="caretLeft",e[e.caretLeftOutline=38]="caretLeftOutline",e[e.caretRight=39]="caretRight",e[e.caretRightOutline=40]="caretRightOutline",e[e.caretUp=41]="caretUp",e[e.caretUpLeft=42]="caretUpLeft",e[e.caretUpOutline=43]="caretUpOutline",e[e.caretUpRight=44]="caretUpRight",e[e.cart=45]="cart",e[e.cat=46]="cat",e[e.chart=47]="chart",e[e.chat=48]="chat",e[e.chatAdd=49]="chatAdd",e[e.check=50]="check",e[e.checkbox=51]="checkbox",e[e.checkboxCheck=52]="checkboxCheck",e[e.checkboxEmpty=53]="checkboxEmpty",e[e.checkboxMixed=54]="checkboxMixed",e[e.checkPeople=55]="checkPeople",e[e.chevronDown=56]="chevronDown",e[e.chevronLeft=57]="chevronLeft",e[e.chevronRight=58]="chevronRight",e[e.chevronsDown=59]="chevronsDown",e[e.chevronsLeft=60]="chevronsLeft",e[e.chevronsRight=61]="chevronsRight",e[e.chevronsUp=62]="chevronsUp",e[e.chevronThickDown=63]="chevronThickDown",e[e.chevronThickLeft=64]="chevronThickLeft",e[e.chevronThickRight=65]="chevronThickRight",e[e.chevronThickUp=66]="chevronThickUp",e[e.chevronThinDown=67]="chevronThinDown",e[e.chevronThinLeft=68]="chevronThinLeft",e[e.chevronThinRight=69]="chevronThinRight",e[e.chevronThinUp=70]="chevronThinUp",e[e.chevronUp=71]="chevronUp",e[e.circle=72]="circle",e[e.circleBall=73]="circleBall",e[e.circleBalloons=74]="circleBalloons",e[e.circleCar=75]="circleCar",e[e.circleCat=76]="circleCat",e[e.circleCoffee=77]="circleCoffee",e[e.circleDog=78]="circleDog",e[e.circleEmpty=79]="circleEmpty",e[e.circleFill=80]="circleFill",e[e.circleFilled=81]="circleFilled",e[e.circleHalfFilled=82]="circleHalfFilled",e[e.circleInfo=83]="circleInfo",e[e.circleLightning=84]="circleLightning",e[e.circlePill=85]="circlePill",e[e.circlePlane=86]="circlePlane",e[e.circlePlus=87]="circlePlus",e[e.circlePoodle=88]="circlePoodle",e[e.circleUnfilled=89]="circleUnfilled",e[e.classNotebook=90]="classNotebook",e[e.classroom=91]="classroom",e[e.clock=92]="clock",e[e.clutter=93]="clutter",e[e.coffee=94]="coffee",e[e.collapse=95]="collapse",e[e.conflict=96]="conflict",e[e.contact=97]="contact",e[e.contactForm=98]="contactForm",e[e.contactPublic=99]="contactPublic",e[e.copy=100]="copy",e[e.creditCard=101]="creditCard",e[e.creditCardOutline=102]="creditCardOutline",e[e.dashboard=103]="dashboard",e[e.descending=104]="descending",e[e.desktop=105]="desktop",e[e.deviceWipe=106]="deviceWipe",e[e.dialpad=107]="dialpad",e[e.directions=108]="directions",e[e.document=109]="document",e[e.documentAdd=110]="documentAdd",e[e.documentForward=111]="documentForward",e[e.documentLandscape=112]="documentLandscape",e[e.documentPDF=113]="documentPDF",e[e.documentReply=114]="documentReply",e[e.documents=115]="documents",e[e.documentSearch=116]="documentSearch",e[e.dog=117]="dog",e[e.dogAlt=118]="dogAlt",e[e.dot=119]="dot",e[e.download=120]="download",e[e.drm=121]="drm",e[e.drop=122]="drop",e[e.dropdown=123]="dropdown",e[e.editBox=124]="editBox",e[e.ellipsis=125]="ellipsis",e[e.embed=126]="embed",e[e.event=127]="event",e[e.eventCancel=128]="eventCancel",e[e.eventInfo=129]="eventInfo",e[e.eventRecurring=130]="eventRecurring",e[e.eventShare=131]="eventShare",e[e.exclamation=132]="exclamation",e[e.expand=133]="expand",e[e.eye=134]="eye",e[e.favorites=135]="favorites",e[e.fax=136]="fax",e[e.fieldMail=137]="fieldMail",e[e.fieldNumber=138]="fieldNumber",e[e.fieldText=139]="fieldText",e[e.fieldTextBox=140]="fieldTextBox",e[e.fileDocument=141]="fileDocument",e[e.fileImage=142]="fileImage",e[e.filePDF=143]="filePDF",e[e.filter=144]="filter",e[e.filterClear=145]="filterClear",e[e.firstAid=146]="firstAid",e[e.flag=147]="flag",e[e.folder=148]="folder",e[e.folderMove=149]="folderMove",e[e.folderPublic=150]="folderPublic",e[e.folderSearch=151]="folderSearch",e[e.fontColor=152]="fontColor",e[e.fontDecrease=153]="fontDecrease",e[e.fontIncrease=154]="fontIncrease",e[e.frowny=155]="frowny",e[e.fullscreen=156]="fullscreen",e[e.gear=157]="gear",e[e.glasses=158]="glasses",e[e.globe=159]="globe",e[e.graph=160]="graph",e[e.group=161]="group",e[e.header=162]="header",e[e.heart=163]="heart",e[e.heartEmpty=164]="heartEmpty",e[e.hide=165]="hide",e[e.home=166]="home",e[e.inboxCheck=167]="inboxCheck",e[e.info=168]="info",e[e.infoCircle=169]="infoCircle",e[e.italic=170]="italic",e[e.key=171]="key",e[e.late=172]="late",e[e.lifesaver=173]="lifesaver",e[e.lifesaverLock=174]="lifesaverLock",e[e.lightBulb=175]="lightBulb",e[e.lightning=176]="lightning",e[e.link=177]="link",e[e.linkRemove=178]="linkRemove",e[e.listBullets=179]="listBullets",e[e.listCheck=180]="listCheck",e[e.listCheckbox=181]="listCheckbox",e[e.listGroup=182]="listGroup",e[e.listGroup2=183]="listGroup2",e[e.listNumbered=184]="listNumbered",e[e.lock=185]="lock",e[e.mail=186]="mail",e[e.mailCheck=187]="mailCheck",e[e.mailDown=188]="mailDown",e[e.mailEdit=189]="mailEdit",e[e.mailEmpty=190]="mailEmpty",e[e.mailError=191]="mailError",e[e.mailOpen=192]="mailOpen",e[e.mailPause=193]="mailPause",e[e.mailPublic=194]="mailPublic",e[e.mailRead=195]="mailRead",e[e.mailSend=196]="mailSend",e[e.mailSync=197]="mailSync",e[e.mailUnread=198]="mailUnread",e[e.mapMarker=199]="mapMarker",e[e.meal=200]="meal",e[e.menu=201]="menu",e[e.menu2=202]="menu2",e[e.merge=203]="merge",e[e.metadata=204]="metadata",e[e.microphone=205]="microphone",e[e.miniatures=206]="miniatures",e[e.minus=207]="minus",e[e.mobile=208]="mobile",e[e.money=209]="money",e[e.move=210]="move",e[e.multiChoice=211]="multiChoice",e[e.music=212]="music",e[e.navigate=213]="navigate",e[e["new"]=214]="new",e[e.newsfeed=215]="newsfeed",e[e.note=216]="note",e[e.notebook=217]="notebook",e[e.noteEdit=218]="noteEdit",e[e.noteForward=219]="noteForward",e[e.noteReply=220]="noteReply",e[e.notRecurring=221]="notRecurring",e[e.onedrive=222]="onedrive",e[e.onlineAdd=223]="onlineAdd",e[e.onlineJoin=224]="onlineJoin",e[e.oofReply=225]="oofReply",e[e.org=226]="org",e[e.page=227]="page",e[e.paint=228]="paint",e[e.panel=229]="panel",e[e.partner=230]="partner",e[e.pause=231]="pause",e[e.pencil=232]="pencil",e[e.people=233]="people",e[e.peopleAdd=234]="peopleAdd",e[e.peopleCheck=235]="peopleCheck",e[e.peopleError=236]="peopleError",e[e.peoplePause=237]="peoplePause",e[e.peopleRemove=238]="peopleRemove",e[e.peopleSecurity=239]="peopleSecurity",e[e.peopleSync=240]="peopleSync",e[e.person=241]="person",e[e.personAdd=242]="personAdd",e[e.personRemove=243]="personRemove",e[e.phone=244]="phone",e[e.phoneAdd=245]="phoneAdd",e[e.phoneTransfer=246]="phoneTransfer",e[e.picture=247]="picture",e[e.pictureAdd=248]="pictureAdd",e[e.pictureEdit=249]="pictureEdit",e[e.pictureRemove=250]="pictureRemove",e[e.pill=251]="pill",e[e.pinDown=252]="pinDown",e[e.pinLeft=253]="pinLeft",e[e.placeholder=254]="placeholder",e[e.plane=255]="plane",e[e.play=256]="play",e[e.plus=257]="plus",e[e.plus2=258]="plus2",e[e.pointItem=259]="pointItem",e[e.popout=260]="popout",e[e.post=261]="post",e[e.print=262]="print",e[e.protectionCenter=263]="protectionCenter",e[e.question=264]="question",e[e.questionReverse=265]="questionReverse",e[e.quote=266]="quote",e[e.radioButton=267]="radioButton",e[e.reactivate=268]="reactivate",e[e.receiptCheck=269]="receiptCheck",e[e.receiptForward=270]="receiptForward",e[e.receiptReply=271]="receiptReply",e[e.refresh=272]="refresh",e[e.reload=273]="reload",e[e.reply=274]="reply",e[e.replyAll=275]="replyAll",e[e.replyAllAlt=276]="replyAllAlt",e[e.replyAlt=277]="replyAlt",e[e.ribbon=278]="ribbon",e[e.room=279]="room",e[e.save=280]="save",e[e.scheduling=281]="scheduling",e[e.search=282]="search",e[e.section=283]="section",e[e.sections=284]="sections",e[e.settings=285]="settings",e[e.share=286]="share",e[e.shield=287]="shield",e[e.sites=288]="sites",e[e.smiley=289]="smiley",e[e.soccer=290]="soccer",e[e.socialListening=291]="socialListening",e[e.sort=292]="sort",e[e.sortLines=293]="sortLines",e[e.split=294]="split",e[e.star=295]="star",e[e.starEmpty=296]="starEmpty",e[e.stopwatch=297]="stopwatch",e[e.story=298]="story",e[e.styleRemove=299]="styleRemove",e[e.subscribe=300]="subscribe",e[e.sun=301]="sun",e[e.sunAdd=302]="sunAdd",e[e.sunQuestion=303]="sunQuestion",e[e.support=304]="support",e[e.table=305]="table",e[e.tablet=306]="tablet",e[e.tag=307]="tag",e[e.taskRecurring=308]="taskRecurring",e[e.tasks=309]="tasks",e[e.teamwork=310]="teamwork",e[e.text=311]="text",e[e.textBox=312]="textBox",e[e.tile=313]="tile",e[e.timeline=314]="timeline",e[e.today=315]="today",e[e.toggle=316]="toggle",e[e.toggleMiddle=317]="toggleMiddle",e[e.touch=318]="touch",e[e.trash=319]="trash",e[e.triangleDown=320]="triangleDown",e[e.triangleEmptyDown=321]="triangleEmptyDown",e[e.triangleEmptyLeft=322]="triangleEmptyLeft",e[e.triangleEmptyRight=323]="triangleEmptyRight",e[e.triangleEmptyUp=324]="triangleEmptyUp",e[e.triangleLeft=325]="triangleLeft",e[e.triangleRight=326]="triangleRight",e[e.triangleUp=327]="triangleUp",e[e.trophy=328]="trophy",e[e.underline=329]="underline",e[e.unsubscribe=330]="unsubscribe",e[e.upload=331]="upload",e[e.video=332]="video",e[e.voicemail=333]="voicemail",e[e.voicemailForward=334]="voicemailForward",e[e.voicemailReply=335]="voicemailReply",e[e.waffle=336]="waffle",e[e.work=337]="work",e[e.wrench=338]="wrench",e[e.x=339]="x",e[e.xCircle=340]="xCircle"}(t.IconEnum||(t.IconEnum={}));t.IconEnum},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.restrict="E",this.template='',this.scope={ngHref:"@"},this.transclude=!0,this.replace=!0}return e.factory=function(){var t=function(){return new e};return t},e}();t.LinkDirective=o,t.module=n.module("officeuifabric.components.link",["officeuifabric.components"]).directive("uifLink",o.factory())},function(e,t,i){"use strict";var n=i(2),o=i(12),r=(function(){function e(e){this.log=e}return e.$inject=["$log"],e}(),function(){function e(t){this.log=t,this.restrict="E",this.template="
      ",this.scope={uifMode:"@"},this.transclude=!0,e.log=t}return e.factory=function(){var t=function(t){return new e(t)};return t.$inject=["$log"],t},e.prototype.link=function(t){t.$watch("uifMode",function(i,n){void 0===o.OverlayMode[i]&&e.log.error("Error [ngOfficeUiFabric] officeuifabric.components.overlay - Unsupported overlay mode: The overlay mode ('"+t.uifMode+"') is not supported by the Office UI Fabric. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/overlay/overlayModeEnum.ts")})},e}());t.OverlayDirective=r,t.module=n.module("officeuifabric.components.overlay",["officeuifabric.components"]).directive("uifOverlay",r.factory())},function(e,t){"use strict";!function(e){e[e.light=0]="light",e[e.dark=1]="dark"}(t.OverlayMode||(t.OverlayMode={}));t.OverlayMode},function(e,t,i){"use strict";var n=i(2),o=function(){function e(t){this.log=t,this.restrict="E",this.template='
      {{uifName}}
      {{uifDescription}}
      ',this.scope={uifDescription:"@",uifName:"@",uifPercentComplete:"@"},e.log=t}return e.factory=function(){var t=function(t){return new e(t)};return t.$inject=["$log"],t},e.prototype.link=function(t){t.$watch("uifPercentComplete",function(i,n){if(null==i||""===i)return void(t.uifPercentComplete=0);var o=parseFloat(i);(isNaN(o)||0>o||o>100)&&(e.log.error("Error [ngOfficeUiFabric] officeuifabric.components.progressindicator - Percent complete must be a valid number between 0 and 100."),t.uifPercentComplete=Math.max(Math.min(o,100),0))})},e}();t.ProgressIndicatorDirective=o,t.module=n.module("officeuifabric.components.progressindicator",["officeuifabric.components"]).directive("uifProgressIndicator",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='',this.scope={placeholder:"=",value:"="}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i){e.isFocus=!1,e.isCancel=!1,e.isLabelHidden=!1,e.isActive=!1,e.inputFocus=function(){e.isFocus=!0,e.isLabelHidden=!0,e.isActive=!0},e.inputBlur=function(){e.isCancel&&(e.value="",e.isLabelHidden=!1),e.isActive=!1,("undefined"==typeof e.value||""===e.value)&&(e.isLabelHidden=!1),e.isFocus=e.isCancel=!1},e.btnMousedown=function(){e.isCancel=!0},e.$watch("value",function(t){e.isFocus||(t&&""!==t?e.isLabelHidden=!0:e.isLabelHidden=!1,e.value=t)}),e.$watch("placeholder",function(t){e.placeholder=t})},e}();t.SearchBoxDirective=o,t.module=n.module("officeuifabric.components.searchbox",["officeuifabric.components"]).directive("uifSearchbox",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='
      ',this.controller=r,this.scope={ngShow:"="}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,o,r){"large"===i.uifSpinnersize&&t.addClass("ms-Spinner--large"),null!=i.ngShow?e.$watch("ngShow",function(e,t,i){e?i.start():i.stop()}):e.start(),r(function(e){if(e.length>0){var i=n.element("
      ");i.addClass("ms-Spinner-label").append(e),t.append(i)}}),e.init()},e}();t.SpinnerDirective=o;var r=function(){function e(e,t,i){var n=this;this.$scope=e,this.$element=t,this.$interval=i,this._offsetSize=.179,this._numCircles=8,this._animationSpeed=90,this._circles=[],e.init=function(){n.createCirclesAndArrange(),n.setInitialOpacity()},e.start=function(){n._animationInterval=i(function(){for(var e=n._circles.length;e--;)n.fadeCircle(n._circles[e])},n._animationSpeed)},e.stop=function(){i.cancel(n._animationInterval)}}return e.prototype.createCirclesAndArrange=function(){for(var e=this.$element[0].clientWidth,t=this.$element[0].clientHeight,i=0,n=e*this._offsetSize,o=2*Math.PI/this._numCircles,r=this._numCircles,l=.5*(e-n);r--;){var s=this.createCircle(),a=Math.round(.5*e+l*Math.cos(i)-.5*s[0].clientWidth)-.5*n,u=Math.round(.5*t+l*Math.sin(i)-.5*s[0].clientHeight)-.5*n;this.$element.append(s),s.css("left",a+"px"),s.css("top",u+"px"),i+=o;var d=new c(s,r);this._circles.push(d)}},e.prototype.createCircle=function(){var e=n.element("
      "),t=this.$element[0].clientWidth,i=t*this._offsetSize+"px";return e.addClass("ms-Spinner-circle").css("width",i).css("height",i),e},e.prototype.setInitialOpacity=function(){var e,t=this;this._fadeIncrement=1/this._numCircles,this._circles.forEach(function(i,n){e=t._fadeIncrement*(n+1),i.opacity=e})},e.prototype.fadeCircle=function(e){var t=e.opacity-this._fadeIncrement;0>=t&&(t=1),e.opacity=t},e.$inject=["$scope","$element","$interval"],e}(),c=function(){function e(e,t){this.circleElement=e,this.circleIndex=t}return Object.defineProperty(e.prototype,"opacity",{get:function(){return+this.circleElement.css("opacity")},set:function(e){this.circleElement.css("opacity",e)},enumerable:!0,configurable:!0}),e}();t.module=n.module("officeuifabric.components.spinner",["officeuifabric.components"]).directive("uifSpinner",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(e){this.$scope=e,this.$scope.orderBy=null,this.$scope.orderAsc=!0}return Object.defineProperty(e.prototype,"orderBy",{get:function(){return this.$scope.orderBy},set:function(e){this.$scope.orderBy=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"orderAsc",{get:function(){return this.$scope.orderAsc},set:function(e){this.$scope.orderAsc=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),e.$inject=["$scope"],e}(),r=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='
      ',this.controller=o,this.controllerAs="table"}return e.factory=function(){var t=function(){return new e};return t},e}();t.TableDirective=r;var c=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='
      '}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i){"true"===i.uifSelected&&t.addClass("is-selected")},e}();t.TableRowDirective=c;var l=function(){function e(){this.restrict="E",this.template='',this.replace=!0}return e.factory=function(){var t=function(){return new e};return t},e}();t.TableRowSelectDirective=l;var s=function(){function e(){this.restrict="E",this.transclude=!0,this.template='',this.replace=!0}return e.factory=function(){var t=function(){return new e};return t},e}();t.TableCellDirective=s;var a=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='',this.require="^uifTable"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.headerClick=function(e){n.orderBy===i.uifOrderBy?n.orderAsc=!n.orderAsc:(n.orderBy=i.uifOrderBy,n.orderAsc=!0)},e.$watch("table.orderBy",function(e,n,o){if(n!==e&&e===i.uifOrderBy){for(var r=t.parent().children(),c=0;c  ')}}),e.$watch("table.orderAsc",function(e,i,n){if(2===t.children().length){var o=i?"ms-Icon--caretDown":"ms-Icon--caretUp",r=e?"ms-Icon--caretDown":"ms-Icon--caretUp";t.children().eq(1).children().eq(0).removeClass(o).addClass(r)}}),"uifOrderBy"in i&&t.on("click",e.headerClick)},e}();t.TableHeaderDirective=a,t.module=n.module("officeuifabric.components.table",["officeuifabric.components"]).directive("uifTable",r.factory()).directive("uifTableRow",c.factory()).directive("uifTableRowSelect",l.factory()).directive("uifTableCell",s.factory()).directive("uifTableHeader",a.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template="
      "+'{{uifDescription}}
      ', -this.scope={ngModel:"=",placeholder:"@",uifDescription:"@",uifLabel:"@"},this.restrict="E"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.labelShown=!0,e.uifUnderlined="uifUnderlined"in i,e.inputFocus=function(t){e.uifUnderlined&&(e.isActive=!0)},e.inputClick=function(t){e.placeholder&&(e.labelShown=!1)},e.inputBlur=function(i){var n=t.find("input");e.placeholder&&0===n.val().length&&(e.labelShown=!0),e.uifUnderlined&&(e.isActive=!1)}},e}();t.TextFieldDirective=o,t.module=n.module("officeuifabric.components.textfield",["officeuifabric.components"]).directive("uifTextfield",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='
      ',this.restrict="E",this.transclude=!0,this.scope={ngModel:"=",uifLabelOff:"@",uifLabelOn:"@",uifTextLocation:"@"}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i){if(e.toggleClass="ms-Toggle",e.uifTextLocation){var n=e.uifTextLocation;n=n.charAt(0).toUpperCase()+n.slice(1),e.toggleClass+=" ms-Toggle--text"+n}},e}();t.ToggleDirective=o,t.module=n.module("officeuifabric.components.toggle",["officeuifabric.components"]).directive("uifToggle",o.factory())}])}); \ No newline at end of file +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("angular"));else if("function"==typeof define&&define.amd)define(["angular"],t);else{var i=t("object"==typeof exports?require("angular"):e.angular);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(this,function(e){return function(e){function t(n){if(i[n])return i[n].exports;var o=i[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){i(1),e.exports=i(3)},function(e,t,i){"use strict";var n=i(2);t.module=n.module("officeuifabric.core",[])},function(t,i){t.exports=e},function(e,t,i){"use strict";var n=i(2),o=i(4),r=i(7),c=i(9),l=i(10),s=i(11),a=i(13),u=i(14),d=i(16),f=i(17),p=i(18),h=i(20),m=i(22),v=i(23);t.module=n.module("officeuifabric.components",[o.module.name,r.module.name,c.module.name,l.module.name,s.module.name,a.module.name,u.module.name,d.module.name,f.module.name,p.module.name,h.module.name,m.module.name,v.module.name])},function(e,t,i){"use strict";var n=i(2),o=i(5),r=i(6),c=function(){function e(e){this.$log=e}return e.$inject=["$log"],e}();t.CalloutController=c;var l=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!1,this.scope=!1,this.template='

      '}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,o){var r=t.parent().parent();if(!n.isUndefined(r)&&r.hasClass("ms-Callout-main")){var c=t.detach();r.prepend(c)}},e}();t.CalloutHeaderDirective=l;var s=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!1,this.scope=!1,this.template='

      '}return e.factory=function(){var t=function(){return new e};return t},e}();t.CalloutContentDirective=s;var a=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!1,this.scope=!1,this.template='
      '}return e.factory=function(){var t=function(){return new e};return t},e}();t.CalloutActionsDirective=a;var u=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!1,this.template="
      "+'
      ',this.require=["uifCallout"],this.scope={ngShow:"=",uifType:"@"},this.controller=c}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,c){var l=c[0];if(i.$observe("uifType",function(e){n.isUndefined(o.CalloutType[e])&&l.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.callout - "'+e+'" is not a valid value for uifType. It should be oobe or peek')}),i.uifArrow||(e.arrowDirection="Left"),i.$observe("uifArrow",function(t){if(n.isUndefined(r.CalloutArrow[t]))return void l.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.callout - "'+t+'" is not a valid value for uifArrow. It should be left, right, top, bottom.');var i=t.charAt(0).toUpperCase();i+=t.slice(1).toLowerCase(),e.arrowDirection=i}),e.hasSeparator=!n.isUndefined(i.uifActionText)||!n.isUndefined(i.uifSeparator),!n.isUndefined(i.uifClose)){e.closeButton=!0;var s=n.element(''),a=t.find("div").eq(0);a.append(s),s.bind("click",function(t){e.ngShow=!1,e.closeButtonClicked=!0,e.$apply()})}t.bind("mouseenter",function(t){e.isMouseOver=!0,e.$apply()}),t.bind("mouseleave",function(t){e.isMouseOver=!1,e.$apply()}),e.$watch("ngShow",function(t,i){var n=!t&&e.closeButtonClicked;return n?void(e.ngShow=e.closeButtonClicked=!1):void(t||(e.ngShow=e.isMouseOver))}),e.$watch("isMouseOver",function(t,i){!t&&i&&(e.closeButton||(e.ngShow=!1))})},e}();t.CalloutDirective=u,t.module=n.module("officeuifabric.components.callout",["officeuifabric.components"]).directive("uifCallout",u.factory()).directive("uifCalloutHeader",l.factory()).directive("uifCalloutContent",s.factory()).directive("uifCalloutActions",a.factory())},function(e,t){"use strict";!function(e){e[e.oobe=0]="oobe",e[e.peek=1]="peek"}(t.CalloutType||(t.CalloutType={}));t.CalloutType},function(e,t){"use strict";!function(e){e[e.left=0]="left",e[e.right=1]="right",e[e.top=2]="top",e[e.bottom=3]="bottom"}(t.CalloutArrow||(t.CalloutArrow={}));t.CalloutArrow},function(e,t,i){"use strict";var n=i(2),o=i(8),r=function(){function e(e){this.$log=e}return e.$inject=["$log"],e}();t.ChoicefieldOptionController=r;var c=function(){function e(){this.template='
      ',this.restrict="E",this.require=["uifChoicefieldOption","^?uifChoicefieldGroup"],this.replace=!0,this.transclude=!0,this.scope={ngFalseValue:"@",ngModel:"=",ngTrueValue:"@",uifType:"@",value:"@"},this.controller=r}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){var n=e.find("input");return"ngModel"in t||n.removeAttr("ng-model"),{pre:this.preLink}},e.prototype.preLink=function(e,t,i,n,r){var c=n[0],l=n[1];if(e.$watch("uifType",function(e,t){void 0===o.ChoicefieldType[e]&&c.$log.error('Error [ngOfficeUiFabric] officeuifabric.components.choicefield - "'+e+'" is not a valid value for uifType. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/choicefield/choicefieldTypeEnum.ts')}),null!=l){var s=function(){var e=l.getViewValue()===i.value;t.find("input").prop("checked",e)};l.addRender(s),i.$observe("value",s),t.on("$destroy",function(){l.removeRender(s)})}var a="disabled"in i,u=e.$parent.$parent;a=a||null!=u&&u.disabled,a&&t.find("input").attr("disabled","disabled"),t.on("click",function(t){a||e.$apply(function(){null!=l&&l.setViewValue(i.value,t)})})},e}();t.ChoicefieldOptionDirective=c;var l=function(){function e(e,t){this.$element=e,this.$scope=t,this.renderFns=[]}return e.prototype.init=function(){var e=this;"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel&&(this.$scope.ngModel.$render=function(){e.render()},this.render())},e.prototype.addRender=function(e){this.renderFns.push(e)},e.prototype.removeRender=function(e){this.renderFns.splice(this.renderFns.indexOf(e))},e.prototype.setViewValue=function(e,t){this.$scope.ngModel.$setViewValue(e,t),this.render()},e.prototype.getViewValue=function(){return"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel?this.$scope.ngModel.$viewValue:void 0},e.prototype.render=function(){for(var e=0;e\n {{text}}\n \n
      \n ',this.templateTypes[n.link]='
    • \n {{text}}\n
    • ',this.templateTypes[n.header]='
    • {{text}}
    • ',this.templateTypes[n.divider]='
    • '}return e.factory=function(){var t=function(t){return new e(t)};return t.$inject=["$log"],t},e.prototype.link=function(e,t,i,n,r){"boolean"!=typeof e.isDisabled&&void 0!==e.isDisabled&&n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - invalid attribute type: 'uif-is-disabled'.\nThe type '"+typeof e.isDisabled+"' is not supported as valid type for 'uif-is-disabled' attribute for . The valid type is boolean."),"boolean"!=typeof e.isSelected&&void 0!==e.isSelected&&n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - invalid attribute type: 'uif-is-selected'.\nThe type '"+typeof e.isSelected+"' is not supported as valid type for 'uif-is-selected' attribute for . The valid type is boolean."),r(function(e){t.find("div").replaceWith(e)}),e.selectItem=function(){n.isMultiSelectionMenu()||n.onDeselectItems(),o.isUndefined(e.isSelected)&&!e.isDisabled?e.isSelected=!0:e.isSelected=!e.isSelected,n.isRootMenu()?n.onCloseMenus(e.$id):e.hasChildMenu?n.onCloseMenus(e.$id):(n.onCloseMenus(null,!0),n.onDeselectItems(!0)),e.hasChildMenu&&e.childMenuCtrl.openMenu(),o.isUndefined(e.onClick)||e.onClick()},e.$on("uif-menu-deselect",function(){e.isSelected=!1}),e.$on("uif-menu-close",function(t,i){e.hasChildMenu&&e.$id!==i&&e.childMenuCtrl.closeMenu()})},e}();t.ContextualMenuItemDirective=r;var c=function(){function e(e,t){this.$scope=e,this.$element=t}return e.prototype.setChildMenu=function(e){this.$scope.hasChildMenu=!0,this.$scope.childMenuCtrl=e},e.$inject=["$scope","$element"],e}();t.ContextualMenuItemController=c;var l=function(){function e(){this.restrict="E",this.require=t.contextualMenuDirectiveName,this.transclude=!0,this.template='
        ',this.replace=!0,this.controller=s,this.scope={isOpen:"=uifIsOpen",multiselect:"@uifMultiselect"}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,i,n,r){var c=i.controller(t.contextualMenuItemDirectiveName);o.isUndefined(c)||c.setChildMenu(r),o.isUndefined(e.multiselect)||"true"!==e.multiselect.toLowerCase()||i.addClass("ms-ContextualMenu--multiselect")},e}();t.ContextualMenuDirective=l;var s=function(){function e(e,i,n,r){var c=this;this.$scope=e,this.$animate=i,this.$element=n,this.$log=r,this.isOpenClassName="is-open",o.isUndefined(n.controller(t.contextualMenuItemDirectiveName))&&(e.isRootMenu=!0),e.$watch("isOpen",function(e){"boolean"!=typeof e&&void 0!==e&&c.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.contextualmenu - invalid attribute type: 'uif-is-open'.\nThe type '"+typeof e+"' is not supported as valid type for 'uif-is-open' attribute for . The valid type is boolean."),i[e?"addClass":"removeClass"](n,c.isOpenClassName)})}return e.prototype.onDeselectItems=function(e){this.$scope.$broadcast("uif-menu-deselect"),e&&this.$scope.$emit("uif-menu-deselect")},e.prototype.onCloseMenus=function(e,t){t?this.$scope.$emit("uif-menu-close"):this.$scope.$broadcast("uif-menu-close",e)},e.prototype.openMenu=function(){this.$scope.isOpen=!0},e.prototype.closeMenu=function(){this.$scope.isOpen=!1},e.prototype.isRootMenu=function(){return this.$scope.isRootMenu},e.prototype.isMultiSelectionMenu=function(){return o.isUndefined(this.$scope.multiselect)?!1:"true"===this.$scope.multiselect.toLowerCase()},e.$inject=["$scope","$animate","$element","$log"],e}();t.ContextualMenuController=s,t.module=o.module("officeuifabric.components.contextualmenu",["officeuifabric.components"]).directive(t.contextualMenuDirectiveName,l.factory()).directive(t.contextualMenuItemDirectiveName,r.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='
      • ',this.restrict="E",this.require="^uifDropdown",this.replace=!0,this.transclude=!0}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){return{post:this.postLink}},e.prototype.postLink=function(e,t,i,n,o){if(!n)throw"Dropdown controller not found!";t.on("click",function(o){e.$apply(function(){n.setViewValue(t.find("span").html(),i.value,o)})})},e}();t.DropdownOptionDirective=o;var r=function(){function e(e,t){this.$element=e,this.$scope=t}return e.prototype.init=function(){var e=this;this.$element.bind("click",function(){if(!e.$scope.disabled){e.$scope.isOpen=!e.$scope.isOpen,e.$scope.$apply();var t=angular.element(this.querySelector(".ms-Dropdown"))[0].clientWidth;angular.element(this.querySelector(".ms-Dropdown-items"))[0].style.width=t+"px"}}),"undefined"!=typeof this.$scope.ngModel&&null!=this.$scope.ngModel&&(this.$scope.ngModel.$render=function(){for(var t=e.$element.find("li"),i=0;i{{selectedTitle}}
        ',this.restrict="E",this.transclude=!0,this.require=["uifDropdown","?ngModel"],this.scope={},this.controller=r}return e.factory=function(){var t=function(){return new e};return t},e.prototype.compile=function(e,t,i){return{pre:this.preLink}},e.prototype.preLink=function(e,t,i,n){var o=n[0],r=n[1];e.ngModel=r,o.init(),e.disabled="disabled"in i},e}();t.DropdownDirective=c,t.module=n.module("officeuifabric.components.dropdown",["officeuifabric.components"]).directive("uifOption",o.factory()).directive("uifDropdown",c.factory())},function(e,t,i){"use strict";var n=i(2),o=i(12),r=function(){function e(e){this.$log=e}return e.$inject=["$log"],e}(),c=function(){function e(){this.restrict="E",this.template='',this.scope={uifType:"@"},this.transclude=!0,this.controller=r,this.controllerAs="icon"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.$watch("uifType",function(t,i){void 0===o.IconEnum[t]&&n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.icon - Unsupported icon: The icon ('"+e.uifType+"') is not supported by the Office UI Fabric. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/icon/iconEnum.ts")})},e}();t.IconDirective=c,t.module=n.module("officeuifabric.components.icon",["officeuifabric.components"]).directive("uifIcon",c.factory())},function(e,t){"use strict";!function(e){e[e.alert=0]="alert",e[e.alert2=1]="alert2",e[e.alertOutline=2]="alertOutline",e[e.arrowDown=3]="arrowDown",e[e.arrowDown2=4]="arrowDown2",e[e.arrowDownLeft=5]="arrowDownLeft",e[e.arrowDownRight=6]="arrowDownRight",e[e.arrowLeft=7]="arrowLeft",e[e.arrowRight=8]="arrowRight",e[e.arrowUp=9]="arrowUp",e[e.arrowUp2=10]="arrowUp2",e[e.arrowUpLeft=11]="arrowUpLeft",e[e.arrowUpRight=12]="arrowUpRight",e[e.ascending=13]="ascending",e[e.at=14]="at",e[e.attachment=15]="attachment",e[e.bag=16]="bag",e[e.balloon=17]="balloon",e[e.bell=18]="bell",e[e.boards=19]="boards",e[e.bold=20]="bold",e[e.bookmark=21]="bookmark",e[e.books=22]="books",e[e.briefcase=23]="briefcase",e[e.bundle=24]="bundle",e[e.cake=25]="cake",e[e.calendar=26]="calendar",e[e.calendarDay=27]="calendarDay",e[e.calendarPublic=28]="calendarPublic",e[e.calendarWeek=29]="calendarWeek",e[e.calendarWorkWeek=30]="calendarWorkWeek",e[e.camera=31]="camera",e[e.car=32]="car",e[e.caretDown=33]="caretDown",e[e.caretDownLeft=34]="caretDownLeft",e[e.caretDownOutline=35]="caretDownOutline",e[e.caretDownRight=36]="caretDownRight",e[e.caretLeft=37]="caretLeft",e[e.caretLeftOutline=38]="caretLeftOutline",e[e.caretRight=39]="caretRight",e[e.caretRightOutline=40]="caretRightOutline",e[e.caretUp=41]="caretUp",e[e.caretUpLeft=42]="caretUpLeft",e[e.caretUpOutline=43]="caretUpOutline",e[e.caretUpRight=44]="caretUpRight",e[e.cart=45]="cart",e[e.cat=46]="cat",e[e.chart=47]="chart",e[e.chat=48]="chat",e[e.chatAdd=49]="chatAdd",e[e.check=50]="check",e[e.checkbox=51]="checkbox",e[e.checkboxCheck=52]="checkboxCheck",e[e.checkboxEmpty=53]="checkboxEmpty",e[e.checkboxMixed=54]="checkboxMixed",e[e.checkPeople=55]="checkPeople",e[e.chevronDown=56]="chevronDown",e[e.chevronLeft=57]="chevronLeft",e[e.chevronRight=58]="chevronRight",e[e.chevronsDown=59]="chevronsDown",e[e.chevronsLeft=60]="chevronsLeft",e[e.chevronsRight=61]="chevronsRight",e[e.chevronsUp=62]="chevronsUp",e[e.chevronThickDown=63]="chevronThickDown",e[e.chevronThickLeft=64]="chevronThickLeft",e[e.chevronThickRight=65]="chevronThickRight",e[e.chevronThickUp=66]="chevronThickUp",e[e.chevronThinDown=67]="chevronThinDown",e[e.chevronThinLeft=68]="chevronThinLeft",e[e.chevronThinRight=69]="chevronThinRight",e[e.chevronThinUp=70]="chevronThinUp",e[e.chevronUp=71]="chevronUp",e[e.circle=72]="circle",e[e.circleBall=73]="circleBall",e[e.circleBalloons=74]="circleBalloons",e[e.circleCar=75]="circleCar",e[e.circleCat=76]="circleCat",e[e.circleCoffee=77]="circleCoffee",e[e.circleDog=78]="circleDog",e[e.circleEmpty=79]="circleEmpty",e[e.circleFill=80]="circleFill",e[e.circleFilled=81]="circleFilled",e[e.circleHalfFilled=82]="circleHalfFilled",e[e.circleInfo=83]="circleInfo",e[e.circleLightning=84]="circleLightning",e[e.circlePill=85]="circlePill",e[e.circlePlane=86]="circlePlane",e[e.circlePlus=87]="circlePlus",e[e.circlePoodle=88]="circlePoodle",e[e.circleUnfilled=89]="circleUnfilled",e[e.classNotebook=90]="classNotebook",e[e.classroom=91]="classroom",e[e.clock=92]="clock",e[e.clutter=93]="clutter",e[e.coffee=94]="coffee",e[e.collapse=95]="collapse",e[e.conflict=96]="conflict",e[e.contact=97]="contact",e[e.contactForm=98]="contactForm",e[e.contactPublic=99]="contactPublic",e[e.copy=100]="copy",e[e.creditCard=101]="creditCard",e[e.creditCardOutline=102]="creditCardOutline",e[e.dashboard=103]="dashboard",e[e.descending=104]="descending",e[e.desktop=105]="desktop",e[e.deviceWipe=106]="deviceWipe",e[e.dialpad=107]="dialpad",e[e.directions=108]="directions",e[e.document=109]="document",e[e.documentAdd=110]="documentAdd",e[e.documentForward=111]="documentForward",e[e.documentLandscape=112]="documentLandscape",e[e.documentPDF=113]="documentPDF",e[e.documentReply=114]="documentReply",e[e.documents=115]="documents",e[e.documentSearch=116]="documentSearch",e[e.dog=117]="dog",e[e.dogAlt=118]="dogAlt",e[e.dot=119]="dot",e[e.download=120]="download",e[e.drm=121]="drm",e[e.drop=122]="drop",e[e.dropdown=123]="dropdown",e[e.editBox=124]="editBox",e[e.ellipsis=125]="ellipsis",e[e.embed=126]="embed",e[e.event=127]="event",e[e.eventCancel=128]="eventCancel",e[e.eventInfo=129]="eventInfo",e[e.eventRecurring=130]="eventRecurring",e[e.eventShare=131]="eventShare",e[e.exclamation=132]="exclamation",e[e.expand=133]="expand",e[e.eye=134]="eye",e[e.favorites=135]="favorites",e[e.fax=136]="fax",e[e.fieldMail=137]="fieldMail",e[e.fieldNumber=138]="fieldNumber",e[e.fieldText=139]="fieldText",e[e.fieldTextBox=140]="fieldTextBox",e[e.fileDocument=141]="fileDocument",e[e.fileImage=142]="fileImage",e[e.filePDF=143]="filePDF",e[e.filter=144]="filter",e[e.filterClear=145]="filterClear",e[e.firstAid=146]="firstAid",e[e.flag=147]="flag",e[e.folder=148]="folder",e[e.folderMove=149]="folderMove",e[e.folderPublic=150]="folderPublic",e[e.folderSearch=151]="folderSearch",e[e.fontColor=152]="fontColor",e[e.fontDecrease=153]="fontDecrease",e[e.fontIncrease=154]="fontIncrease",e[e.frowny=155]="frowny",e[e.fullscreen=156]="fullscreen",e[e.gear=157]="gear",e[e.glasses=158]="glasses",e[e.globe=159]="globe",e[e.graph=160]="graph",e[e.group=161]="group",e[e.header=162]="header",e[e.heart=163]="heart",e[e.heartEmpty=164]="heartEmpty",e[e.hide=165]="hide",e[e.home=166]="home",e[e.inboxCheck=167]="inboxCheck",e[e.info=168]="info",e[e.infoCircle=169]="infoCircle",e[e.italic=170]="italic",e[e.key=171]="key",e[e.late=172]="late",e[e.lifesaver=173]="lifesaver",e[e.lifesaverLock=174]="lifesaverLock",e[e.lightBulb=175]="lightBulb",e[e.lightning=176]="lightning",e[e.link=177]="link",e[e.linkRemove=178]="linkRemove",e[e.listBullets=179]="listBullets",e[e.listCheck=180]="listCheck",e[e.listCheckbox=181]="listCheckbox",e[e.listGroup=182]="listGroup",e[e.listGroup2=183]="listGroup2",e[e.listNumbered=184]="listNumbered",e[e.lock=185]="lock",e[e.mail=186]="mail",e[e.mailCheck=187]="mailCheck",e[e.mailDown=188]="mailDown",e[e.mailEdit=189]="mailEdit",e[e.mailEmpty=190]="mailEmpty",e[e.mailError=191]="mailError",e[e.mailOpen=192]="mailOpen",e[e.mailPause=193]="mailPause",e[e.mailPublic=194]="mailPublic",e[e.mailRead=195]="mailRead",e[e.mailSend=196]="mailSend",e[e.mailSync=197]="mailSync",e[e.mailUnread=198]="mailUnread",e[e.mapMarker=199]="mapMarker",e[e.meal=200]="meal",e[e.menu=201]="menu",e[e.menu2=202]="menu2",e[e.merge=203]="merge",e[e.metadata=204]="metadata",e[e.microphone=205]="microphone",e[e.miniatures=206]="miniatures",e[e.minus=207]="minus",e[e.mobile=208]="mobile",e[e.money=209]="money",e[e.move=210]="move",e[e.multiChoice=211]="multiChoice",e[e.music=212]="music",e[e.navigate=213]="navigate",e[e["new"]=214]="new",e[e.newsfeed=215]="newsfeed",e[e.note=216]="note",e[e.notebook=217]="notebook",e[e.noteEdit=218]="noteEdit",e[e.noteForward=219]="noteForward",e[e.noteReply=220]="noteReply",e[e.notRecurring=221]="notRecurring",e[e.onedrive=222]="onedrive",e[e.onlineAdd=223]="onlineAdd",e[e.onlineJoin=224]="onlineJoin",e[e.oofReply=225]="oofReply",e[e.org=226]="org",e[e.page=227]="page",e[e.paint=228]="paint",e[e.panel=229]="panel",e[e.partner=230]="partner",e[e.pause=231]="pause",e[e.pencil=232]="pencil",e[e.people=233]="people",e[e.peopleAdd=234]="peopleAdd",e[e.peopleCheck=235]="peopleCheck",e[e.peopleError=236]="peopleError",e[e.peoplePause=237]="peoplePause",e[e.peopleRemove=238]="peopleRemove",e[e.peopleSecurity=239]="peopleSecurity",e[e.peopleSync=240]="peopleSync",e[e.person=241]="person",e[e.personAdd=242]="personAdd",e[e.personRemove=243]="personRemove",e[e.phone=244]="phone",e[e.phoneAdd=245]="phoneAdd",e[e.phoneTransfer=246]="phoneTransfer",e[e.picture=247]="picture",e[e.pictureAdd=248]="pictureAdd",e[e.pictureEdit=249]="pictureEdit",e[e.pictureRemove=250]="pictureRemove",e[e.pill=251]="pill",e[e.pinDown=252]="pinDown",e[e.pinLeft=253]="pinLeft",e[e.placeholder=254]="placeholder",e[e.plane=255]="plane",e[e.play=256]="play",e[e.plus=257]="plus",e[e.plus2=258]="plus2",e[e.pointItem=259]="pointItem",e[e.popout=260]="popout",e[e.post=261]="post",e[e.print=262]="print",e[e.protectionCenter=263]="protectionCenter",e[e.question=264]="question",e[e.questionReverse=265]="questionReverse",e[e.quote=266]="quote",e[e.radioButton=267]="radioButton",e[e.reactivate=268]="reactivate",e[e.receiptCheck=269]="receiptCheck",e[e.receiptForward=270]="receiptForward",e[e.receiptReply=271]="receiptReply",e[e.refresh=272]="refresh",e[e.reload=273]="reload",e[e.reply=274]="reply",e[e.replyAll=275]="replyAll",e[e.replyAllAlt=276]="replyAllAlt",e[e.replyAlt=277]="replyAlt",e[e.ribbon=278]="ribbon",e[e.room=279]="room",e[e.save=280]="save",e[e.scheduling=281]="scheduling",e[e.search=282]="search",e[e.section=283]="section",e[e.sections=284]="sections",e[e.settings=285]="settings",e[e.share=286]="share",e[e.shield=287]="shield",e[e.sites=288]="sites",e[e.smiley=289]="smiley",e[e.soccer=290]="soccer",e[e.socialListening=291]="socialListening",e[e.sort=292]="sort",e[e.sortLines=293]="sortLines",e[e.split=294]="split",e[e.star=295]="star",e[e.starEmpty=296]="starEmpty",e[e.stopwatch=297]="stopwatch",e[e.story=298]="story",e[e.styleRemove=299]="styleRemove",e[e.subscribe=300]="subscribe",e[e.sun=301]="sun",e[e.sunAdd=302]="sunAdd",e[e.sunQuestion=303]="sunQuestion",e[e.support=304]="support",e[e.table=305]="table",e[e.tablet=306]="tablet",e[e.tag=307]="tag",e[e.taskRecurring=308]="taskRecurring",e[e.tasks=309]="tasks",e[e.teamwork=310]="teamwork",e[e.text=311]="text",e[e.textBox=312]="textBox",e[e.tile=313]="tile",e[e.timeline=314]="timeline",e[e.today=315]="today",e[e.toggle=316]="toggle",e[e.toggleMiddle=317]="toggleMiddle",e[e.touch=318]="touch",e[e.trash=319]="trash",e[e.triangleDown=320]="triangleDown",e[e.triangleEmptyDown=321]="triangleEmptyDown",e[e.triangleEmptyLeft=322]="triangleEmptyLeft",e[e.triangleEmptyRight=323]="triangleEmptyRight",e[e.triangleEmptyUp=324]="triangleEmptyUp",e[e.triangleLeft=325]="triangleLeft",e[e.triangleRight=326]="triangleRight",e[e.triangleUp=327]="triangleUp",e[e.trophy=328]="trophy",e[e.underline=329]="underline",e[e.unsubscribe=330]="unsubscribe",e[e.upload=331]="upload",e[e.video=332]="video",e[e.voicemail=333]="voicemail",e[e.voicemailForward=334]="voicemailForward",e[e.voicemailReply=335]="voicemailReply",e[e.waffle=336]="waffle",e[e.work=337]="work",e[e.wrench=338]="wrench",e[e.x=339]="x",e[e.xCircle=340]="xCircle"}(t.IconEnum||(t.IconEnum={}));t.IconEnum},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.restrict="E",this.template='',this.scope={ngHref:"@"},this.transclude=!0,this.replace=!0}return e.factory=function(){var t=function(){return new e};return t},e}();t.LinkDirective=o,t.module=n.module("officeuifabric.components.link",["officeuifabric.components"]).directive("uifLink",o.factory())},function(e,t,i){"use strict";var n=i(2),o=i(15),r=(function(){function e(e){this.log=e}return e.$inject=["$log"],e}(),function(){function e(t){this.log=t,this.restrict="E",this.template="
        ",this.scope={uifMode:"@"},this.transclude=!0,e.log=t}return e.factory=function(){var t=function(t){return new e(t)};return t.$inject=["$log"],t},e.prototype.link=function(t){t.$watch("uifMode",function(i,n){void 0===o.OverlayMode[i]&&e.log.error("Error [ngOfficeUiFabric] officeuifabric.components.overlay - Unsupported overlay mode: The overlay mode ('"+t.uifMode+"') is not supported by the Office UI Fabric. Supported options are listed here: https://github.com/ngOfficeUIFabric/ng-officeuifabric/blob/master/src/components/overlay/overlayModeEnum.ts")})},e}());t.OverlayDirective=r,t.module=n.module("officeuifabric.components.overlay",["officeuifabric.components"]).directive("uifOverlay",r.factory())},function(e,t){"use strict";!function(e){e[e.light=0]="light",e[e.dark=1]="dark"}(t.OverlayMode||(t.OverlayMode={}));t.OverlayMode},function(e,t,i){"use strict";var n=i(2),o=function(){function e(t){this.log=t,this.restrict="E",this.template='
        {{uifName}}
        {{uifDescription}}
        ',this.scope={uifDescription:"@",uifName:"@",uifPercentComplete:"@"},e.log=t}return e.factory=function(){var t=function(t){return new e(t)};return t.$inject=["$log"],t},e.prototype.link=function(t){t.$watch("uifPercentComplete",function(i,n){if(null==i||""===i)return void(t.uifPercentComplete=0);var o=parseFloat(i);(isNaN(o)||0>o||o>100)&&(e.log.error("Error [ngOfficeUiFabric] officeuifabric.components.progressindicator - Percent complete must be a valid number between 0 and 100."),t.uifPercentComplete=Math.max(Math.min(o,100),0))})},e}();t.ProgressIndicatorDirective=o,t.module=n.module("officeuifabric.components.progressindicator",["officeuifabric.components"]).directive("uifProgressIndicator",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='',this.scope={placeholder:"=",value:"="}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i){e.isFocus=!1,e.isCancel=!1,e.isLabelHidden=!1,e.isActive=!1,e.inputFocus=function(){e.isFocus=!0,e.isLabelHidden=!0,e.isActive=!0},e.inputBlur=function(){e.isCancel&&(e.value="",e.isLabelHidden=!1),e.isActive=!1,("undefined"==typeof e.value||""===e.value)&&(e.isLabelHidden=!1),e.isFocus=e.isCancel=!1},e.btnMousedown=function(){e.isCancel=!0},e.$watch("value",function(t){e.isFocus||(t&&""!==t?e.isLabelHidden=!0:e.isLabelHidden=!1,e.value=t)}),e.$watch("placeholder",function(t){e.placeholder=t})},e}();t.SearchBoxDirective=o,t.module=n.module("officeuifabric.components.searchbox",["officeuifabric.components"]).directive("uifSearchbox",o.factory())},function(e,t,i){"use strict";var n=i(2),o=i(19),r=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='
        ',this.controller=c,this.scope={ngShow:"="}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,r,c){n.isDefined(i.uifSize)&&(n.isUndefined(o.SpinnerSize[i.uifSize])&&r.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.spinner - Unsupported size: Spinner size ('"+i.uifSize+"') is not supported by the Office UI Fabric."), +o.SpinnerSize[i.uifSize]===o.SpinnerSize.large&&t.addClass("ms-Spinner--large")),null!=i.ngShow?e.$watch("ngShow",function(e,t,i){e?i.start():i.stop()}):e.start(),c(function(e){if(e.length>0){var i=n.element("
        ");i.addClass("ms-Spinner-label").append(e),t.append(i)}}),e.init()},e}();t.SpinnerDirective=r;var c=function(){function e(e,t,i,n){var o=this;this.$scope=e,this.$element=t,this.$interval=i,this.$log=n,this._offsetSize=.179,this._numCircles=8,this._animationSpeed=90,this._circles=[],e.init=function(){o.createCirclesAndArrange(),o.setInitialOpacity()},e.start=function(){o._animationInterval=i(function(){for(var e=o._circles.length;e--;)o.fadeCircle(o._circles[e])},o._animationSpeed)},e.stop=function(){i.cancel(o._animationInterval)}}return e.prototype.createCirclesAndArrange=function(){for(var e=this.$element[0].clientWidth,t=this.$element[0].clientHeight,i=0,n=e*this._offsetSize,o=2*Math.PI/this._numCircles,r=this._numCircles,c=.5*(e-n);r--;){var s=this.createCircle(),a=Math.round(.5*e+c*Math.cos(i)-.5*s[0].clientWidth)-.5*n,u=Math.round(.5*t+c*Math.sin(i)-.5*s[0].clientHeight)-.5*n;this.$element.append(s),s.css("left",a+"px"),s.css("top",u+"px"),i+=o;var d=new l(s,r);this._circles.push(d)}},e.prototype.createCircle=function(){var e=n.element("
        "),t=this.$element[0].clientWidth,i=t*this._offsetSize+"px";return e.addClass("ms-Spinner-circle").css("width",i).css("height",i),e},e.prototype.setInitialOpacity=function(){var e,t=this;this._fadeIncrement=1/this._numCircles,this._circles.forEach(function(i,n){e=t._fadeIncrement*(n+1),i.opacity=e})},e.prototype.fadeCircle=function(e){var t=e.opacity-this._fadeIncrement;0>=t&&(t=1),e.opacity=t},e.$inject=["$scope","$element","$interval","$log"],e}(),l=function(){function e(e,t){this.circleElement=e,this.circleIndex=t}return Object.defineProperty(e.prototype,"opacity",{get:function(){return+this.circleElement.css("opacity")},set:function(e){this.circleElement.css("opacity",e)},enumerable:!0,configurable:!0}),e}();t.module=n.module("officeuifabric.components.spinner",["officeuifabric.components"]).directive("uifSpinner",r.factory())},function(e,t){"use strict";!function(e){e[e.small=0]="small",e[e.large=1]="large"}(t.SpinnerSize||(t.SpinnerSize={}));t.SpinnerSize},function(e,t,i){"use strict";var n=i(2),o=i(21),r=function(){function e(e,t){this.$scope=e,this.$log=t,this.$scope.orderBy=null,this.$scope.orderAsc=!0,this.$scope.rows=[]}return Object.defineProperty(e.prototype,"orderBy",{get:function(){return this.$scope.orderBy},set:function(e){this.$scope.orderBy=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"orderAsc",{get:function(){return this.$scope.orderAsc},set:function(e){this.$scope.orderAsc=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowSelectMode",{get:function(){return this.$scope.rowSelectMode},set:function(e){void 0===o.TableRowSelectModeEnum[e]&&this.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.table. '"+e+"' is not a valid option for 'uif-row-select-mode'. Valid options are none|single|multiple."),this.$scope.rowSelectMode=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rows",{get:function(){return this.$scope.rows},set:function(e){this.$scope.rows=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selectedItems",{get:function(){for(var e=[],t=0;t',this.controller=r,this.controllerAs="table"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){void 0!==i.uifRowSelectMode&&null!==i.uifRowSelectMode&&(void 0===o.TableRowSelectModeEnum[i.uifRowSelectMode]?n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.table. '"+i.uifRowSelectMode+"' is not a valid option for 'uif-row-select-mode'. Valid options are none|single|multiple."):e.rowSelectMode=i.uifRowSelectMode),void 0===e.rowSelectMode&&(e.rowSelectMode=o.TableRowSelectModeEnum[o.TableRowSelectModeEnum.none])},e}();t.TableDirective=c;var l=function(){function e(e,t){this.$scope=e,this.$log=t}return Object.defineProperty(e.prototype,"item",{get:function(){return this.$scope.item},set:function(e){this.$scope.item=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this.$scope.selected},set:function(e){this.$scope.selected=e,this.$scope.$digest()},enumerable:!0,configurable:!0}),e.$inject=["$scope","$log"],e}(),s=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='
        ',this.require="^uifTable",this.scope={item:"=uifItem"},this.controller=l}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){if(void 0!==i.uifSelected&&null!==i.uifSelected){var r=i.uifSelected.toLowerCase();"true"!==r&&"false"!==r?n.$log.error("Error [ngOfficeUiFabric] officeuifabric.components.table. '"+i.uifSelected+"' is not a valid boolean value. Valid options are true|false."):"true"===r&&(e.selected=!0)}void 0!==e.item&&n.rows.push(e),e.rowClick=function(t){e.selected=!e.selected,e.$apply()},e.$watch("selected",function(e,i,r){if(e===!0){if(n.rowSelectMode===o.TableRowSelectModeEnum[o.TableRowSelectModeEnum.single]&&n.rows)for(var c=0;c',this.replace=!0}return e.factory=function(){var t=function(){return new e};return t},e}();t.TableCellDirective=u;var d=function(){function e(){this.restrict="E",this.transclude=!0,this.replace=!0,this.template='',this.require="^uifTable"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.headerClick=function(e){n.orderBy===i.uifOrderBy?n.orderAsc=!n.orderAsc:(n.orderBy=i.uifOrderBy,n.orderAsc=!0)},e.$watch("table.orderBy",function(e,n,o){if(n!==e&&e===i.uifOrderBy){for(var r=t.parent().children(),c=0;c  ')}}),e.$watch("table.orderAsc",function(e,i,n){if(2===t.children().length){var o=i?"ms-Icon--caretDown":"ms-Icon--caretUp",r=e?"ms-Icon--caretDown":"ms-Icon--caretUp";t.children().eq(1).children().eq(0).removeClass(o).addClass(r)}}),"uifOrderBy"in i&&t.on("click",e.headerClick)},e}();t.TableHeaderDirective=d,t.module=n.module("officeuifabric.components.table",["officeuifabric.components"]).directive("uifTable",c.factory()).directive("uifTableRow",s.factory()).directive("uifTableRowSelect",a.factory()).directive("uifTableCell",u.factory()).directive("uifTableHeader",d.factory())},function(e,t){"use strict";!function(e){e[e.none=0]="none",e[e.single=1]="single",e[e.multiple=2]="multiple"}(t.TableRowSelectModeEnum||(t.TableRowSelectModeEnum={}));t.TableRowSelectModeEnum},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template="
        "+'{{uifDescription}}
        ',this.scope={ngModel:"=",placeholder:"@",uifDescription:"@",uifLabel:"@"},this.restrict="E"}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i,n){e.labelShown=!0,e.uifUnderlined="uifUnderlined"in i,e.inputFocus=function(t){e.uifUnderlined&&(e.isActive=!0)},e.inputClick=function(t){e.placeholder&&(e.labelShown=!1)},e.inputBlur=function(i){var n=t.find("input");e.placeholder&&0===n.val().length&&(e.labelShown=!0),e.uifUnderlined&&(e.isActive=!1)}},e}();t.TextFieldDirective=o,t.module=n.module("officeuifabric.components.textfield",["officeuifabric.components"]).directive("uifTextfield",o.factory())},function(e,t,i){"use strict";var n=i(2),o=function(){function e(){this.template='
        ',this.restrict="E",this.transclude=!0,this.scope={ngModel:"=",uifLabelOff:"@",uifLabelOn:"@",uifTextLocation:"@"}}return e.factory=function(){var t=function(){return new e};return t},e.prototype.link=function(e,t,i){if(e.toggleClass="ms-Toggle",e.uifTextLocation){var n=e.uifTextLocation;n=n.charAt(0).toUpperCase()+n.slice(1),e.toggleClass+=" ms-Toggle--text"+n}},e}();t.ToggleDirective=o,t.module=n.module("officeuifabric.components.toggle",["officeuifabric.components"]).directive("uifToggle",o.factory())}])}); \ No newline at end of file diff --git a/package.json b/package.json index bb270df..49ca264 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ng-office-ui-fabric", "description": "Angular directives for Microsoft's Office UI Fabric.", - "version": "0.2.0", + "version": "0.3.0", "author": "https://github.com/ngOfficeUIFabric/ng-officeuifabric/graphs/contributors", "maintainers": [ {