447 lines
52 KiB
JavaScript
447 lines
52 KiB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
|
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
module.exports = factory();
|
|
else if(typeof define === 'function' && define.amd)
|
|
define([], factory);
|
|
else if(typeof exports === 'object')
|
|
exports["customEntityAssetLink"] = factory();
|
|
else
|
|
root["ntt"] = root["ntt"] || {}, root["ntt"]["smartit"] = root["ntt"]["smartit"] || {}, root["ntt"]["smartit"]["customEntityAssetLink"] = factory();
|
|
})(window, function() {
|
|
return /******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/modules/customEntityAssetLink/index.js");
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./src/modules/customEntityAssetLink/directives/ntt-custom-affected-asset-link-directive.js":
|
|
/*!**************************************************************************************************!*\
|
|
!*** ./src/modules/customEntityAssetLink/directives/ntt-custom-affected-asset-link-directive.js ***!
|
|
\**************************************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
angular.module('myitsmApp').directive('customAffectedAssetLink', ['ModuleConfigService', 'customAssetLinkService', function (ModuleConfigService, customAssetLinkService) {
|
|
return {
|
|
restrict: 'A',
|
|
scope: {
|
|
ciData: '=customAffectedAssetLink',
|
|
mapping: '=mapping'
|
|
},
|
|
link: function link(scope, iElement) {
|
|
var p = iElement.parents(".profile-relation__item")[0];
|
|
|
|
if (p) {
|
|
p.removeAttribute("ng-click");
|
|
p.setAttribute("style", "cursor: default !important");
|
|
}
|
|
|
|
scope.$parent.$parent.showDetails = null;
|
|
|
|
if (!scope.ciData) {
|
|
console.log('No information about entity');
|
|
} else {
|
|
var linkFormat = ModuleConfigService.getModuleConfig("customEntityAssetLink")["linkFormat"];
|
|
var link = customAssetLinkService.parseLink(linkFormat, scope.ciData, scope.mapping); //var object = scope.ciData;
|
|
//var entityLink = linkFormat.replace("{Name}", object.name);
|
|
//entityLink = entityLink.replace("{ReconciliationId}", object.reconciliationId);
|
|
|
|
iElement.attr('href', link);
|
|
var openInNewTab = ModuleConfigService.getModuleConfig("customEntityAssetLink")["openInNewTab"];
|
|
openInNewTab = typeof openInNewTab == "undefined" ? true : openInNewTab;
|
|
if (openInNewTab) iElement.attr('target', '_blank');
|
|
}
|
|
}
|
|
};
|
|
}]);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/modules/customEntityAssetLink/directives/ntt-scopecontroller-ci-relations-directive.js":
|
|
/*!****************************************************************************************************!*\
|
|
!*** ./src/modules/customEntityAssetLink/directives/ntt-scopecontroller-ci-relations-directive.js ***!
|
|
\****************************************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
angular.module('myitsmApp').directive('scopeControllerCiRelations', ['customAssetLinkService', 'ModuleConfigService', '$window', function (customAssetLinkService, ModuleConfigService, $window) {
|
|
return {
|
|
restrict: 'E',
|
|
template: '',
|
|
replace: false,
|
|
scope: {
|
|
variable: '='
|
|
},
|
|
link: function link(scope, element, attrs) {},
|
|
controller: ['$element', '$attrs', '$scope', function ($element, $attrs, $scope) {
|
|
var linkFormat = ModuleConfigService.getModuleConfig("customEntityAssetLink")["linkFormat"];
|
|
var openInNewTab = ModuleConfigService.getModuleConfig("customEntityAssetLink")["openInNewTab"];
|
|
openInNewTab = typeof openInNewTab == "undefined" ? true : openInNewTab;
|
|
|
|
$scope.$parent.showPreview = function (row) {
|
|
var link = customAssetLinkService.parseLink(linkFormat, row);
|
|
|
|
if (link) {
|
|
if (!openInNewTab) $window.location.href = link;else $window.open(link, '_blank');
|
|
}
|
|
};
|
|
}]
|
|
};
|
|
}]);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/modules/customEntityAssetLink/index.js":
|
|
/*!****************************************************!*\
|
|
!*** ./src/modules/customEntityAssetLink/index.js ***!
|
|
\****************************************************/
|
|
/*! exports provided: customEnitiyProfileLink */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customEnitiyProfileLink", function() { return customEnitiyProfileLink; });
|
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
|
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
|
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
|
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
|
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
|
|
//require('./directives/ntt-custom-asset-entity-profile-link-directive');
|
|
__webpack_require__(/*! ./services/custom-asset-link-service */ "./src/modules/customEntityAssetLink/services/custom-asset-link-service.js");
|
|
|
|
__webpack_require__(/*! ./directives/ntt-custom-affected-asset-link-directive */ "./src/modules/customEntityAssetLink/directives/ntt-custom-affected-asset-link-directive.js");
|
|
|
|
__webpack_require__(/*! ./directives/ntt-scopecontroller-ci-relations-directive */ "./src/modules/customEntityAssetLink/directives/ntt-scopecontroller-ci-relations-directive.js");
|
|
|
|
var customEnitiyProfileLink =
|
|
/*#__PURE__*/
|
|
function (_ntt$smartit$api$ICus) {
|
|
_inherits(customEnitiyProfileLink, _ntt$smartit$api$ICus);
|
|
|
|
function customEnitiyProfileLink() {
|
|
_classCallCheck(this, customEnitiyProfileLink);
|
|
|
|
return _possibleConstructorReturn(this, _getPrototypeOf(customEnitiyProfileLink).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(customEnitiyProfileLink, [{
|
|
key: "name",
|
|
value: function name() {
|
|
return "customEntityAssetLink";
|
|
}
|
|
}, {
|
|
key: "injectTemplates",
|
|
value: function injectTemplates() {
|
|
return {
|
|
"views/common/related-item.html": [{
|
|
id: "customEnitiyProfileLink",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("table.asset-table").find("a[entity-profile-link='item']");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="item.realObject" class="ticket-summary-truncate" title="{{item.realObject.name}}">{{item.realObject.name}}</a>'
|
|
}],
|
|
"views/custom-widgets/affected-asset.html": [{
|
|
id: "affectedAsset",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("span.custom-field__value").find("a[ng-if='data.value.ci.name']");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="data.value.ci" ng-if="data.value.ci.name" aria-label="{{data.label}} {{data.value.ci.name}}" class="ticket__field-value">{{data.value.ci.name}}</a>'
|
|
}],
|
|
"views/known-error/known-error-details-editor.html": [{
|
|
id: "affectedAsset2",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("a[ng-if='ticket.causalCI.name']");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="ticket.causalCI" ng-if="ticket.causalCI.name">{{ticket.causalCI.name}}</a>'
|
|
}],
|
|
"views/problem/problem-details-editor.html": [{
|
|
id: "affectedAsset3",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("a[ng-if='ticket.causalCI.name']");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="ticket.causalCI" ng-if="ticket.causalCI.name">{{ticket.causalCI.name}}</a>'
|
|
}],
|
|
"views/change/ci-relations.html": [{
|
|
id: "affectedAsset4",
|
|
method: "add",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("div")[0];
|
|
},
|
|
snippet: '<scope-controller-ci-relations variable="itemList"></scope-controller-ci-relations>'
|
|
}],
|
|
"views/feed/feed-item-renderer.html": [{
|
|
id: "affectedAsset15",
|
|
method: "add",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
//return $jqueryTemplate.find("a[ng-if=\"item.isAppEnabled && item.relatedObject.type !== 'knowledge'\"]");
|
|
return $jqueryTemplate.find(".feed-item__header")[0];
|
|
},
|
|
snippet: '<a class="feed_item__details-link" custom-affected-asset-link="item.relatedObject" ng-if="item.relatedObject.title && item.relatedObject.type==\'asset\'" mapping="{\'name\': \'title\', \'reconciliationId\': \'id\'}">{{item.relatedObject.title}}</a>'
|
|
}, {
|
|
id: "affectedAsset16",
|
|
type: "jquery",
|
|
mode: "attribute",
|
|
attributes: {
|
|
"replace": {
|
|
//"ng-if": "field.isTextField() && showField(field) && field.name != \'"+this.injectConfig.params.injectFieldName+"\'"
|
|
"ng-if": "item.isAppEnabled && item.relatedObject.type !== 'knowledge' && item.relatedObject.type !== 'asset'"
|
|
}
|
|
},
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("a[ng-if=\"item.isAppEnabled && item.relatedObject.type !== 'knowledge'\"]");
|
|
}
|
|
}],
|
|
"views/asset/asset-details-lifecycle.html": [{
|
|
id: "affectedAsset5",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find(".profile__title-link > .profile__title");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="asset" ng-if="asset">{{asset.name}}</a>'
|
|
}, {
|
|
id: "affectedAsset6",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find(".ticket__name-link");
|
|
},
|
|
snippet: '<a custom-affected-asset-link="asset" ng-if="!isFullVersion">{{\'search.preview.viewFullAsset\' | i18n}}</a>'
|
|
}],
|
|
"views/person/person-asset-renderer.html": [{
|
|
id: "affectedAsset7",
|
|
method: "replace",
|
|
mode: "partial",
|
|
type: "jquery",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find(".resource-slice__linked-item_title").find("a[entity-profile-link='data']");
|
|
;
|
|
},
|
|
snippet: '<a custom-affected-asset-link="data" ng-if="data">{{data.name}}</a>'
|
|
}],
|
|
"views/person/person-details.html": [
|
|
/*{
|
|
id: "affectedAsset8",
|
|
type: "jquery",
|
|
mode: "partial",
|
|
method: "replace",
|
|
selector: function ($jqueryTemplate) {
|
|
return $jqueryTemplate.find("person-asset-renderer")[1];
|
|
},
|
|
snippet: '<person-asset-renderer data="asset"></person-asset-renderer>',
|
|
}, */
|
|
{
|
|
id: "affectedAsset9",
|
|
type: "jquery",
|
|
mode: "attribute",
|
|
attributes: {
|
|
"add": {
|
|
//"ng-if": "field.isTextField() && showField(field) && field.name != \'"+this.injectConfig.params.injectFieldName+"\'"
|
|
"style": "cursor: default !important"
|
|
}
|
|
},
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("person-asset-renderer").parents(".person-item__template");
|
|
},
|
|
snippet: '<person-asset-renderer data="asset"></person-asset-renderer>'
|
|
}, {
|
|
id: "affectedAsset8",
|
|
type: "jquery",
|
|
mode: "partial",
|
|
method: "replace",
|
|
selector: function selector($jqueryTemplate) {
|
|
return $jqueryTemplate.find("person-asset-renderer")[1];
|
|
},
|
|
snippet: '<person-asset-renderer data="asset"></person-asset-renderer>'
|
|
}]
|
|
};
|
|
}
|
|
}, {
|
|
key: "injectDynTemplates",
|
|
value: function injectDynTemplates() {
|
|
return {};
|
|
}
|
|
}, {
|
|
key: "templates",
|
|
value: function templates() {
|
|
return [{//origin: "views/ticket/incident-details-v2.html",
|
|
//template: "views/ticket/incident-details-v2.html"
|
|
}, {//origin: "views/ticket/task-details-v2.html",
|
|
//template: "views/ticket/task-details-v2.html"
|
|
}, {//template: "views/ticket/ticket-gtw-panel.html"
|
|
}, {//template: "views/ticket/ticket-gtw-item.html"
|
|
}, {//template: "views/ticket/ticket-gtw-item-dialog.html"
|
|
}, {//template: "views/ticket/ticket-gtw-details.html"
|
|
}, {//template: "views/ticket/ticket-gtw-item-interface.html"
|
|
}];
|
|
}
|
|
}, {
|
|
key: "i18nLocales",
|
|
value: function i18nLocales() {
|
|
return {// "de":["i18n/ntt-resources-locale_de.json"],
|
|
// "en":["i18n/ntt-resources-locale_en.json"]
|
|
};
|
|
}
|
|
}]);
|
|
|
|
return customEnitiyProfileLink;
|
|
}(ntt.smartit.api.ICustomModule);
|
|
ntt.smartit.api.nttSmartitModules.push(new customEnitiyProfileLink());
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/modules/customEntityAssetLink/services/custom-asset-link-service.js":
|
|
/*!*********************************************************************************!*\
|
|
!*** ./src/modules/customEntityAssetLink/services/custom-asset-link-service.js ***!
|
|
\*********************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
(function () {
|
|
'use strict';
|
|
|
|
angular.module('myitsmApp').factory('customAssetLinkService', function () {
|
|
return {
|
|
parseLink: function parseLink(pattern, ciData, mapping) {
|
|
if (!ciData) {
|
|
console.log('No information about entity!');
|
|
} else if (!pattern) console.log('link pattern missing...check configuration!');else {
|
|
var object = ciData;
|
|
|
|
if (mapping) {
|
|
object["name"] = ciData[mapping["name"]];
|
|
object["reconciliationId"] = ciData[mapping["reconciliationId"]];
|
|
}
|
|
|
|
var entityLink = pattern.replace("{Name}", object.name);
|
|
entityLink = entityLink.replace("{ReconciliationId}", object.reconciliationId);
|
|
return entityLink;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
};
|
|
});
|
|
})();
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
});
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9udHQuc21hcnRpdC5jdXN0b21FbnRpdHlBc3NldExpbmsvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL250dC5zbWFydGl0LmN1c3RvbUVudGl0eUFzc2V0TGluay93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9udHQuc21hcnRpdC5jdXN0b21FbnRpdHlBc3NldExpbmsvLi9zcmMvbW9kdWxlcy9jdXN0b21FbnRpdHlBc3NldExpbmsvZGlyZWN0aXZlcy9udHQtY3VzdG9tLWFmZmVjdGVkLWFzc2V0LWxpbmstZGlyZWN0aXZlLmpzIiwid2VicGFjazovL250dC5zbWFydGl0LmN1c3RvbUVudGl0eUFzc2V0TGluay8uL3NyYy9tb2R1bGVzL2N1c3RvbUVudGl0eUFzc2V0TGluay9kaXJlY3RpdmVzL250dC1zY29wZWNvbnRyb2xsZXItY2ktcmVsYXRpb25zLWRpcmVjdGl2ZS5qcyIsIndlYnBhY2s6Ly9udHQuc21hcnRpdC5jdXN0b21FbnRpdHlBc3NldExpbmsvLi9zcmMvbW9kdWxlcy9jdXN0b21FbnRpdHlBc3NldExpbmsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbnR0LnNtYXJ0aXQuY3VzdG9tRW50aXR5QXNzZXRMaW5rLy4vc3JjL21vZHVsZXMvY3VzdG9tRW50aXR5QXNzZXRMaW5rL3NlcnZpY2VzL2N1c3RvbS1hc3NldC1saW5rLXNlcnZpY2UuanMiXSwibmFtZXMiOlsiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIk1vZHVsZUNvbmZpZ1NlcnZpY2UiLCJjdXN0b21Bc3NldExpbmtTZXJ2aWNlIiwicmVzdHJpY3QiLCJzY29wZSIsImNpRGF0YSIsIm1hcHBpbmciLCJsaW5rIiwiaUVsZW1lbnQiLCJwIiwicGFyZW50cyIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsIiRwYXJlbnQiLCJzaG93RGV0YWlscyIsImNvbnNvbGUiLCJsb2ciLCJsaW5rRm9ybWF0IiwiZ2V0TW9kdWxlQ29uZmlnIiwicGFyc2VMaW5rIiwiYXR0ciIsIm9wZW5Jbk5ld1RhYiIsIiR3aW5kb3ciLCJ0ZW1wbGF0ZSIsInJlcGxhY2UiLCJ2YXJpYWJsZSIsImVsZW1lbnQiLCJhdHRycyIsImNvbnRyb2xsZXIiLCIkZWxlbWVudCIsIiRhdHRycyIsIiRzY29wZSIsInNob3dQcmV2aWV3Iiwicm93IiwibG9jYXRpb24iLCJocmVmIiwib3BlbiIsInJlcXVpcmUiLCJjdXN0b21Fbml0aXlQcm9maWxlTGluayIsImlkIiwibWV0aG9kIiwibW9kZSIsInR5cGUiLCJzZWxlY3RvciIsIiRqcXVlcnlUZW1wbGF0ZSIsImZpbmQiLCJzbmlwcGV0IiwiYXR0cmlidXRlcyIsIm50dCIsInNtYXJ0aXQiLCJhcGkiLCJJQ3VzdG9tTW9kdWxlIiwibnR0U21hcnRpdE1vZHVsZXMiLCJwdXNoIiwiZmFjdG9yeSIsInBhdHRlcm4iLCJvYmplY3QiLCJlbnRpdHlMaW5rIiwibmFtZSIsInJlY29uY2lsaWF0aW9uSWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdURBQXVEO0FBQ3hGLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNqRkFBLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLFdBQWYsRUFDS0MsU0FETCxDQUNlLHlCQURmLEVBQzBDLENBQUMscUJBQUQsRUFBd0Isd0JBQXhCLEVBQ2xDLFVBQVVDLG1CQUFWLEVBQStCQyxzQkFBL0IsRUFBdUQ7QUFDbkQsU0FBTztBQUNIQyxZQUFRLEVBQUUsR0FEUDtBQUVIQyxTQUFLLEVBQUU7QUFDSEMsWUFBTSxFQUFFLDBCQURMO0FBRUhDLGFBQU8sRUFBRTtBQUZOLEtBRko7QUFNSEMsUUFBSSxFQUFFLGNBQVVILEtBQVYsRUFBaUJJLFFBQWpCLEVBQTJCO0FBRTdCLFVBQUlDLENBQUMsR0FBR0QsUUFBUSxDQUFDRSxPQUFULENBQWlCLHlCQUFqQixFQUE0QyxDQUE1QyxDQUFSOztBQUNBLFVBQUdELENBQUgsRUFBTTtBQUNGQSxTQUFDLENBQUNFLGVBQUYsQ0FBa0IsVUFBbEI7QUFDQUYsU0FBQyxDQUFDRyxZQUFGLENBQWUsT0FBZixFQUF1Qiw0QkFBdkI7QUFDSDs7QUFFRFIsV0FBSyxDQUFDUyxPQUFOLENBQWNBLE9BQWQsQ0FBc0JDLFdBQXRCLEdBQWtDLElBQWxDOztBQUNBLFVBQUksQ0FBQ1YsS0FBSyxDQUFDQyxNQUFYLEVBQW1CO0FBQ2ZVLGVBQU8sQ0FBQ0MsR0FBUixDQUFZLDZCQUFaO0FBQ0gsT0FGRCxNQUdLO0FBQ0QsWUFBSUMsVUFBVSxHQUFHaEIsbUJBQW1CLENBQUNpQixlQUFwQixDQUFvQyx1QkFBcEMsRUFBNkQsWUFBN0QsQ0FBakI7QUFDQSxZQUFJWCxJQUFJLEdBQUdMLHNCQUFzQixDQUFDaUIsU0FBdkIsQ0FBaUNGLFVBQWpDLEVBQTZDYixLQUFLLENBQUNDLE1BQW5ELEVBQTBERCxLQUFLLENBQUNFLE9BQWhFLENBQVgsQ0FGQyxDQUdEO0FBRUE7QUFDQTs7QUFFQUUsZ0JBQVEsQ0FBQ1ksSUFBVCxDQUFjLE1BQWQsRUFBc0JiLElBQXRCO0FBRUEsWUFBSWMsWUFBWSxHQUFHcEIsbUJBQW1CLENBQUNpQixlQUFwQixDQUFvQyx1QkFBcEMsRUFBNkQsY0FBN0QsQ0FBbkI7QUFDQUcsb0JBQVksR0FBRyxPQUFPQSxZQUFQLElBQXVCLFdBQXZCLEdBQXFDLElBQXJDLEdBQTRDQSxZQUEzRDtBQUNBLFlBQUdBLFlBQUgsRUFDQWIsUUFBUSxDQUFDWSxJQUFULENBQWMsUUFBZCxFQUF1QixRQUF2QjtBQUVIO0FBRUo7QUFuQ0UsR0FBUDtBQXFDSCxDQXZDaUMsQ0FEMUMsRTs7Ozs7Ozs7Ozs7QUNEQXRCLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLFdBQWYsRUFDR0MsU0FESCxDQUNhLDRCQURiLEVBQzJDLENBQUMsd0JBQUQsRUFBMkIscUJBQTNCLEVBQWtELFNBQWxELEVBQ3ZDLFVBQVVFLHNCQUFWLEVBQWtDRCxtQkFBbEMsRUFBdURxQixPQUF2RCxFQUFnRTtBQUM5RCxTQUFPO0FBQ0xuQixZQUFRLEVBQUUsR0FETDtBQUVMb0IsWUFBUSxFQUFFLEVBRkw7QUFHTEMsV0FBTyxFQUFFLEtBSEo7QUFJTHBCLFNBQUssRUFBRTtBQUNMcUIsY0FBUSxFQUFFO0FBREwsS0FKRjtBQU9MbEIsUUFBSSxFQUFFLGNBQVVILEtBQVYsRUFBaUJzQixPQUFqQixFQUEwQkMsS0FBMUIsRUFBaUMsQ0FDdEMsQ0FSSTtBQVNMQyxjQUFVLEVBQUMsQ0FBQyxVQUFELEVBQVksUUFBWixFQUFxQixRQUFyQixFQUE4QixVQUFVQyxRQUFWLEVBQW9CQyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0M7QUFFM0UsVUFBSWQsVUFBVSxHQUFHaEIsbUJBQW1CLENBQUNpQixlQUFwQixDQUFvQyx1QkFBcEMsRUFBNkQsWUFBN0QsQ0FBakI7QUFDQSxVQUFJRyxZQUFZLEdBQUdwQixtQkFBbUIsQ0FBQ2lCLGVBQXBCLENBQW9DLHVCQUFwQyxFQUE2RCxjQUE3RCxDQUFuQjtBQUNBRyxrQkFBWSxHQUFHLE9BQU9BLFlBQVAsSUFBdUIsV0FBdkIsR0FBcUMsSUFBckMsR0FBNENBLFlBQTNEOztBQUVBVSxZQUFNLENBQUNsQixPQUFQLENBQWVtQixXQUFmLEdBQTZCLFVBQVVDLEdBQVYsRUFBZTtBQUMxQyxZQUFJMUIsSUFBSSxHQUFHTCxzQkFBc0IsQ0FBQ2lCLFNBQXZCLENBQWlDRixVQUFqQyxFQUE2Q2dCLEdBQTdDLENBQVg7O0FBQ0EsWUFBSTFCLElBQUosRUFBVTtBQUNSLGNBQUcsQ0FBQ2MsWUFBSixFQUNFQyxPQUFPLENBQUNZLFFBQVIsQ0FBaUJDLElBQWpCLEdBQXdCNUIsSUFBeEIsQ0FERixLQUdHZSxPQUFPLENBQUNjLElBQVIsQ0FBYTdCLElBQWIsRUFBbUIsUUFBbkI7QUFDSjtBQUNGLE9BUkQ7QUFTRCxLQWZVO0FBVE4sR0FBUDtBQTJCRCxDQTdCc0MsQ0FEM0MsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUNBOEIsbUJBQU8sQ0FBQyx1SEFBRCxDQUFQOztBQUNBQSxtQkFBTyxDQUFDLHlKQUFELENBQVA7O0FBQ0FBLG1CQUFPLENBQUMsNkpBQUQsQ0FBUDs7QUFFTyxJQUFNQyx1QkFBYjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBLDJCQUVTO0FBQ0wsYUFBTyx1QkFBUDtBQUNEO0FBSkg7QUFBQTtBQUFBLHNDQU9vQjtBQUNoQixhQUFPO0FBQ0wsMENBQWtDLENBQUM7QUFDakNDLFlBQUUsRUFBRSx5QkFENkI7QUFFakNDLGdCQUFNLEVBQUUsU0FGeUI7QUFHakNDLGNBQUksRUFBRSxTQUgyQjtBQUlqQ0MsY0FBSSxFQUFFLFFBSjJCO0FBS2pDQyxrQkFBUSxFQUFFLGtCQUFVQyxlQUFWLEVBQTJCO0FBQ25DLG1CQUFPQSxlQUFlLENBQUNDLElBQWhCLENBQXFCLG1CQUFyQixFQUEwQ0EsSUFBMUMsQ0FBK0MsK0JBQS9DLENBQVA7QUFDRCxXQVBnQztBQVFqQ0MsaUJBQU8sRUFBRTtBQVJ3QixTQUFELENBRDdCO0FBV0wsb0RBQTRDLENBQUM7QUFDM0NQLFlBQUUsRUFBRSxlQUR1QztBQUUzQ0MsZ0JBQU0sRUFBRSxTQUZtQztBQUczQ0MsY0FBSSxFQUFFLFNBSHFDO0FBSTNDQyxjQUFJLEVBQUUsUUFKcUM7QUFLM0NDLGtCQUFRLEVBQUUsa0JBQVVDLGVBQVYsRUFBMkI7QUFDbkMsbUJBQU9BLGVBQWUsQ0FBQ0MsSUFBaEIsQ0FBcUIsMEJBQXJCLEVBQWlEQSxJQUFqRCxDQUFzRCwrQkFBdEQsQ0FBUDtBQUNELFdBUDBDO0FBUTNDQyxpQkFBTyxFQUFFO0FBUmtDLFNBQUQsQ0FYdkM7QUFxQkwsNkRBQXFELENBQUM7QUFDcERQLFlBQUUsRUFBRSxnQkFEZ0Q7QUFFcERDLGdCQUFNLEVBQUUsU0FGNEM7QUFHcERDLGNBQUksRUFBRSxTQUg4QztBQUlwREMsY0FBSSxFQUFFLFFBSjhDO0FBS3BEQyxrQkFBUSxFQUFFLGtCQUFVQyxlQUFWLEVBQTJCO0FBQ25DLG1CQUFPQSxlQUFlLENBQUNDLElBQWhCLENBQXFCLGlDQUFyQixDQUFQO0FBQ0QsV0FQbUQ7QUFRcERDLGlCQUFPLEVBQUU7QUFSMkMsU0FBRCxDQXJCaEQ7QUErQkwscURBQTZDLENBQUM7QUFDNUNQLFlBQUUsRUFBRSxnQkFEd0M7QUFFNUNDLGdCQUFNLEVBQUUsU0FGb0M7QUFHNUNDLGNBQUksRUFBRSxTQUhzQztBQUk1Q0MsY0FBSSxFQUFFLFFBSnNDO0FBSzVDQyxrQkFBUSxFQUFFLGtCQUFVQyxlQUFWLEVBQTJCO0FBQ25DLG1CQUFPQSxlQUFlLENBQUNDLElBQWhCLENBQXFCLGlDQUFyQixDQUFQO0FBQ0QsV0FQMkM7QUFRNUNDLGlCQUFPLEVBQUU7QUFSbUMsU0FBRCxDQS9CeEM7QUF5Q0wsMENBQWtDLENBQUM7QUFDakNQLFlBQUUsRUFBRSxnQkFENkI7QUFFakNDLGdCQUFNLEVBQUUsS0FGeUI7QUFHakNDLGNBQUksRUFBRSxTQUgyQjtBQUlqQ0MsY0FBSSxFQUFFLFFBSjJCO0FBS2pDQyxrQkFBUSxFQUFFLGtCQUFVQyxlQUFWLEVBQTJCO0FBQ25DLG1CQUFPQSxlQUFlLENBQUNDLElBQWhCLENBQXFCLEtBQXJCLEVBQTRCLENBQTVCLENBQVA7QUFDRCxXQVBnQztBQVFqQ0MsaUJBQU8sRUFBRTtBQVJ3QixTQUFELENBekM3QjtBQW9ETCw4Q0FBcUMsQ0FBQztBQUNwQ1AsWUFBRSxFQUFFLGlCQURnQztBQUVwQ0MsZ0JBQU0sRUFBRSxLQUY0QjtBQUdwQ0MsY0FBSSxFQUFFLFNBSDhCO0FBSXBDQyxjQUFJLEVBQUUsUUFKOEI7QUFLcENDLGtCQUFRLEVBQUUsa0JBQVVDLGVBQVYsRUFBMkI7QUFDbkM7QUFDQSxtQkFBT0EsZUFBZSxDQUFDQyxJQUFoQixDQUFxQixvQkFBckIsRUFBMkMsQ0FBM0MsQ0FBUDtBQUNELFdBUm1DO0FBU3BDQyxpQkFBTyxFQUFFO0FBVDJCLFNBQUQsRUFXckM7QUFDRVAsWUFBRSxFQUFFLGlCQUROO0FBRUVHLGNBQUksRUFBRSxRQUZSO0FBR0VELGNBQUksRUFBRSxXQUhSO0FBSUVNLG9CQUFVLEVBQUU7QUFDVix1QkFBVztBQUNUO0FBQ0EsdUJBQVM7QUFGQTtBQURELFdBSmQ7QUFVQUosa0JBQVEsRUFBRSxrQkFBVUMsZUFBVixFQUEyQjtBQUNuQyxtQkFBT0EsZUFBZSxDQUFDQyxJQUFoQixDQUFxQiwyRUFBckIsQ0FBUDtBQUNEO0FBWkQsU0FYcUMsQ0FwRGhDO0FBOEVMLG9EQUE0QyxDQUFDO0FBQzNDTixZQUFFLEVBQUUsZ0JBRHVDO0FBRTNDQyxnQkFBTSxFQUFFLFNBRm1DO0FBRzNDQyxjQUFJLEVBQUUsU0FIcUM7QUFJM0NDLGNBQUksRUFBRSxRQUpxQztBQUszQ0Msa0JBQVEsRUFBRSxrQkFBVUMsZUFBVixFQUEyQjtBQUNuQyxtQkFBT0EsZUFBZSxDQUFDQyxJQUFoQixDQUFxQix3Q0FBckIsQ0FBUDtBQUNELFdBUDBDO0FBUTNDQyxpQkFBTyxFQUFFO0FBUmtDLFNBQUQsRUFVNUM7QUFDRVAsWUFBRSxFQUFFLGdCQUROO0FBRUVDLGdCQUFNLEVBQUUsU0FGVjtBQUdFQyxjQUFJLEVBQUUsU0FIUjtBQUlFQyxjQUFJLEVBQUUsUUFKUjtBQUtFQyxrQkFBUSxFQUFFLGtCQUFVQyxlQUFWLEVBQTJCO0FBQ25DLG1CQUFPQSxlQUFlLENBQUNDLElBQWhCLENBQXFCLG9CQUFyQixDQUFQO0FBQ0QsV0FQSDtBQVFFQyxpQkFBTyxFQUFFO0FBUlgsU0FWNEMsQ0E5RXZDO0FBbUdQLG1EQUEyQyxDQUFDO0FBQzFDUCxZQUFFLEVBQUUsZ0JBRHNDO0FBRTFDQyxnQkFBTSxFQUFFLFNBRmtDO0FBRzFDQyxjQUFJLEVBQUUsU0FIb0M7QUFJMUNDLGNBQUksRUFBRSxRQUpvQztBQUsxQ0Msa0JBQVEsRUFBRSxrQkFBVUMsZUFBVixFQUEyQjtBQUNuQyxtQkFBT0EsZUFBZSxDQUFDQyxJQUFoQixDQUFxQixvQ0FBckIsRUFBMkRBLElBQTNELENBQWdFLCtCQUFoRSxDQUFQO0FBQXdHO0FBQ3pHLFdBUHlDO0FBUTFDQyxpQkFBTyxFQUFFO0FBUmlDLFNBQUQsQ0FuR3BDO0FBOEdQLDRDQUFvQztBQUNsQzs7Ozs7Ozs7OztBQVdGO0FBQ0VQLFlBQUUsRUFBRSxnQkFETjtBQUVFRyxjQUFJLEVBQUUsUUFGUjtBQUdFRCxjQUFJLEVBQUUsV0FIUjtBQUlFTSxvQkFBVSxFQUFFO0FBQ1YsbUJBQU87QUFDSDtBQUNBLHVCQUFTO0FBRk47QUFERyxXQUpkO0FBVUVKLGtCQUFRLEVBQUUsa0JBQVVDLGVBQVYsRUFBMkI7QUFDbkMsbUJBQU9BLGVBQWUsQ0FBQ0MsSUFBaEIsQ0FBcUIsdUJBQXJCLEVBQThDbkMsT0FBOUMsQ0FBc0Qsd0JBQXRELENBQVA7QUFDRCxXQVpIO0FBYUdvQyxpQkFBTyxFQUFFO0FBYlosU0Fab0MsRUE0QnBDO0FBQ0VQLFlBQUUsRUFBRSxnQkFETjtBQUVFRyxjQUFJLEVBQUUsUUFGUjtBQUdFRCxjQUFJLEVBQUUsU0FIUjtBQUlFRCxnQkFBTSxFQUFFLFNBSlY7QUFLRUcsa0JBQVEsRUFBRSxrQkFBVUMsZUFBVixFQUEyQjtBQUNuQyxtQkFBT0EsZUFBZSxDQUFDQyxJQUFoQixDQUFxQix1QkFBckIsRUFBOEMsQ0FBOUMsQ0FBUDtBQUNELFdBUEg7QUFRR0MsaUJBQU8sRUFBRTtBQVJaLFNBNUJvQztBQTlHN0IsT0FBUDtBQXdKRDtBQWhLSDtBQUFBO0FBQUEseUNBa0t1QjtBQUNuQixhQUFPLEVBQVA7QUFHRDtBQXRLSDtBQUFBO0FBQUEsZ0NBMktjO0FBQ1YsYUFBTyxDQUNMLENBQ0U7QUFDQTtBQUZGLE9BREssRUFLTCxDQUNFO0FBQ0E7QUFGRixPQUxLLEVBU0wsQ0FDRTtBQURGLE9BVEssRUFZTCxDQUNFO0FBREYsT0FaSyxFQWVMLENBQ0U7QUFERixPQWZLLEVBa0JMLENBQ0U7QUFERixPQWxCSyxFQXFCTCxDQUNFO0FBREYsT0FyQkssQ0FBUDtBQXlCRDtBQXJNSDtBQUFBO0FBQUEsa0NBdU1nQjtBQUVaLGFBQU8sQ0FDTDtBQUNBO0FBRkssT0FBUDtBQUtEO0FBOU1IOztBQUFBO0FBQUEsRUFBNkNFLEdBQUcsQ0FBQ0MsT0FBSixDQUFZQyxHQUFaLENBQWdCQyxhQUE3RDtBQWtOQUgsR0FBRyxDQUFDQyxPQUFKLENBQVlDLEdBQVosQ0FBZ0JFLGlCQUFoQixDQUFrQ0MsSUFBbEMsQ0FBdUMsSUFBSWYsdUJBQUosRUFBdkMsRTs7Ozs7Ozs7Ozs7O0FDdk5hOztBQUNaLGFBQVk7QUFDVDs7QUFDQXhDLFNBQU8sQ0FBQ0MsTUFBUixDQUFlLFdBQWYsRUFDS3VELE9BREwsQ0FDYSx3QkFEYixFQUVJLFlBQVk7QUFFTixXQUFPO0FBQ0huQyxlQUFTLEVBQUUsbUJBQVNvQyxPQUFULEVBQWtCbEQsTUFBbEIsRUFBMEJDLE9BQTFCLEVBQW1DO0FBRTVDLFlBQUcsQ0FBQ0QsTUFBSixFQUFZO0FBQ1JVLGlCQUFPLENBQUNDLEdBQVIsQ0FBWSw4QkFBWjtBQUNILFNBRkQsTUFHSyxJQUFJLENBQUN1QyxPQUFMLEVBQ0R4QyxPQUFPLENBQUNDLEdBQVIsQ0FBWSw2Q0FBWixFQURDLEtBRUE7QUFFRCxjQUFJd0MsTUFBTSxHQUFHbkQsTUFBYjs7QUFFQSxjQUFHQyxPQUFILEVBQVk7QUFDUmtELGtCQUFNLENBQUMsTUFBRCxDQUFOLEdBQWlCbkQsTUFBTSxDQUFDQyxPQUFPLENBQUMsTUFBRCxDQUFSLENBQXZCO0FBQ0FrRCxrQkFBTSxDQUFDLGtCQUFELENBQU4sR0FBMkJuRCxNQUFNLENBQUNDLE9BQU8sQ0FBQyxrQkFBRCxDQUFSLENBQWpDO0FBQ0g7O0FBRUQsY0FBSW1ELFVBQVUsR0FBR0YsT0FBTyxDQUFDL0IsT0FBUixDQUFnQixRQUFoQixFQUEwQmdDLE1BQU0sQ0FBQ0UsSUFBakMsQ0FBakI7QUFDQUQsb0JBQVUsR0FBR0EsVUFBVSxDQUFDakMsT0FBWCxDQUFtQixvQkFBbkIsRUFBeUNnQyxNQUFNLENBQUNHLGdCQUFoRCxDQUFiO0FBRUEsaUJBQVFGLFVBQVI7QUFFSDs7QUFFRCxlQUFPLElBQVA7QUFFRDtBQTFCRSxLQUFQO0FBK0JMLEdBbkNMO0FBb0NILENBdENBLEdBQUQsQyIsImZpbGUiOiJudHQuc21hcnRpdC5jdXN0b21FbnRpdHlBc3NldExpbmsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjdXN0b21FbnRpdHlBc3NldExpbmtcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibnR0XCJdID0gcm9vdFtcIm50dFwiXSB8fCB7fSwgcm9vdFtcIm50dFwiXVtcInNtYXJ0aXRcIl0gPSByb290W1wibnR0XCJdW1wic21hcnRpdFwiXSB8fCB7fSwgcm9vdFtcIm50dFwiXVtcInNtYXJ0aXRcIl1bXCJjdXN0b21FbnRpdHlBc3NldExpbmtcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL21vZHVsZXMvY3VzdG9tRW50aXR5QXNzZXRMaW5rL2luZGV4LmpzXCIpO1xuIiwiXHJcbmFuZ3VsYXIubW9kdWxlKCdteWl0c21BcHAnKVxyXG4gICAgLmRpcmVjdGl2ZSgnY3VzdG9tQWZmZWN0ZWRBc3NldExpbmsnLCBbJ01vZHVsZUNvbmZpZ1NlcnZpY2UnLCAnY3VzdG9tQXNzZXRMaW5rU2VydmljZScsXHJcbiAgICAgICAgZnVuY3Rpb24gKE1vZHVsZUNvbmZpZ1NlcnZpY2UsIGN1c3RvbUFzc2V0TGlua1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgICAgICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNpRGF0YTogJz1jdXN0b21BZmZlY3RlZEFzc2V0TGluaycsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwcGluZzogJz1tYXBwaW5nJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgaUVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBpRWxlbWVudC5wYXJlbnRzKFwiLnByb2ZpbGUtcmVsYXRpb25fX2l0ZW1cIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLnJlbW92ZUF0dHJpYnV0ZShcIm5nLWNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRwYXJlbnQuJHBhcmVudC5zaG93RGV0YWlscz1udWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NvcGUuY2lEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBpbmZvcm1hdGlvbiBhYm91dCBlbnRpdHknKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rRm9ybWF0ID0gTW9kdWxlQ29uZmlnU2VydmljZS5nZXRNb2R1bGVDb25maWcoXCJjdXN0b21FbnRpdHlBc3NldExpbmtcIilbXCJsaW5rRm9ybWF0XCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IGN1c3RvbUFzc2V0TGlua1NlcnZpY2UucGFyc2VMaW5rKGxpbmtGb3JtYXQsIHNjb3BlLmNpRGF0YSxzY29wZS5tYXBwaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgb2JqZWN0ID0gc2NvcGUuY2lEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgZW50aXR5TGluayA9IGxpbmtGb3JtYXQucmVwbGFjZShcIntOYW1lfVwiLCBvYmplY3QubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZW50aXR5TGluayA9IGVudGl0eUxpbmsucmVwbGFjZShcIntSZWNvbmNpbGlhdGlvbklkfVwiLCBvYmplY3QucmVjb25jaWxpYXRpb25JZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpRWxlbWVudC5hdHRyKCdocmVmJywgbGluayk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlbkluTmV3VGFiID0gTW9kdWxlQ29uZmlnU2VydmljZS5nZXRNb2R1bGVDb25maWcoXCJjdXN0b21FbnRpdHlBc3NldExpbmtcIilbXCJvcGVuSW5OZXdUYWJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5Jbk5ld1RhYiA9IHR5cGVvZiBvcGVuSW5OZXdUYWIgPT0gXCJ1bmRlZmluZWRcIiA/IHRydWUgOiBvcGVuSW5OZXdUYWI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9wZW5Jbk5ld1RhYilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaUVsZW1lbnQuYXR0cigndGFyZ2V0JywnX2JsYW5rJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfV0pOyIsImFuZ3VsYXIubW9kdWxlKCdteWl0c21BcHAnKVxyXG4gIC5kaXJlY3RpdmUoJ3Njb3BlQ29udHJvbGxlckNpUmVsYXRpb25zJywgWydjdXN0b21Bc3NldExpbmtTZXJ2aWNlJywgJ01vZHVsZUNvbmZpZ1NlcnZpY2UnLCAnJHdpbmRvdycsXHJcbiAgICBmdW5jdGlvbiAoY3VzdG9tQXNzZXRMaW5rU2VydmljZSwgTW9kdWxlQ29uZmlnU2VydmljZSwgJHdpbmRvdykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiAnRScsXHJcbiAgICAgICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgICAgIHJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICB2YXJpYWJsZTogJz0nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb250cm9sbGVyOlsnJGVsZW1lbnQnLCckYXR0cnMnLCckc2NvcGUnLGZ1bmN0aW9uICgkZWxlbWVudCwgJGF0dHJzLCAkc2NvcGUpIHtcclxuXHJcbiAgICAgICAgICB2YXIgbGlua0Zvcm1hdCA9IE1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0TW9kdWxlQ29uZmlnKFwiY3VzdG9tRW50aXR5QXNzZXRMaW5rXCIpW1wibGlua0Zvcm1hdFwiXTtcclxuICAgICAgICAgIHZhciBvcGVuSW5OZXdUYWIgPSBNb2R1bGVDb25maWdTZXJ2aWNlLmdldE1vZHVsZUNvbmZpZyhcImN1c3RvbUVudGl0eUFzc2V0TGlua1wiKVtcIm9wZW5Jbk5ld1RhYlwiXTtcclxuICAgICAgICAgIG9wZW5Jbk5ld1RhYiA9IHR5cGVvZiBvcGVuSW5OZXdUYWIgPT0gXCJ1bmRlZmluZWRcIiA/IHRydWUgOiBvcGVuSW5OZXdUYWI7XHJcblxyXG4gICAgICAgICAgJHNjb3BlLiRwYXJlbnQuc2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gY3VzdG9tQXNzZXRMaW5rU2VydmljZS5wYXJzZUxpbmsobGlua0Zvcm1hdCwgcm93KTtcclxuICAgICAgICAgICAgaWYgKGxpbmspIHtcclxuICAgICAgICAgICAgICBpZighb3BlbkluTmV3VGFiKVxyXG4gICAgICAgICAgICAgICAgJHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGluaztcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgJHdpbmRvdy5vcGVuKGxpbmssICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1dXHJcblxyXG4gICAgICB9XHJcbiAgICB9XSk7IiwiLy9yZXF1aXJlKCcuL2RpcmVjdGl2ZXMvbnR0LWN1c3RvbS1hc3NldC1lbnRpdHktcHJvZmlsZS1saW5rLWRpcmVjdGl2ZScpO1xyXG5yZXF1aXJlKCcuL3NlcnZpY2VzL2N1c3RvbS1hc3NldC1saW5rLXNlcnZpY2UnKTtcclxucmVxdWlyZSgnLi9kaXJlY3RpdmVzL250dC1jdXN0b20tYWZmZWN0ZWQtYXNzZXQtbGluay1kaXJlY3RpdmUnKTtcclxucmVxdWlyZSgnLi9kaXJlY3RpdmVzL250dC1zY29wZWNvbnRyb2xsZXItY2ktcmVsYXRpb25zLWRpcmVjdGl2ZScpO1xyXG5cclxuZXhwb3J0IGNsYXNzIGN1c3RvbUVuaXRpeVByb2ZpbGVMaW5rIGV4dGVuZHMgbnR0LnNtYXJ0aXQuYXBpLklDdXN0b21Nb2R1bGUge1xyXG5cclxuICBuYW1lKCkge1xyXG4gICAgcmV0dXJuIFwiY3VzdG9tRW50aXR5QXNzZXRMaW5rXCI7XHJcbiAgfVxyXG5cclxuXHJcbiAgaW5qZWN0VGVtcGxhdGVzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgXCJ2aWV3cy9jb21tb24vcmVsYXRlZC1pdGVtLmh0bWxcIjogW3tcclxuICAgICAgICBpZDogXCJjdXN0b21Fbml0aXlQcm9maWxlTGlua1wiLFxyXG4gICAgICAgIG1ldGhvZDogXCJyZXBsYWNlXCIsXHJcbiAgICAgICAgbW9kZTogXCJwYXJ0aWFsXCIsXHJcbiAgICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKCRqcXVlcnlUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuICRqcXVlcnlUZW1wbGF0ZS5maW5kKFwidGFibGUuYXNzZXQtdGFibGVcIikuZmluZChcImFbZW50aXR5LXByb2ZpbGUtbGluaz0naXRlbSddXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc25pcHBldDogJzxhIGN1c3RvbS1hZmZlY3RlZC1hc3NldC1saW5rPVwiaXRlbS5yZWFsT2JqZWN0XCIgY2xhc3M9XCJ0aWNrZXQtc3VtbWFyeS10cnVuY2F0ZVwiIHRpdGxlPVwie3tpdGVtLnJlYWxPYmplY3QubmFtZX19XCI+e3tpdGVtLnJlYWxPYmplY3QubmFtZX19PC9hPicsXHJcbiAgICAgIH1dLFxyXG4gICAgICBcInZpZXdzL2N1c3RvbS13aWRnZXRzL2FmZmVjdGVkLWFzc2V0Lmh0bWxcIjogW3tcclxuICAgICAgICBpZDogXCJhZmZlY3RlZEFzc2V0XCIsXHJcbiAgICAgICAgbWV0aG9kOiBcInJlcGxhY2VcIixcclxuICAgICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgICB0eXBlOiBcImpxdWVyeVwiLFxyXG4gICAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbiAoJGpxdWVyeVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCJzcGFuLmN1c3RvbS1maWVsZF9fdmFsdWVcIikuZmluZChcImFbbmctaWY9J2RhdGEudmFsdWUuY2kubmFtZSddXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc25pcHBldDogJzxhIGN1c3RvbS1hZmZlY3RlZC1hc3NldC1saW5rPVwiZGF0YS52YWx1ZS5jaVwiIG5nLWlmPVwiZGF0YS52YWx1ZS5jaS5uYW1lXCIgYXJpYS1sYWJlbD1cInt7ZGF0YS5sYWJlbH19IHt7ZGF0YS52YWx1ZS5jaS5uYW1lfX1cIiAgY2xhc3M9XCJ0aWNrZXRfX2ZpZWxkLXZhbHVlXCI+e3tkYXRhLnZhbHVlLmNpLm5hbWV9fTwvYT4nXHJcbiAgICAgIH1dLFxyXG4gICAgICBcInZpZXdzL2tub3duLWVycm9yL2tub3duLWVycm9yLWRldGFpbHMtZWRpdG9yLmh0bWxcIjogW3tcclxuICAgICAgICBpZDogXCJhZmZlY3RlZEFzc2V0MlwiLFxyXG4gICAgICAgIG1ldGhvZDogXCJyZXBsYWNlXCIsXHJcbiAgICAgICAgbW9kZTogXCJwYXJ0aWFsXCIsXHJcbiAgICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKCRqcXVlcnlUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuICRqcXVlcnlUZW1wbGF0ZS5maW5kKFwiYVtuZy1pZj0ndGlja2V0LmNhdXNhbENJLm5hbWUnXVwiKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNuaXBwZXQ6ICc8YSBjdXN0b20tYWZmZWN0ZWQtYXNzZXQtbGluaz1cInRpY2tldC5jYXVzYWxDSVwiIG5nLWlmPVwidGlja2V0LmNhdXNhbENJLm5hbWVcIj57e3RpY2tldC5jYXVzYWxDSS5uYW1lfX08L2E+J1xyXG4gICAgICB9XSxcclxuICAgICAgXCJ2aWV3cy9wcm9ibGVtL3Byb2JsZW0tZGV0YWlscy1lZGl0b3IuaHRtbFwiOiBbe1xyXG4gICAgICAgIGlkOiBcImFmZmVjdGVkQXNzZXQzXCIsXHJcbiAgICAgICAgbWV0aG9kOiBcInJlcGxhY2VcIixcclxuICAgICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgICB0eXBlOiBcImpxdWVyeVwiLFxyXG4gICAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbiAoJGpxdWVyeVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCJhW25nLWlmPSd0aWNrZXQuY2F1c2FsQ0kubmFtZSddXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc25pcHBldDogJzxhIGN1c3RvbS1hZmZlY3RlZC1hc3NldC1saW5rPVwidGlja2V0LmNhdXNhbENJXCIgbmctaWY9XCJ0aWNrZXQuY2F1c2FsQ0kubmFtZVwiPnt7dGlja2V0LmNhdXNhbENJLm5hbWV9fTwvYT4nXHJcbiAgICAgIH1dLFxyXG4gICAgICBcInZpZXdzL2NoYW5nZS9jaS1yZWxhdGlvbnMuaHRtbFwiOiBbe1xyXG4gICAgICAgIGlkOiBcImFmZmVjdGVkQXNzZXQ0XCIsXHJcbiAgICAgICAgbWV0aG9kOiBcImFkZFwiLFxyXG4gICAgICAgIG1vZGU6IFwicGFydGlhbFwiLFxyXG4gICAgICAgIHR5cGU6IFwianF1ZXJ5XCIsXHJcbiAgICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uICgkanF1ZXJ5VGVtcGxhdGUpIHtcclxuICAgICAgICAgIHJldHVybiAkanF1ZXJ5VGVtcGxhdGUuZmluZChcImRpdlwiKVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNuaXBwZXQ6ICc8c2NvcGUtY29udHJvbGxlci1jaS1yZWxhdGlvbnMgdmFyaWFibGU9XCJpdGVtTGlzdFwiPjwvc2NvcGUtY29udHJvbGxlci1jaS1yZWxhdGlvbnM+JyxcclxuXHJcbiAgICAgIH1dLFxyXG4gICAgICBcInZpZXdzL2ZlZWQvZmVlZC1pdGVtLXJlbmRlcmVyLmh0bWxcIjpbe1xyXG4gICAgICAgIGlkOiBcImFmZmVjdGVkQXNzZXQxNVwiLFxyXG4gICAgICAgIG1ldGhvZDogXCJhZGRcIixcclxuICAgICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgICB0eXBlOiBcImpxdWVyeVwiLFxyXG4gICAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbiAoJGpxdWVyeVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAvL3JldHVybiAkanF1ZXJ5VGVtcGxhdGUuZmluZChcImFbbmctaWY9XFxcIml0ZW0uaXNBcHBFbmFibGVkICYmIGl0ZW0ucmVsYXRlZE9iamVjdC50eXBlICE9PSAna25vd2xlZGdlJ1xcXCJdXCIpO1xyXG4gICAgICAgICAgcmV0dXJuICRqcXVlcnlUZW1wbGF0ZS5maW5kKFwiLmZlZWQtaXRlbV9faGVhZGVyXCIpWzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc25pcHBldDogJzxhIGNsYXNzPVwiZmVlZF9pdGVtX19kZXRhaWxzLWxpbmtcIiBjdXN0b20tYWZmZWN0ZWQtYXNzZXQtbGluaz1cIml0ZW0ucmVsYXRlZE9iamVjdFwiIG5nLWlmPVwiaXRlbS5yZWxhdGVkT2JqZWN0LnRpdGxlICYmIGl0ZW0ucmVsYXRlZE9iamVjdC50eXBlPT1cXCdhc3NldFxcJ1wiIG1hcHBpbmc9XCJ7XFwnbmFtZVxcJzogXFwndGl0bGVcXCcsIFxcJ3JlY29uY2lsaWF0aW9uSWRcXCc6IFxcJ2lkXFwnfVwiPnt7aXRlbS5yZWxhdGVkT2JqZWN0LnRpdGxlfX08L2E+J1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiYWZmZWN0ZWRBc3NldDE2XCIsXHJcbiAgICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgICBtb2RlOiBcImF0dHJpYnV0ZVwiLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgIFwicmVwbGFjZVwiOiB7XHJcbiAgICAgICAgICAgIC8vXCJuZy1pZlwiOiBcImZpZWxkLmlzVGV4dEZpZWxkKCkgJiYgc2hvd0ZpZWxkKGZpZWxkKSAmJiBmaWVsZC5uYW1lICE9IFxcJ1wiK3RoaXMuaW5qZWN0Q29uZmlnLnBhcmFtcy5pbmplY3RGaWVsZE5hbWUrXCJcXCdcIlxyXG4gICAgICAgICAgICBcIm5nLWlmXCI6IFwiaXRlbS5pc0FwcEVuYWJsZWQgJiYgaXRlbS5yZWxhdGVkT2JqZWN0LnR5cGUgIT09ICdrbm93bGVkZ2UnICYmIGl0ZW0ucmVsYXRlZE9iamVjdC50eXBlICE9PSAnYXNzZXQnXCJcclxuICAgICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uICgkanF1ZXJ5VGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCJhW25nLWlmPVxcXCJpdGVtLmlzQXBwRW5hYmxlZCAmJiBpdGVtLnJlbGF0ZWRPYmplY3QudHlwZSAhPT0gJ2tub3dsZWRnZSdcXFwiXVwiKTtcclxuICAgICAgfX1cclxuXHJcbiAgICAgIF0sXHJcbiAgICAgIFwidmlld3MvYXNzZXQvYXNzZXQtZGV0YWlscy1saWZlY3ljbGUuaHRtbFwiOiBbe1xyXG4gICAgICAgIGlkOiBcImFmZmVjdGVkQXNzZXQ1XCIsXHJcbiAgICAgICAgbWV0aG9kOiBcInJlcGxhY2VcIixcclxuICAgICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgICB0eXBlOiBcImpxdWVyeVwiLFxyXG4gICAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbiAoJGpxdWVyeVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCIucHJvZmlsZV9fdGl0bGUtbGluayA+IC5wcm9maWxlX190aXRsZVwiKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNuaXBwZXQ6ICc8YSBjdXN0b20tYWZmZWN0ZWQtYXNzZXQtbGluaz1cImFzc2V0XCIgbmctaWY9XCJhc3NldFwiPnt7YXNzZXQubmFtZX19PC9hPicsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJhZmZlY3RlZEFzc2V0NlwiLFxyXG4gICAgICAgIG1ldGhvZDogXCJyZXBsYWNlXCIsXHJcbiAgICAgICAgbW9kZTogXCJwYXJ0aWFsXCIsXHJcbiAgICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKCRqcXVlcnlUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuICRqcXVlcnlUZW1wbGF0ZS5maW5kKFwiLnRpY2tldF9fbmFtZS1saW5rXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc25pcHBldDogJzxhIGN1c3RvbS1hZmZlY3RlZC1hc3NldC1saW5rPVwiYXNzZXRcIiBuZy1pZj1cIiFpc0Z1bGxWZXJzaW9uXCI+e3tcXCdzZWFyY2gucHJldmlldy52aWV3RnVsbEFzc2V0XFwnIHwgaTE4bn19PC9hPicsXHJcbiAgICAgIH0gICAgIFxyXG4gICAgXSwgXHJcbiAgICBcInZpZXdzL3BlcnNvbi9wZXJzb24tYXNzZXQtcmVuZGVyZXIuaHRtbFwiOiBbe1xyXG4gICAgICBpZDogXCJhZmZlY3RlZEFzc2V0N1wiLFxyXG4gICAgICBtZXRob2Q6IFwicmVwbGFjZVwiLFxyXG4gICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uICgkanF1ZXJ5VGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCIucmVzb3VyY2Utc2xpY2VfX2xpbmtlZC1pdGVtX3RpdGxlXCIpLmZpbmQoXCJhW2VudGl0eS1wcm9maWxlLWxpbms9J2RhdGEnXVwiKTs7XHJcbiAgICAgIH0sXHJcbiAgICAgIHNuaXBwZXQ6ICc8YSBjdXN0b20tYWZmZWN0ZWQtYXNzZXQtbGluaz1cImRhdGFcIiBuZy1pZj1cImRhdGFcIj57e2RhdGEubmFtZX19PC9hPicsXHJcblxyXG4gICAgfV0sXHJcbiAgICBcInZpZXdzL3BlcnNvbi9wZXJzb24tZGV0YWlscy5odG1sXCI6IFtcclxuICAgICAgLyp7XHJcbiAgICAgIGlkOiBcImFmZmVjdGVkQXNzZXQ4XCIsXHJcbiAgICAgIHR5cGU6IFwianF1ZXJ5XCIsXHJcbiAgICAgIG1vZGU6IFwicGFydGlhbFwiLFxyXG4gICAgICBtZXRob2Q6IFwicmVwbGFjZVwiLFxyXG4gICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKCRqcXVlcnlUZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiAkanF1ZXJ5VGVtcGxhdGUuZmluZChcInBlcnNvbi1hc3NldC1yZW5kZXJlclwiKVsxXTtcclxuICAgICAgfSxcclxuICAgICAgIHNuaXBwZXQ6ICc8cGVyc29uLWFzc2V0LXJlbmRlcmVyIGRhdGE9XCJhc3NldFwiPjwvcGVyc29uLWFzc2V0LXJlbmRlcmVyPicsXHJcblxyXG4gICAgfSwgKi9cclxuICAgIHtcclxuICAgICAgaWQ6IFwiYWZmZWN0ZWRBc3NldDlcIixcclxuICAgICAgdHlwZTogXCJqcXVlcnlcIixcclxuICAgICAgbW9kZTogXCJhdHRyaWJ1dGVcIixcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFwiYWRkXCI6IHtcclxuICAgICAgICAgICAgLy9cIm5nLWlmXCI6IFwiZmllbGQuaXNUZXh0RmllbGQoKSAmJiBzaG93RmllbGQoZmllbGQpICYmIGZpZWxkLm5hbWUgIT0gXFwnXCIrdGhpcy5pbmplY3RDb25maWcucGFyYW1zLmluamVjdEZpZWxkTmFtZStcIlxcJ1wiXHJcbiAgICAgICAgICAgIFwic3R5bGVcIjogXCJjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudFwiXHJcbiAgICAgICAgfVxyXG4gICAgIH0sXHJcbiAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbiAoJGpxdWVyeVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuICRqcXVlcnlUZW1wbGF0ZS5maW5kKFwicGVyc29uLWFzc2V0LXJlbmRlcmVyXCIpLnBhcmVudHMoXCIucGVyc29uLWl0ZW1fX3RlbXBsYXRlXCIpO1xyXG4gICAgICB9LFxyXG4gICAgICAgc25pcHBldDogJzxwZXJzb24tYXNzZXQtcmVuZGVyZXIgZGF0YT1cImFzc2V0XCI+PC9wZXJzb24tYXNzZXQtcmVuZGVyZXI+JyxcclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJhZmZlY3RlZEFzc2V0OFwiLFxyXG4gICAgICB0eXBlOiBcImpxdWVyeVwiLFxyXG4gICAgICBtb2RlOiBcInBhcnRpYWxcIixcclxuICAgICAgbWV0aG9kOiBcInJlcGxhY2VcIixcclxuICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uICgkanF1ZXJ5VGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gJGpxdWVyeVRlbXBsYXRlLmZpbmQoXCJwZXJzb24tYXNzZXQtcmVuZGVyZXJcIilbMV07XHJcbiAgICAgIH0sXHJcbiAgICAgICBzbmlwcGV0OiAnPHBlcnNvbi1hc3NldC1yZW5kZXJlciBkYXRhPVwiYXNzZXRcIj48L3BlcnNvbi1hc3NldC1yZW5kZXJlcj4nLFxyXG5cclxuICAgIH0sXVxyXG5cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmplY3REeW5UZW1wbGF0ZXMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIHRlbXBsYXRlcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICAvL29yaWdpbjogXCJ2aWV3cy90aWNrZXQvaW5jaWRlbnQtZGV0YWlscy12Mi5odG1sXCIsXHJcbiAgICAgICAgLy90ZW1wbGF0ZTogXCJ2aWV3cy90aWNrZXQvaW5jaWRlbnQtZGV0YWlscy12Mi5odG1sXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIC8vb3JpZ2luOiBcInZpZXdzL3RpY2tldC90YXNrLWRldGFpbHMtdjIuaHRtbFwiLFxyXG4gICAgICAgIC8vdGVtcGxhdGU6IFwidmlld3MvdGlja2V0L3Rhc2stZGV0YWlscy12Mi5odG1sXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIC8vdGVtcGxhdGU6IFwidmlld3MvdGlja2V0L3RpY2tldC1ndHctcGFuZWwuaHRtbFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICAvL3RlbXBsYXRlOiBcInZpZXdzL3RpY2tldC90aWNrZXQtZ3R3LWl0ZW0uaHRtbFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICAvL3RlbXBsYXRlOiBcInZpZXdzL3RpY2tldC90aWNrZXQtZ3R3LWl0ZW0tZGlhbG9nLmh0bWxcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgLy90ZW1wbGF0ZTogXCJ2aWV3cy90aWNrZXQvdGlja2V0LWd0dy1kZXRhaWxzLmh0bWxcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgLy90ZW1wbGF0ZTogXCJ2aWV3cy90aWNrZXQvdGlja2V0LWd0dy1pdGVtLWludGVyZmFjZS5odG1sXCJcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgaTE4bkxvY2FsZXMoKSB7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLy8gXCJkZVwiOltcImkxOG4vbnR0LXJlc291cmNlcy1sb2NhbGVfZGUuanNvblwiXSxcclxuICAgICAgLy8gXCJlblwiOltcImkxOG4vbnR0LXJlc291cmNlcy1sb2NhbGVfZW4uanNvblwiXVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG59XHJcblxyXG5udHQuc21hcnRpdC5hcGkubnR0U21hcnRpdE1vZHVsZXMucHVzaChuZXcgY3VzdG9tRW5pdGl5UHJvZmlsZUxpbmsoKSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbihmdW5jdGlvbiAoKSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnbXlpdHNtQXBwJylcclxuICAgICAgICAuZmFjdG9yeSgnY3VzdG9tQXNzZXRMaW5rU2VydmljZScsXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcnNlTGluazogZnVuY3Rpb24ocGF0dGVybiwgY2lEYXRhLCBtYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWNpRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gaW5mb3JtYXRpb24gYWJvdXQgZW50aXR5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghcGF0dGVybilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xpbmsgcGF0dGVybiBtaXNzaW5nLi4uY2hlY2sgY29uZmlndXJhdGlvbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IGNpRGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtcIm5hbWVcIl0gPSBjaURhdGFbbWFwcGluZ1tcIm5hbWVcIl1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W1wicmVjb25jaWxpYXRpb25JZFwiXT1jaURhdGFbbWFwcGluZ1tcInJlY29uY2lsaWF0aW9uSWRcIl1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eUxpbmsgPSBwYXR0ZXJuLnJlcGxhY2UoXCJ7TmFtZX1cIiwgb2JqZWN0Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlMaW5rID0gZW50aXR5TGluay5yZXBsYWNlKFwie1JlY29uY2lsaWF0aW9uSWR9XCIsIG9iamVjdC5yZWNvbmNpbGlhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICBlbnRpdHlMaW5rO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbn0oKSk7Il0sInNvdXJjZVJvb3QiOiIifQ==
|