@hpe/angular-toolkit
Version:
Hewlett-Packard Enterprise : Angular toolkit for rapid project development
740 lines (720 loc) • 100 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('@hpe/angular-toolkit/lib'), require('@hpe/angular-toolkit/model'), require('@hpe/angular-toolkit/service'), require('@angular/common'), require('@angular/material'), require('primeng/primeng'), require('@hpe/angular-toolkit/gui/panel'), require('@hpe/angular-toolkit/gui/directive')) :
typeof define === 'function' && define.amd ? define('@hpe/angular-toolkit/gui/form', ['exports', '@angular/core', '@angular/forms', '@hpe/angular-toolkit/lib', '@hpe/angular-toolkit/model', '@hpe/angular-toolkit/service', '@angular/common', '@angular/material', 'primeng/primeng', '@hpe/angular-toolkit/gui/panel', '@hpe/angular-toolkit/gui/directive'], factory) :
(factory((global.hpe = global.hpe || {}, global.hpe['angular-toolkit'] = global.hpe['angular-toolkit'] || {}, global.hpe['angular-toolkit'].gui = global.hpe['angular-toolkit'].gui || {}, global.hpe['angular-toolkit'].gui.form = {}),global.ng.core,global.ng.forms,global.hpe['angular-toolkit'].lib,global.hpe['angular-toolkit'].model,global.hpe['angular-toolkit'].service,global.ng.common,global.ng.material,null,global.hpe['angular-toolkit'].gui.panel,global.hpe['angular-toolkit'].gui.directive));
}(this, (function (exports,core,forms,lib,model,service,common,material,primeng,panel,directive) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var FormColumn = (function () {
function FormColumn() {
}
FormColumn.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-form-column',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"formColumn\" [style.width]=\"width\">\n <ng-content></ng-content>\n</div>\n",
styles: [".formColumn{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;margin:8px}"],
},] },
];
/** @nocollapse */
FormColumn.propDecorators = {
"width": [{ type: core.Input },],
};
return FormColumn;
}());
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var FormLabel = (function () {
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function FormLabel() {
}
FormLabel.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-form-label',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<span class=\"ui-inputgroup-addon label\">\n\t<hpe-icon name=\"{{icon}}\"></hpe-icon> {{label}}\n</span>\n",
styles: [".label{width:12rem;text-align:start!important}:host ::ng-deep .iconStyle{vertical-align:baseline}"],
},] },
];
//-------------------------------------------------------------------------
//---
//--- API methods
//---
//-------------------------------------------------------------------------
/** @nocollapse */
FormLabel.ctorParameters = function () { return []; };
FormLabel.propDecorators = {
"icon": [{ type: core.Input },],
"label": [{ type: core.Input },],
};
return FormLabel;
}());
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var FormPanel = (function () {
function FormPanel() {
}
FormPanel.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-form-panel',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"formBody\">\n\t<ng-content></ng-content>\n</div>\n",
styles: [".formBody{display:flex;align-content:center;justify-content:center;flex-wrap:wrap;box-sizing:border-box;width:100%;max-width:100%;padding:1rem;background:#fafafa;color:#000;font-size:1rem}"],
},] },
];
return FormPanel;
}());
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var FormText = (function () {
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function FormText() {
}
Object.defineProperty(FormText.prototype, "value", {
get: /**
* @return {?}
*/ function () {
return this._value;
},
//-------------------------------------------------------------------------
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
if (this.transcoder && value != null) {
value = this.transcoder.transcode(value);
}
this._value = value;
},
enumerable: true,
configurable: true
});
FormText.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-form-text',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"ui-inputgroup spacing\">\n\t<hpe-form-label [icon]=\"icon\" [label]=\"label\"></hpe-form-label>\n\t<span class=\"ui-inputgroup-addon text\">{{value}}</span>\n</div>\n",
styles: [".spacing{margin-bottom:1rem}.text{background-color:#f5f5f5;width:100%;color:#202020}"]
},] },
];
/** @nocollapse */
FormText.ctorParameters = function () { return []; };
FormText.propDecorators = {
"icon": [{ type: core.Input },],
"label": [{ type: core.Input },],
"transcoder": [{ type: core.Input },],
"value": [{ type: core.Input },],
};
return FormText;
}());
//=============================================================================
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b)
if (b.hasOwnProperty(p))
d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @abstract
*/
var AbstractFormComponent = (function () {
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function AbstractFormComponent() {
this.enabled = true;
this._required = false;
}
//-------------------------------------------------------------------------
//---
//--- API methods
//---
//-------------------------------------------------------------------------
/**
* @param {?} fn
* @return {?}
*/
AbstractFormComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChange = fn;
};
//-------------------------------------------------------------------------
/**
* @param {?} fn
* @return {?}
*/
AbstractFormComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @return {?}
*/
AbstractFormComponent.prototype.getComponentClass = /**
* @return {?}
*/
function () {
var /** @type {?} */ styles = ['control'];
if (this.enabled) {
if (this.required) {
if (this.isProvided()) {
styles.push("provided");
}
else {
styles.push("required");
}
}
}
else {
styles.push("disabled");
}
return styles;
};
Object.defineProperty(AbstractFormComponent.prototype, "required", {
get: /**
* @return {?}
*/ function () {
return this._required;
},
//-------------------------------------------------------------------------
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
var /** @type {?} */ str = "" + value;
if (str == "") {
//--- Ok, '' means value not provided --> true
value = true;
}
this._required = value;
},
enumerable: true,
configurable: true
});
AbstractFormComponent.propDecorators = {
"icon": [{ type: core.Input },],
"label": [{ type: core.Input },],
"enabled": [{ type: core.Input },],
"required": [{ type: core.Input },],
};
return AbstractFormComponent;
}());
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InputText = (function (_super) {
__extends(InputText, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function InputText() {
return _super.call(this) || this;
}
/**
* @param {?} value
* @return {?}
*/
InputText.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._value = value;
};
Object.defineProperty(InputText.prototype, "value", {
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this._value;
},
//-------------------------------------------------------------------------
set: /**
* @param {?} newValue
* @return {?}
*/ function (newValue) {
if (newValue == "") {
newValue = null;
}
this._value = newValue;
this.onChange(newValue);
},
enumerable: true,
configurable: true
});
//-------------------------------------------------------------------------
//---
//--- Protected methods
//---
//-------------------------------------------------------------------------
/**
* @return {?}
*/
InputText.prototype.isProvided = /**
* @return {?}
*/
function () {
return lib.Lib.str.isProvided(this.value);
};
InputText.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-input-text',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"ui-inputgroup spacing\">\n <hpe-form-label [icon]=\"icon\" [label]=\"label\"></hpe-form-label>\n\t<input pInputText [(ngModel)]=\"value\" [ngClass]=\"getComponentClass()\" [disabled]=\"!enabled\">\n</div>\n\n",
styles: [".spacing{margin-bottom:1rem}.control{width:100%}.required,.required:focus{border-right:5px solid #ff8d6d}.provided,.provided:focus{border-right:5px solid #00a982}"],
providers: [{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: InputText,
multi: true
}]
},] },
];
/** @nocollapse */
InputText.ctorParameters = function () { return []; };
return InputText;
}(AbstractFormComponent));
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InputArea = (function (_super) {
__extends(InputArea, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function InputArea() {
return _super.call(this) || this;
}
InputArea.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-input-area',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"ui-inputgroup spacing\" >\n\t<hpe-form-label [icon]=\"icon\" [label]=\"label\"></hpe-form-label>\n <textarea pInputTextarea [style.height]=\"height\" [(ngModel)]=\"value\" [ngClass]=\"getComponentClass()\" [disabled]=\"!enabled\"></textarea>\n</div>\n",
styles: [".spacing{margin-bottom:1rem}.control{width:100%}.required,.required:focus{border-right:5px solid #ff8d6d}.provided,.provided:focus{border-right:5px solid #00a982}"],
providers: [{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: InputArea,
multi: true
}]
},] },
];
/** @nocollapse */
InputArea.ctorParameters = function () { return []; };
InputArea.propDecorators = {
"height": [{ type: core.Input },],
};
return InputArea;
}(InputText));
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InputCheckbox = (function (_super) {
__extends(InputCheckbox, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function InputCheckbox() {
return _super.call(this) || this;
}
InputCheckbox.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-input-checkbox',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"ui-inputgroup spacing\">\n\t<hpe-form-label [icon]=\"icon\" [label]=\"label\"></hpe-form-label>\n\t<mat-checkbox [(ngModel)]=\"value\" [ngClass]=\"getComponentClass()\" [disabled]=\"!enabled\"></mat-checkbox>\n</div>\n",
styles: [".spacing{margin-bottom:1rem}.control{width:100%;margin-top:4px;margin-left:10px}.required{border-right:5px solid #ff8d6d}.provided{border-right:5px solid #00a982}:host ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#80746e}"],
providers: [{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: InputCheckbox,
multi: true
}]
},] },
];
/** @nocollapse */
InputCheckbox.ctorParameters = function () { return []; };
return InputCheckbox;
}(InputText));
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var InputCombo = (function (_super) {
__extends(InputCombo, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function InputCombo() {
return _super.call(this) || this;
}
Object.defineProperty(InputCombo.prototype, "dataMap", {
get: /**
* @return {?}
*/ function () {
return this._dataMap;
},
//-------------------------------------------------------------------------
set: /**
* @param {?} map
* @return {?}
*/ function (map) {
this._dataMap = map;
this.key = "id";
this.value = "value";
var /** @type {?} */ list = [];
if (!this.required) {
list.push({
"id": null,
"value": null
});
}
for (var /** @type {?} */ key in map) {
var /** @type {?} */ name_1 = Number(key);
var /** @type {?} */ value = map[key];
if (isNaN(name_1)) {
name_1 = key;
}
list.push({
"id": name_1,
"value": value
});
}
this.data = list;
},
enumerable: true,
configurable: true
});
/**
* @param {?} keyValue
* @return {?}
*/
InputCombo.prototype.writeValue = /**
* @param {?} keyValue
* @return {?}
*/
function (keyValue) {
var _this = this;
var /** @type {?} */ item = this.data.find(function (item) {
return (item[_this.key] == keyValue);
});
//--- Select first entry in case there is no match
if (item == null) {
if (this.data != null && this.data.length > 0) {
item = this.data[0];
}
}
this._selectedItem = item;
};
Object.defineProperty(InputCombo.prototype, "selectedItem", {
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this._selectedItem;
},
//-------------------------------------------------------------------------
set: /**
* @param {?} newItem
* @return {?}
*/ function (newItem) {
this._selectedItem = newItem;
this.onChange(newItem[this.key]);
},
enumerable: true,
configurable: true
});
//-------------------------------------------------------------------------
//---
//--- Protected methods
//---
//-------------------------------------------------------------------------
/**
* @return {?}
*/
InputCombo.prototype.isProvided = /**
* @return {?}
*/
function () {
return (this.selectedItem != null && this.selectedItem[this.key] != null);
};
InputCombo.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-input-combo',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<div class=\"ui-inputgroup spacing\">\n\t<hpe-form-label [icon]=\"icon\" [label]=\"label\"></hpe-form-label>\n\n\t<p-dropdown [options] = \"data\"\n\t\t\t\t[dataKey] = \"key\"\n\t\t\t\t[optionLabel]= \"value\"\n\t\t\t\t[(ngModel)] = \"selectedItem\"\n\t\t\t\t[ngClass] = \"getComponentClass()\"\n\t\t\t\t[style] = \"{ 'width':'100%' }\"\n\t\t\t\t[disabled] = \"!enabled\">\n\t</p-dropdown>\n</div>\n",
styles: [".spacing{margin-bottom:1rem}.control{width:100%}.required{border-right:5px solid #ff8d6d}.provided{border-right:5px solid #00a982}"],
providers: [{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: InputCombo,
multi: true
}]
},] },
];
/** @nocollapse */
InputCombo.ctorParameters = function () { return []; };
InputCombo.propDecorators = {
"key": [{ type: core.Input },],
"value": [{ type: core.Input },],
"data": [{ type: core.Input },],
"dataMap": [{ type: core.Input },],
};
return InputCombo;
}(AbstractFormComponent));
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var LoginPanel = (function (_super) {
__extends(LoginPanel, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function LoginPanel(eventBusService, sessionService, notificationService, labelService, httpService) {
var _this = _super.call(this, eventBusService) || this;
_this.sessionService = sessionService;
_this.notificationService = notificationService;
_this.labelService = labelService;
_this.httpService = httpService;
//-------------------------------------------------------------------------
//---
//--- Variables
//---
//-------------------------------------------------------------------------
_this.cred = new model.Credentials();
_super.prototype.subscribeToApp.call(_this, model.AppEvent.LOGIN_FAILED, function (event) { return _this.onLoginFailed(event); });
return _this;
}
/**
* @return {?}
*/
LoginPanel.prototype.login = /**
* @return {?}
*/
function () {
if (!this.areCredentialsValid()) {
var /** @type {?} */ msg = this.labelService.getLabel("login-panel", "missing.info");
this.notificationService.showWarn(msg["title"], msg["descr"]);
}
else {
this.sessionService.login(this.cred);
}
};
Object.defineProperty(LoginPanel.prototype, "title", {
//-------------------------------------------------------------------------
//--- Localized strings
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this.loc("title");
},
enumerable: true,
configurable: true
});
Object.defineProperty(LoginPanel.prototype, "username", {
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this.loc("username");
},
enumerable: true,
configurable: true
});
Object.defineProperty(LoginPanel.prototype, "password", {
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this.loc("password");
},
enumerable: true,
configurable: true
});
Object.defineProperty(LoginPanel.prototype, "button", {
//-------------------------------------------------------------------------
get: /**
* @return {?}
*/ function () {
return this.loc("button");
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
LoginPanel.prototype.onLoginFailed = /**
* @param {?} event
* @return {?}
*/
function (event) {
var /** @type {?} */ msg = this.labelService.getLabel("login-panel", "login.error");
this.notificationService.showError(msg["title"], msg["descr"]);
};
/**
* @return {?}
*/
LoginPanel.prototype.areCredentialsValid = /**
* @return {?}
*/
function () {
return lib.Lib.str.isProvided(this.cred.username) && lib.Lib.str.isProvided(this.cred.password);
};
/**
* @param {?} code
* @return {?}
*/
LoginPanel.prototype.loc = /**
* @param {?} code
* @return {?}
*/
function (code) {
return this.labelService.getLabel("login-panel", code);
};
LoginPanel.decorators = [
{ type: core.Component, args: [{
selector: 'hpe-login',
template: "<!--\n=============================================================================\n===\n=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.\n===\n=== Use of this source code is governed by an MIT-style license that can be\n=== found in the LICENSE file\n=============================================================================\n-->\n\n<hpe-card-panel icon=\"fa-sign-in\" [title]=\"title\" [toggleButton]=\"false\">\n\t<div cpBody>\n\t\t<hpe-form-panel>\n\n\t\t\t<hpe-form-column width=\"500px\">\n\t\t\t\t<hpe-input-text icon=\"fa-user\" [label]=\"username\" [(ngModel)]=\"cred.username\" required></hpe-input-text>\n\t\t\t\t<hpe-input-text icon=\"fa-key\" [label]=\"password\" [(ngModel)]=\"cred.password\" required></hpe-input-text>\n\t\t\t</hpe-form-column>\n\n\t\t</hpe-form-panel>\n\n\t\t<hpe-button-panel>\n\t\t\t<div class=\"spinner\" *ngIf=\"httpService.loading\">\n\t\t\t\t<i class=\"fa fa-circle-o-notch fa-pulse\"></i>\n\t\t\t</div>\n\t\t\t<button mat-button hpeButton (click)=\"login()\">{{button}}</button>\n\t\t</hpe-button-panel>\n\t</div>\n</hpe-card-panel>\n\n\n\n",
styles: [".spinner{position:absolute;left:16px;bottom:16px;font-size:32px}"]
},] },
];
/** @nocollapse */
LoginPanel.ctorParameters = function () {
return [
{ type: service.EventBusService, },
{ type: service.SessionService, },
{ type: service.NotificationService, },
{ type: service.LabelService, },
{ type: service.HttpService, },
];
};
return LoginPanel;
}(service.AbstractSubscriber));
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var HpeFormModule = (function () {
function HpeFormModule() {
}
HpeFormModule.decorators = [
{ type: core.NgModule, args: [{
imports: [
common.CommonModule,
forms.FormsModule,
material.MatCheckboxModule, material.MatButtonModule,
primeng.DropdownModule, primeng.InputTextModule,
panel.HpePanelModule,
directive.HpeDirectiveModule,
service.HpeServiceModule
],
declarations: [
FormColumn,
FormLabel,
FormPanel,
FormText,
InputArea,
InputCheckbox,
InputCombo,
InputText,
LoginPanel
],
exports: [
FormColumn,
FormLabel,
FormPanel,
FormText,
InputArea,
InputCheckbox,
InputCombo,
InputText,
LoginPanel
],
providers: [],
},] },
];
return HpeFormModule;
}());
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
//=============================================================================
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.HpeFormModule = HpeFormModule;
exports.FormColumn = FormColumn;
exports.FormLabel = FormLabel;
exports.FormPanel = FormPanel;
exports.FormText = FormText;
exports.InputArea = InputArea;
exports.InputCheckbox = InputCheckbox;
exports.InputCombo = InputCombo;
exports.InputText = InputText;
exports.LoginPanel = LoginPanel;
exports.ɵa = AbstractFormComponent;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHBlLWFuZ3VsYXItdG9vbGtpdC1ndWktZm9ybS51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BocGUvYW5ndWxhci10b29sa2l0L2d1aS9mb3JtL2Zvcm0tY29sdW1uL2Zvcm0tY29sdW1uLnRzIiwibmc6Ly9AaHBlL2FuZ3VsYXItdG9vbGtpdC9ndWkvZm9ybS9mb3JtLWxhYmVsL2Zvcm0tbGFiZWwudHMiLCJuZzovL0BocGUvYW5ndWxhci10b29sa2l0L2d1aS9mb3JtL2Zvcm0tcGFuZWwvZm9ybS1wYW5lbC50cyIsIm5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvZ3VpL2Zvcm0vZm9ybS10ZXh0L2Zvcm0tdGV4dC50cyIsbnVsbCwibmc6Ly9AaHBlL2FuZ3VsYXItdG9vbGtpdC9ndWkvZm9ybS9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudC50cyIsIm5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvZ3VpL2Zvcm0vaW5wdXQtdGV4dC9pbnB1dC10ZXh0LnRzIiwibmc6Ly9AaHBlL2FuZ3VsYXItdG9vbGtpdC9ndWkvZm9ybS9pbnB1dC1hcmVhL2lucHV0LWFyZWEudHMiLCJuZzovL0BocGUvYW5ndWxhci10b29sa2l0L2d1aS9mb3JtL2lucHV0LWNoZWNrYm94L2lucHV0LWNoZWNrYm94LnRzIiwibmc6Ly9AaHBlL2FuZ3VsYXItdG9vbGtpdC9ndWkvZm9ybS9pbnB1dC1jb21iby9pbnB1dC1jb21iby50cyIsIm5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvZ3VpL2Zvcm0vbG9naW4vbG9naW4udHMiLCJuZzovL0BocGUvYW5ndWxhci10b29sa2l0L2d1aS9mb3JtL21vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yICAgIDogICAgICdocGUtZm9ybS1jb2x1bW4nLFxuXHR0ZW1wbGF0ZTogYDwhLS1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49PT1cbj09PSAoQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuXG49PT1cbj09PSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuPT09IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4tLT5cblxuPGRpdiBjbGFzcz1cImZvcm1Db2x1bW5cIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbmAsXG5cdHN0eWxlczogW2AuZm9ybUNvbHVtbntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O21hcmdpbjo4cHh9YF0sXG59KVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBGb3JtQ29sdW1uICAgIHtcblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gVmFyaWFibGVzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdEBJbnB1dCgpIHdpZHRoIDogc3RyaW5nO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yICAgIDogICAgICdocGUtZm9ybS1sYWJlbCcsXG5cdHRlbXBsYXRlOiBgPCEtLVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbj09PVxuPT09IChDKSBDb3B5cmlnaHQgMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUC5cbj09PVxuPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG49PT0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi0tPlxuXG48c3BhbiBjbGFzcz1cInVpLWlucHV0Z3JvdXAtYWRkb24gbGFiZWxcIj5cblx0PGhwZS1pY29uIG5hbWU9XCJ7e2ljb259fVwiPjwvaHBlLWljb24+IHt7bGFiZWx9fVxuPC9zcGFuPlxuYCxcblx0c3R5bGVzOiBbYC5sYWJlbHt3aWR0aDoxMnJlbTt0ZXh0LWFsaWduOnN0YXJ0IWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLmljb25TdHlsZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1gXSxcbn0pXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIEZvcm1MYWJlbCAgICB7XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIFZhcmlhYmxlc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRASW5wdXQoKSBpY29uICA6IHN0cmluZztcblx0QElucHV0KCkgbGFiZWwgOiBzdHJpbmc7XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIENvbnN0cnVjdG9yXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdGNvbnN0cnVjdG9yKCkge31cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gQVBJIG1ldGhvZHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09XG4vLz09PSAoQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuXG4vLz09PVxuLy89PT0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbi8vPT09IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvciAgICA6ICAgICAnaHBlLWZvcm0tcGFuZWwnLFxuXHR0ZW1wbGF0ZTogYDwhLS1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49PT1cbj09PSAoQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuXG49PT1cbj09PSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuPT09IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4tLT5cblxuPGRpdiBjbGFzcz1cImZvcm1Cb2R5XCI+XG5cdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuYCxcblx0c3R5bGVzOiBbYC5mb3JtQm9keXtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjFyZW07YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMwMDA7Zm9udC1zaXplOjFyZW19YF0sXG59KVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBGb3JtUGFuZWwgICAge1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmltcG9ydCB7Q29tcG9uZW50LElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zY29kZXJ9ICAgICAgIGZyb20gXCJAaHBlL2FuZ3VsYXItdG9vbGtpdC9tb2RlbFwiO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvciAgICA6ICAgICAnaHBlLWZvcm0tdGV4dCcsXG5cdHRlbXBsYXRlOiBgPCEtLVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbj09PVxuPT09IChDKSBDb3B5cmlnaHQgMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUC5cbj09PVxuPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG49PT0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi0tPlxuXG48ZGl2IGNsYXNzPVwidWktaW5wdXRncm91cCBzcGFjaW5nXCI+XG5cdDxocGUtZm9ybS1sYWJlbCBbaWNvbl09XCJpY29uXCIgW2xhYmVsXT1cImxhYmVsXCI+PC9ocGUtZm9ybS1sYWJlbD5cblx0PHNwYW4gY2xhc3M9XCJ1aS1pbnB1dGdyb3VwLWFkZG9uIHRleHRcIj57e3ZhbHVlfX08L3NwYW4+XG48L2Rpdj5cbmAsXG5cdHN0eWxlczogW2Auc3BhY2luZ3ttYXJnaW4tYm90dG9tOjFyZW19LnRleHR7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O3dpZHRoOjEwMCU7Y29sb3I6IzIwMjAyMH1gXVxufSlcblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY2xhc3MgRm9ybVRleHQge1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBWYXJpYWJsZXNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0QElucHV0KCkgaWNvbiAgICAgICA6IHN0cmluZztcblx0QElucHV0KCkgbGFiZWwgICAgICA6IHN0cmluZztcblx0QElucHV0KCkgdHJhbnNjb2RlciA6IFRyYW5zY29kZXI7XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBfdmFsdWUgOiBzdHJpbmc7XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIENvbnN0cnVjdG9yXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdGNvbnN0cnVjdG9yKCkge31cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gQVBJIG1ldGhvZHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0QElucHV0KClcblx0Z2V0IHZhbHVlKCkgOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl92YWx1ZTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXG5cdFx0aWYgKHRoaXMudHJhbnNjb2RlciAmJiB2YWx1ZSE9bnVsbCkge1xuXHRcdFx0dmFsdWUgPSAgdGhpcy50cmFuc2NvZGVyLnRyYW5zY29kZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdmFsdWUgPSB2YWx1ZTtcblx0fVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24g