-
-
Save elvisbegovic/84a83e66e6175fc647768c53c6d77e51 to your computer and use it in GitHub Desktop.
tree.component.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as ɵngcc0 from '@angular/core'; | |
const _c0 = ["loadingTemplate"]; | |
const _c1 = ["treeNodeTemplate"]; | |
const _c2 = ["treeNodeWrapperTemplate"]; | |
const _c3 = ["treeNodeFullTemplate"]; | |
const _c4 = ["viewport"]; | |
const _c5 = function (a0, a1, a2, a3) { return { loadingTemplate: a0, treeNodeTemplate: a1, treeNodeWrapperTemplate: a2, treeNodeFullTemplate: a3 }; }; | |
function TreeComponent_tree_node_collection_3_Template(rf, ctx) { if (rf & 1) { | |
ɵngcc0.ɵɵelement(0, "tree-node-collection", 4); | |
} if (rf & 2) { | |
const ctx_r3 = ɵngcc0.ɵɵnextContext(); | |
ɵngcc0.ɵɵproperty("nodes", ctx_r3.treeModel.roots)("treeModel", ctx_r3.treeModel)("templates", ɵngcc0.ɵɵpureFunction4(3, _c5, ctx_r3.loadingTemplate, ctx_r3.treeNodeTemplate, ctx_r3.treeNodeWrapperTemplate, ctx_r3.treeNodeFullTemplate)); | |
} } | |
function TreeComponent_tree_node_drop_slot_4_Template(rf, ctx) { if (rf & 1) { | |
ɵngcc0.ɵɵelement(0, "tree-node-drop-slot", 5); | |
} if (rf & 2) { | |
const ctx_r4 = ɵngcc0.ɵɵnextContext(); | |
ɵngcc0.ɵɵproperty("dropIndex", 0)("node", ctx_r4.treeModel.virtualRoot); | |
} } | |
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | |
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | |
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | |
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | |
return c > 3 && r && Object.defineProperty(target, key, r), r; | |
}; | |
var __metadata = (this && this.__metadata) || function (k, v) { | |
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); | |
}; | |
import { Component, ContentChild, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild } from '@angular/core'; | |
import { TreeModel } from '../models/tree.model'; | |
import { TreeDraggedElement } from '../models/tree-dragged-element.model'; | |
import { TreeViewportComponent } from './tree-viewport.component'; | |
import includes from 'lodash/includes'; | |
import pick from 'lodash/pick'; | |
var TreeComponent = /** @class */ (function () { | |
function TreeComponent(treeModel, treeDraggedElement) { | |
var _this = this; | |
this.treeModel = treeModel; | |
this.treeDraggedElement = treeDraggedElement; | |
treeModel.eventNames.forEach(function (name) { return _this[name] = new EventEmitter(); }); | |
treeModel.subscribeToState(function (state) { return _this.stateChange.emit(state); }); | |
} | |
Object.defineProperty(TreeComponent.prototype, "nodes", { | |
// Will be handled in ngOnChanges | |
set: function (nodes) { | |
}, | |
enumerable: true, | |
configurable: true | |
}); | |
; | |
Object.defineProperty(TreeComponent.prototype, "options", { | |
set: function (options) { | |
}, | |
enumerable: true, | |
configurable: true | |
}); | |
; | |
Object.defineProperty(TreeComponent.prototype, "focused", { | |
set: function (value) { | |
this.treeModel.setFocus(value); | |
}, | |
enumerable: true, | |
configurable: true | |
}); | |
Object.defineProperty(TreeComponent.prototype, "state", { | |
set: function (state) { | |
this.treeModel.setState(state); | |
}, | |
enumerable: true, | |
configurable: true | |
}); | |
TreeComponent.prototype.onKeydown = function ($event) { | |
if (!this.treeModel.isFocused) | |
return; | |
if (includes(['input', 'textarea'], document.activeElement.tagName.toLowerCase())) | |
return; | |
var focusedNode = this.treeModel.getFocusedNode(); | |
this.treeModel.performKeyAction(focusedNode, $event); | |
}; | |
TreeComponent.prototype.onMousedown = function ($event) { | |
function isOutsideClick(startElement, nodeName) { | |
return !startElement ? true : startElement.localName === nodeName ? false : isOutsideClick(startElement.parentElement, nodeName); | |
} | |
if (isOutsideClick($event.target, 'tree-root')) { | |
this.treeModel.setFocus(false); | |
} | |
}; | |
TreeComponent.prototype.ngOnChanges = function (changes) { | |
if (changes.options || changes.nodes) { | |
this.treeModel.setData({ | |
options: changes.options && changes.options.currentValue, | |
nodes: changes.nodes && changes.nodes.currentValue, | |
events: pick(this, this.treeModel.eventNames) | |
}); | |
} | |
}; | |
TreeComponent.prototype.sizeChanged = function () { | |
this.viewportComponent.setViewport(); | |
}; | |
__decorate([ | |
ContentChild('loadingTemplate', { static: false }), | |
__metadata("design:type", TemplateRef) | |
], TreeComponent.prototype, "loadingTemplate", void 0); | |
__decorate([ | |
ContentChild('treeNodeTemplate', { static: false }), | |
__metadata("design:type", TemplateRef) | |
], TreeComponent.prototype, "treeNodeTemplate", void 0); | |
__decorate([ | |
ContentChild('treeNodeWrapperTemplate', { static: false }), | |
__metadata("design:type", TemplateRef) | |
], TreeComponent.prototype, "treeNodeWrapperTemplate", void 0); | |
__decorate([ | |
ContentChild('treeNodeFullTemplate', { static: false }), | |
__metadata("design:type", TemplateRef) | |
], TreeComponent.prototype, "treeNodeFullTemplate", void 0); | |
__decorate([ | |
ViewChild('viewport', { static: false }), | |
__metadata("design:type", TreeViewportComponent) | |
], TreeComponent.prototype, "viewportComponent", void 0); | |
__decorate([ | |
Input(), | |
__metadata("design:type", Array), | |
__metadata("design:paramtypes", [Array]) | |
], TreeComponent.prototype, "nodes", null); | |
__decorate([ | |
Input(), | |
__metadata("design:type", Object), | |
__metadata("design:paramtypes", [Object]) | |
], TreeComponent.prototype, "options", null); | |
__decorate([ | |
Input(), | |
__metadata("design:type", Boolean), | |
__metadata("design:paramtypes", [Boolean]) | |
], TreeComponent.prototype, "focused", null); | |
__decorate([ | |
Input(), | |
__metadata("design:type", Object), | |
__metadata("design:paramtypes", [Object]) | |
], TreeComponent.prototype, "state", null); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "toggleExpanded", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "activate", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "deactivate", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "nodeActivate", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "nodeDeactivate", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "select", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "deselect", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "focus", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "blur", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "updateData", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "initialized", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "moveNode", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "copyNode", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "loadNodeChildren", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "changeFilter", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "event", void 0); | |
__decorate([ | |
Output(), | |
__metadata("design:type", Object) | |
], TreeComponent.prototype, "stateChange", void 0); | |
__decorate([ | |
HostListener('body: keydown', ['$event']), | |
__metadata("design:type", Function), | |
__metadata("design:paramtypes", [Object]), | |
__metadata("design:returntype", void 0) | |
], TreeComponent.prototype, "onKeydown", null); | |
__decorate([ | |
HostListener('body: mousedown', ['$event']), | |
__metadata("design:type", Function), | |
__metadata("design:paramtypes", [Object]), | |
__metadata("design:returntype", void 0) | |
], TreeComponent.prototype, "onMousedown", null); | |
TreeComponent = __decorate([ __metadata("design:paramtypes", [TreeModel, | |
TreeDraggedElement]) | |
], TreeComponent); | |
TreeComponent.ɵfac = function TreeComponent_Factory(t) { return new (t || TreeComponent)(ɵngcc0.ɵɵdirectiveInject(TreeModel), ɵngcc0.ɵɵdirectiveInject(TreeDraggedElement)); }; | |
TreeComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TreeComponent, selectors: [["Tree"], ["tree-root"]], contentQueries: function TreeComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { | |
ɵngcc0.ɵɵcontentQuery(dirIndex, _c0, true); | |
ɵngcc0.ɵɵcontentQuery(dirIndex, _c1, true); | |
ɵngcc0.ɵɵcontentQuery(dirIndex, _c2, true); | |
ɵngcc0.ɵɵcontentQuery(dirIndex, _c3, true); | |
} if (rf & 2) { | |
var _t; | |
ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.loadingTemplate = _t.first); | |
ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.treeNodeTemplate = _t.first); | |
ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.treeNodeWrapperTemplate = _t.first); | |
ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.treeNodeFullTemplate = _t.first); | |
} }, viewQuery: function TreeComponent_Query(rf, ctx) { if (rf & 1) { | |
ɵngcc0.ɵɵviewQuery(_c4, true); | |
} if (rf & 2) { | |
var _t; | |
ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewportComponent = _t.first); | |
} }, hostBindings: function TreeComponent_HostBindings(rf, ctx, elIndex) { if (rf & 1) { | |
ɵngcc0.ɵɵlistener("keydown", function TreeComponent_keydown_HostBindingHandler($event) { return ctx.onKeydown($event); }, false, ɵngcc0.ɵɵresolveBody); | |
ɵngcc0.ɵɵlistener("mousedown", function TreeComponent_mousedown_HostBindingHandler($event) { return ctx.onMousedown($event); }, false, ɵngcc0.ɵɵresolveBody); | |
} }, inputs: { nodes: "nodes", options: "options", focused: "focused", state: "state" }, outputs: { toggleExpanded: "toggleExpanded", activate: "activate", deactivate: "deactivate", nodeActivate: "nodeActivate", nodeDeactivate: "nodeDeactivate", select: "select", deselect: "deselect", focus: "focus", blur: "blur", updateData: "updateData", initialized: "initialized", moveNode: "moveNode", copyNode: "copyNode", loadNodeChildren: "loadNodeChildren", changeFilter: "changeFilter", event: "event", stateChange: "stateChange" }, features: [ɵngcc0.ɵɵProvidersFeature([TreeModel]), ɵngcc0.ɵɵNgOnChangesFeature()], decls: 5, vars: 4, consts: [["viewport", ""], [1, "angular-tree-component"], [3, "nodes", "treeModel", "templates", 4, "ngIf"], ["class", "empty-tree-drop-slot", 3, "dropIndex", "node", 4, "ngIf"], [3, "nodes", "treeModel", "templates"], [1, "empty-tree-drop-slot", 3, "dropIndex", "node"]], template: function TreeComponent_Template(rf, ctx) { if (rf & 1) { | |
ɵngcc0.ɵɵelementStart(0, "tree-viewport", null, 0); | |
ɵngcc0.ɵɵelementStart(2, "div", 1); | |
ɵngcc0.ɵɵtemplate(3, TreeComponent_tree_node_collection_3_Template, 1, 8, "tree-node-collection", 2); | |
ɵngcc0.ɵɵtemplate(4, TreeComponent_tree_node_drop_slot_4_Template, 1, 2, "tree-node-drop-slot", 3); | |
ɵngcc0.ɵɵelementEnd(); | |
ɵngcc0.ɵɵelementEnd(); | |
} if (rf & 2) { | |
ɵngcc0.ɵɵadvance(2); | |
ɵngcc0.ɵɵclassProp("node-dragging", ctx.treeDraggedElement.isDragging()); | |
ɵngcc0.ɵɵclassProp("angular-tree-component-rtl", ctx.treeModel.options.rtl); | |
ɵngcc0.ɵɵadvance(1); | |
ɵngcc0.ɵɵproperty("ngIf", ctx.treeModel.roots); | |
ɵngcc0.ɵɵadvance(1); | |
ɵngcc0.ɵɵproperty("ngIf", ctx.treeModel.isEmptyTree()); | |
} }, encapsulation: 2 }); | |
/*@__PURE__*/ ɵngcc0.ɵsetClassMetadata(TreeComponent, [{ | |
type: Component, | |
args: [{ | |
selector: 'Tree, tree-root', | |
providers: [TreeModel], | |
styles: [], | |
template: "\n <tree-viewport #viewport>\n <div\n class=\"angular-tree-component\"\n [class.node-dragging]=\"treeDraggedElement.isDragging()\"\n [class.angular-tree-component-rtl]=\"treeModel.options.rtl\">\n <tree-node-collection\n *ngIf=\"treeModel.roots\"\n [nodes]=\"treeModel.roots\"\n [treeModel]=\"treeModel\"\n [templates]=\"{\n loadingTemplate: loadingTemplate,\n treeNodeTemplate: treeNodeTemplate,\n treeNodeWrapperTemplate: treeNodeWrapperTemplate,\n treeNodeFullTemplate: treeNodeFullTemplate\n }\">\n </tree-node-collection>\n <tree-node-drop-slot\n class=\"empty-tree-drop-slot\"\n *ngIf=\"treeModel.isEmptyTree()\"\n [dropIndex]=\"0\"\n [node]=\"treeModel.virtualRoot\">\n </tree-node-drop-slot>\n </div>\n </tree-viewport>\n " | |
}] | |
}], function () { return [{ type: TreeModel }, { type: TreeDraggedElement }]; }, { treeModel: [], treeDraggedElement: [], nodes: [{ | |
type: Input | |
}], options: [{ | |
type: Input | |
}], focused: [{ | |
type: Input | |
}], state: [{ | |
type: Input | |
}], onKeydown: [{ | |
type: HostListener, | |
args: ['body: keydown', ['$event']] | |
}], onMousedown: [{ | |
type: HostListener, | |
args: ['body: mousedown', ['$event']] | |
}], ngOnChanges: [], sizeChanged: [], loadingTemplate: [{ | |
type: ContentChild, | |
args: ['loadingTemplate', { static: false }] | |
}], treeNodeTemplate: [{ | |
type: ContentChild, | |
args: ['treeNodeTemplate', { static: false }] | |
}], treeNodeWrapperTemplate: [{ | |
type: ContentChild, | |
args: ['treeNodeWrapperTemplate', { static: false }] | |
}], treeNodeFullTemplate: [{ | |
type: ContentChild, | |
args: ['treeNodeFullTemplate', { static: false }] | |
}], viewportComponent: [{ | |
type: ViewChild, | |
args: ['viewport', { static: false }] | |
}], toggleExpanded: [{ | |
type: Output | |
}], activate: [{ | |
type: Output | |
}], deactivate: [{ | |
type: Output | |
}], nodeActivate: [{ | |
type: Output | |
}], nodeDeactivate: [{ | |
type: Output | |
}], select: [{ | |
type: Output | |
}], deselect: [{ | |
type: Output | |
}], focus: [{ | |
type: Output | |
}], blur: [{ | |
type: Output | |
}], updateData: [{ | |
type: Output | |
}], initialized: [{ | |
type: Output | |
}], moveNode: [{ | |
type: Output | |
}], copyNode: [{ | |
type: Output | |
}], loadNodeChildren: [{ | |
type: Output | |
}], changeFilter: [{ | |
type: Output | |
}], event: [{ | |
type: Output | |
}], stateChange: [{ | |
type: Output | |
}] }); | |
return TreeComponent; | |
}()); | |
export { TreeComponent }; | |
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkM6L1VzZXJzL2UuYmVnb3ZpYy9Eb3dubG9hZHMvaXZ5LXRhZy1pcy1ub3QtYS1rbm93bi1lbGVtZW50L25vZGVfbW9kdWxlcy9hbmd1bGFyLXRyZWUtY29tcG9uZW50L2Rpc3QvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0F3TWdDLEFBT3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQUVlIiwiZmlsZSI6InRyZWUuY29tcG9uZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUubW9kZWwnO1xuaW1wb3J0IHsgVHJlZURyYWdnZWRFbGVtZW50IH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtZHJhZ2dlZC1lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IFRyZWVWaWV3cG9ydENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS12aWV3cG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2xvZGFzaC9pbmNsdWRlcyc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG52YXIgVHJlZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUcmVlQ29tcG9uZW50KHRyZWVNb2RlbCwgdHJlZURyYWdnZWRFbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMudHJlZU1vZGVsID0gdHJlZU1vZGVsO1xuICAgICAgICB0aGlzLnRyZWVEcmFnZ2VkRWxlbWVudCA9IHRyZWVEcmFnZ2VkRWxlbWVudDtcbiAgICAgICAgdHJlZU1vZGVsLmV2ZW50TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gX3RoaXNbbmFtZV0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IH0pO1xuICAgICAgICB0cmVlTW9kZWwuc3Vic2NyaWJlVG9TdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHsgcmV0dXJuIF90aGlzLnN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpOyB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcIm5vZGVzXCIsIHtcbiAgICAgICAgLy8gV2lsbCBiZSBoYW5kbGVkIGluIG5nT25DaGFuZ2VzXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3B0aW9uc1wiLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJmb2N1c2VkXCIsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLnNldEZvY3VzKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcInN0YXRlXCIsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLnNldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUub25LZXlkb3duID0gZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudHJlZU1vZGVsLmlzRm9jdXNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluY2x1ZGVzKFsnaW5wdXQnLCAndGV4dGFyZWEnXSwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZm9jdXNlZE5vZGUgPSB0aGlzLnRyZWVNb2RlbC5nZXRGb2N1c2VkTm9kZSgpO1xuICAgICAgICB0aGlzLnRyZWVNb2RlbC5wZXJmb3JtS2V5QWN0aW9uKGZvY3VzZWROb2RlLCAkZXZlbnQpO1xuICAgIH07XG4gICAgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUub25Nb3VzZWRvd24gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgIGZ1bmN0aW9uIGlzT3V0c2lkZUNsaWNrKHN0YXJ0RWxlbWVudCwgbm9kZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAhc3RhcnRFbGVtZW50ID8gdHJ1ZSA6IHN0YXJ0RWxlbWVudC5sb2NhbE5hbWUgPT09IG5vZGVOYW1lID8gZmFsc2UgOiBpc091dHNpZGVDbGljayhzdGFydEVsZW1lbnQucGFyZW50RWxlbWVudCwgbm9kZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc091dHNpZGVDbGljaygkZXZlbnQudGFyZ2V0LCAndHJlZS1yb290JykpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLnNldEZvY3VzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5vcHRpb25zIHx8IGNoYW5nZXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLnNldERhdGEoe1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGNoYW5nZXMub3B0aW9ucyAmJiBjaGFuZ2VzLm9wdGlvbnMuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIG5vZGVzOiBjaGFuZ2VzLm5vZGVzICYmIGNoYW5nZXMubm9kZXMuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGV2ZW50czogcGljayh0aGlzLCB0aGlzLnRyZWVNb2RlbC5ldmVudE5hbWVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRyZWVDb21wb25lbnQucHJvdG90eXBlLnNpemVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnZpZXdwb3J0Q29tcG9uZW50LnNldFZpZXdwb3J0KCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29udGVudENoaWxkKCdsb2FkaW5nVGVtcGxhdGUnLCB7IHN0YXRpYzogZmFsc2UgfSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBUZW1wbGF0ZVJlZilcbiAgICBdLCBUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJsb2FkaW5nVGVtcGxhdGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29udGVudENoaWxkKCd0cmVlTm9kZVRlbXBsYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgVGVtcGxhdGVSZWYpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwidHJlZU5vZGVUZW1wbGF0ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBDb250ZW50Q2hpbGQoJ3RyZWVOb2RlV3JhcHBlclRlbXBsYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgVGVtcGxhdGVSZWYpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwidHJlZU5vZGVXcmFwcGVyVGVtcGxhdGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29udGVudENoaWxkKCd0cmVlTm9kZUZ1bGxUZW1wbGF0ZScsIHsgc3RhdGljOiBmYWxzZSB9KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFRlbXBsYXRlUmVmKVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcInRyZWVOb2RlRnVsbFRlbXBsYXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBUcmVlVmlld3BvcnRDb21wb25lbnQpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwidmlld3BvcnRDb21wb25lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtBcnJheV0pXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibm9kZXNcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3B0aW9uc1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0Jvb2xlYW5dKVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcImZvY3VzZWRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwic3RhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcInRvZ2dsZUV4cGFuZGVkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcImFjdGl2YXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcImRlYWN0aXZhdGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibm9kZUFjdGl2YXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcIm5vZGVEZWFjdGl2YXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJkZXNlbGVjdFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJmb2N1c1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJibHVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcInVwZGF0ZURhdGFcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwiaW5pdGlhbGl6ZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibW92ZU5vZGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwiY29weU5vZGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibG9hZE5vZGVDaGlsZHJlblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBUcmVlQ29tcG9uZW50LnByb3RvdHlwZSwgXCJjaGFuZ2VGaWx0ZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwiZXZlbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwic3RhdGVDaGFuZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdExpc3RlbmVyKCdib2R5OiBrZXlkb3duJywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgVHJlZUNvbXBvbmVudC5wcm90b3R5cGUsIFwib25LZXlkb3duXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0TGlzdGVuZXIoJ2JvZHk6IG1vdXNlZG93bicsIFsnJGV2ZW50J10pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgdm9pZCAwKVxuICAgIF0sIFRyZWVDb21wb25lbnQucHJvdG90eXBlLCBcIm9uTW91c2Vkb3duXCIsIG51bGwpO1xuICAgIFRyZWVDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnVHJlZSwgdHJlZS1yb290JyxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1RyZWVNb2RlbF0sXG4gICAgICAgICAgICBzdHlsZXM6IFtdLFxuICAgICAgICAgICAgdGVtcGxhdGU6IFwiXFxuICAgICAgPHRyZWUtdmlld3BvcnQgI3ZpZXdwb3J0PlxcbiAgICAgICAgICA8ZGl2XFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImFuZ3VsYXItdHJlZS1jb21wb25lbnRcXFwiXFxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vZGUtZHJhZ2dpbmddPVxcXCJ0cmVlRHJhZ2dlZEVsZW1lbnQuaXNEcmFnZ2luZygpXFxcIlxcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hbmd1bGFyLXRyZWUtY29tcG9uZW50LXJ0bF09XFxcInRyZWVNb2RlbC5vcHRpb25zLnJ0bFxcXCI+XFxuICAgICAgICAgICAgICA8dHJlZS1ub2RlLWNvbGxlY3Rpb25cXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XFxcInRyZWVNb2RlbC5yb290c1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgW25vZGVzXT1cXFwidHJlZU1vZGVsLnJvb3RzXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBbdHJlZU1vZGVsXT1cXFwidHJlZU1vZGVsXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cXFwie1xcbiAgICAgICAgICAgIGxvYWRpbmdUZW1wbGF0ZTogbG9hZGluZ1RlbXBsYXRlLFxcbiAgICAgICAgICAgIHRyZWVOb2RlVGVtcGxhdGU6IHRyZWVOb2RlVGVtcGxhdGUsXFxuICAgICAgICAgICAgdHJlZU5vZGVXcmFwcGVyVGVtcGxhdGU6IHRyZWVOb2RlV3JhcHBlclRlbXBsYXRlLFxcbiAgICAgICAgICAgIHRyZWVOb2RlRnVsbFRlbXBsYXRlOiB0cmVlTm9kZUZ1bGxUZW1wbGF0ZVxcbiAgICAgICAgICB9XFxcIj5cXG4gICAgICAgICAgICAgIDwvdHJlZS1ub2RlLWNvbGxlY3Rpb24+XFxuICAgICAgICAgICAgICA8dHJlZS1ub2RlLWRyb3Atc2xvdFxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZW1wdHktdHJlZS1kcm9wLXNsb3RcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVxcXCJ0cmVlTW9kZWwuaXNFbXB0eVRyZWUoKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgW2Ryb3BJbmRleF09XFxcIjBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cXFwidHJlZU1vZGVsLnZpcnR1YWxSb290XFxcIj5cXG4gICAgICAgICAgICAgIDwvdHJlZS1ub2RlLWRyb3Atc2xvdD5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgPC90cmVlLXZpZXdwb3J0PlxcbiAgXCJcbiAgICAgICAgfSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVHJlZU1vZGVsLFxuICAgICAgICAgICAgVHJlZURyYWdnZWRFbGVtZW50XSlcbiAgICBdLCBUcmVlQ29tcG9uZW50KTtcbiAgICByZXR1cm4gVHJlZUNvbXBvbmVudDtcbn0oKSk7XG5leHBvcnQgeyBUcmVlQ29tcG9uZW50IH07XG4iXX0= |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment