@uex/web-extensions
Version:
Uex extensions for Angular 6+ web projects
420 lines • 30.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/modules/table/classes/item.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as _ from "lodash";
import { TableButton } from "./button";
export class TableItem {
/**
* @param {?} column
* @param {?} row_data
* @param {?} row
*/
constructor(column, row_data, row) {
this.column = column;
this.row_data = row_data;
this.row = row;
this._has_link = false;
this._has_link_with_action = false;
this._has_link_with_url = false;
this._has_buttons = false;
this._has_input = false;
this._setInput();
this._setButtons();
this.update();
}
/**
* @return {?}
*/
get label() {
return this._label || "";
}
/**
* @return {?}
*/
get title() {
return this._title || "";
}
/**
* @return {?}
*/
get accessor() {
return this.column.accessor;
}
/**
* @return {?}
*/
get input() {
return this._input;
}
/**
* @return {?}
*/
get schema() {
return this._schema;
}
/**
* @return {?}
*/
get buttons() {
return this._buttons
? this._buttons.filter((/**
* @param {?} button
* @return {?}
*/
button => button.visible))
: null;
}
/**
* @return {?}
*/
get numeric() {
return this.column.numeric;
}
/**
* @return {?}
*/
get html() {
return this.column.html;
}
/**
* @return {?}
*/
get width() {
return this.column.width;
}
/**
* @return {?}
*/
get selectable() {
return _.isBoolean(this.column.selectable) ? this.column.selectable : false;
}
/**
* @return {?}
*/
get truncate() {
return _.isBoolean(this.column.truncate) ? this.column.truncate : false;
}
/**
* @return {?}
*/
get allow_select() {
return this.column.selectable && this.row.selectable;
}
/**
* @return {?}
*/
get selected() {
return this.row.selected;
}
/**
* @return {?}
*/
get has_link() {
return this._has_link;
}
/**
* @return {?}
*/
get has_link_with_action() {
return this._has_link_with_action;
}
/**
* @return {?}
*/
get has_link_with_url() {
return this._has_link_with_url;
}
/**
* @return {?}
*/
get has_buttons() {
return this._has_buttons;
}
/**
* @return {?}
*/
get has_input() {
return this._has_input;
}
/**
* @return {?}
*/
update() {
this._setAttributes();
this._setLabel();
this._setTitle();
this._setLink();
this._updateButtons();
}
/**
* @param {?} schema
* @return {?}
*/
$setSchema(schema) {
this._schema = schema;
}
/**
* @private
* @return {?}
*/
_setAttributes() {
/** @type {?} */
const link = this.column.link;
this._has_link =
link && (link.url || _.isFunction(link.action)) ? true : false;
this._has_link_with_action = link && _.isFunction(link.action);
this._has_link_with_url = link && !_.isFunction(link.action);
this._has_buttons = this.buttons && this.buttons.length > 0;
this._has_input = this._input ? true : false;
}
/**
* @private
* @return {?}
*/
_setButtons() {
/** @type {?} */
let buttons = [];
if (this.column.buttons) {
buttons = this.column.buttons.map((/**
* @param {?} button
* @return {?}
*/
button => {
return new TableButton(button, this, this.row);
}));
}
this._buttons = buttons;
}
/**
* @private
* @return {?}
*/
_updateButtons() {
if (this._buttons) {
this._buttons.forEach((/**
* @param {?} button
* @return {?}
*/
button => button.update()));
}
}
/**
* @private
* @return {?}
*/
_setInput() {
/** @type {?} */
let input;
if (this.column.input) {
input = _.cloneDeep(this.column.input);
if (input) {
this._setLabel();
input.key = this.column.accessor;
if (this.row_data.id) {
input.key += `-${this.row_data.id}`;
}
else {
input.key += `-${this.row.index}`;
}
/** @type {?} */
const events = this.column.input.events || {};
if (!_.isEmpty(events)) {
_.forEach(_.clone(events), (/**
* @param {?} fn
* @param {?} key
* @return {?}
*/
(fn, key) => {
if (_.includes(["onInit", "onChange", "onKeyup"], key) ||
!_.isFunction(fn)) {
return;
}
events[key] = (/**
* @param {?} event
* @return {?}
*/
event => {
event.table_row = this.row;
event.table_item = this;
event.data = this.row_data;
fn(event);
});
}));
}
input.events = _.merge({}, events, {
onInit: (/**
* @param {?} event
* @return {?}
*/
event => this._onInputInit(event, events.onInit)),
onChange: (/**
* @param {?} event
* @return {?}
*/
event => this._onInputChange(event, events.onChange))
});
input.value = this._label;
}
}
this._input = input;
}
/**
* @private
* @return {?}
*/
_setLabel() {
if (_.isFunction(this.column.format)) {
this._label = this.column.format(this.row_data);
}
else {
/** @type {?} */
const label = _.at(this.row_data, this.column.accessor)[0];
this._label = label ? label.toString() : null;
}
}
/**
* @private
* @return {?}
*/
_setTitle() {
this._title = _.isFunction(this.column.title)
? ((/** @type {?} */ (this.column.title)))(this.row_data)
: this.html
? this.label.replace(/<(?:.|\n)*?>/gm, "")
: this.label;
}
/**
* @private
* @return {?}
*/
_setLink() {
if (!this._has_link) {
this.link = null;
return;
}
else {
/** @type {?} */
const link = this.column.link;
if (link.action) {
/** @type {?} */
const action = (/**
* @param {?} event
* @return {?}
*/
(event) => {
event.preventDefault();
link.action(this.row_data);
});
this.link = {
action: action
};
}
else {
this.link = {
url: _.isFunction(link.url)
? ((/** @type {?} */ (link.url)))(this.row_data)
: link.url,
target: link.target
};
}
}
}
/**
* @private
* @param {?} event
* @param {?} callback_event
* @return {?}
*/
_onInputInit(event, callback_event) {
if (_.isFunction(callback_event)) {
event.table_row = this.row;
event.table_item = this;
event.data = this.row_data;
if (_.isFunction(callback_event)) {
callback_event(event);
}
}
}
/**
* @private
* @param {?} event
* @param {?} callback_event
* @return {?}
*/
_onInputChange(event, callback_event) {
this._input.value = event.schema.value;
_.set(this.row_data, this.column.accessor, event.schema.value);
if (_.isFunction(callback_event)) {
event.table_row = this.row;
event.table_item = this;
event.data = this.row_data;
if (_.isFunction(callback_event)) {
callback_event(event);
}
}
this.row.update();
}
}
if (false) {
/**
* @type {?}
* @private
*/
TableItem.prototype._label;
/**
* @type {?}
* @private
*/
TableItem.prototype._title;
/**
* @type {?}
* @private
*/
TableItem.prototype._buttons;
/**
* @type {?}
* @private
*/
TableItem.prototype._input;
/**
* @type {?}
* @private
*/
TableItem.prototype._schema;
/**
* @type {?}
* @private
*/
TableItem.prototype._has_link;
/**
* @type {?}
* @private
*/
TableItem.prototype._has_link_with_action;
/**
* @type {?}
* @private
*/
TableItem.prototype._has_link_with_url;
/**
* @type {?}
* @private
*/
TableItem.prototype._has_buttons;
/**
* @type {?}
* @private
*/
TableItem.prototype._has_input;
/** @type {?} */
TableItem.prototype.link;
/** @type {?} */
TableItem.prototype.column;
/** @type {?} */
TableItem.prototype.row_data;
/** @type {?} */
TableItem.prototype.row;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1ZXgvd2ViLWV4dGVuc2lvbnMvIiwic291cmNlcyI6WyJsaWIvbW9kdWxlcy90YWJsZS9jbGFzc2VzL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQVE1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBV3ZDLE1BQU0sT0FBTyxTQUFTOzs7Ozs7SUFDcEIsWUFDUyxNQUFtQixFQUNuQixRQUFhLEVBQ2IsR0FBYTtRQUZiLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFhZCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQWZ6QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDOzs7O0lBZ0JELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7OztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7OztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7Ozs7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7OztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOzs7O0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTs7OztZQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQztZQUNoRCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQzs7OztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7Ozs7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7Ozs7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7Ozs7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUUsQ0FBQzs7OztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRSxDQUFDOzs7O0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDdkQsQ0FBQzs7OztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7Ozs7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFDRCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDOzs7O0lBQ0QsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQzs7OztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQzs7OztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQzs7OztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRU0sVUFBVSxDQUFDLE1BQWtCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRU8sY0FBYzs7Y0FDZCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQzdCLElBQUksQ0FBQyxTQUFTO1lBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNqRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQzs7Ozs7SUFFTyxXQUFXOztZQUNiLE9BQU8sR0FBdUIsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHOzs7O1lBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsQ0FBQyxFQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU8sY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPOzs7O1lBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7Ozs7O0lBRU8sU0FBUzs7WUFDWCxLQUEyQjtRQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3JCLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUNwQixLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDckM7cUJBQU07b0JBQ0wsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ25DOztzQkFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN0QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDOzs7OztvQkFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTt3QkFDckMsSUFDRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7NEJBQ2xELENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDakI7NEJBQ0EsT0FBTzt5QkFDUjt3QkFDRCxNQUFNLENBQUMsR0FBRyxDQUFDOzs7O3dCQUFHLEtBQUssQ0FBQyxFQUFFOzRCQUNwQixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7NEJBQzNCLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOzRCQUN4QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7NEJBQzNCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDWixDQUFDLENBQUEsQ0FBQztvQkFDSixDQUFDLEVBQUMsQ0FBQztpQkFDSjtnQkFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRTtvQkFDakMsTUFBTTs7OztvQkFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtvQkFDeEQsUUFBUTs7OztvQkFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtpQkFDL0QsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUMzQjtTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7Ozs7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDakQ7YUFBTTs7a0JBQ0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDL0M7SUFDSCxDQUFDOzs7OztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUMsbUJBQXNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7OztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPO1NBQ1I7YUFBTTs7a0JBQ0MsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O3NCQUNULE1BQU07Ozs7Z0JBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQTtnQkFDRCxJQUFJLENBQUMsSUFBSSxHQUFHO29CQUNWLE1BQU0sRUFBRSxNQUFNO2lCQUNmLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHO29CQUNWLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7d0JBQ3pCLENBQUMsQ0FBQyxDQUFDLG1CQUFLLElBQUksQ0FBQyxHQUFHLEVBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3BCLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQzs7Ozs7OztJQUVPLFlBQVksQ0FDbEIsS0FBa0MsRUFDbEMsY0FBb0U7UUFFcEUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMzQixLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN4QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNoQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7Ozs7Ozs7SUFFTyxjQUFjLENBQ3BCLEtBQWtDLEVBQ2xDLGNBQW9FO1FBRXBFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNoQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDM0IsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDeEIsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNCLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDaEMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjs7Ozs7O0lBM09DLDJCQUF1Qjs7Ozs7SUFDdkIsMkJBQXVCOzs7OztJQUN2Qiw2QkFBcUM7Ozs7O0lBQ3JDLDJCQUErQjs7Ozs7SUFDL0IsNEJBQTRCOzs7OztJQUU1Qiw4QkFBMEI7Ozs7O0lBQzFCLDBDQUFzQzs7Ozs7SUFDdEMsdUNBQW1DOzs7OztJQUNuQyxpQ0FBNkI7Ozs7O0lBQzdCLCtCQUEyQjs7SUFFM0IseUJBQTZCOztJQXJCM0IsMkJBQTBCOztJQUMxQiw2QkFBb0I7O0lBQ3BCLHdCQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5cclxuaW1wb3J0IHsgRm9ybVNjaGVtYSB9IGZyb20gXCIuLi8uLi9mb3JtL2NsYXNzZXMvc2NoZW1hXCI7XHJcbmltcG9ydCB7XHJcbiAgRm9ybVNjaGVtYURhdGEsXHJcbiAgRm9ybVNjaGVtYUV2ZW50RnVuY3Rpb25cclxufSBmcm9tIFwiLi4vLi4vZm9ybS9mb3JtLmludGVyZmFjZVwiO1xyXG5cclxuaW1wb3J0IHsgVGFibGVCdXR0b24gfSBmcm9tIFwiLi9idXR0b25cIjtcclxuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi9jb2x1bW5cIjtcclxuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tIFwiLi9yb3dcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5MaW5rLFxyXG4gIFRhYmxlQ29sdW1uSW5wdXRTY2hlbWFFdmVudCxcclxuICBUYWJsZUNvbHVtbklucHV0RGF0YSxcclxuICBUYWJsZUNvbHVtbkZvcm1hdHRlclxyXG59IGZyb20gXCIuLi90YWJsZS5pbnRlcmZhY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUl0ZW0ge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbHVtbjogVGFibGVDb2x1bW4sXHJcbiAgICBwdWJsaWMgcm93X2RhdGE6IGFueSxcclxuICAgIHB1YmxpYyByb3c6IFRhYmxlUm93XHJcbiAgKSB7XHJcbiAgICB0aGlzLl9zZXRJbnB1dCgpO1xyXG4gICAgdGhpcy5fc2V0QnV0dG9ucygpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xhYmVsOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcclxuICBwcml2YXRlIF9idXR0b25zOiBBcnJheTxUYWJsZUJ1dHRvbj47XHJcbiAgcHJpdmF0ZSBfaW5wdXQ6IEZvcm1TY2hlbWFEYXRhO1xyXG4gIHByaXZhdGUgX3NjaGVtYTogRm9ybVNjaGVtYTtcclxuXHJcbiAgcHJpdmF0ZSBfaGFzX2xpbmsgPSBmYWxzZTtcclxuICBwcml2YXRlIF9oYXNfbGlua193aXRoX2FjdGlvbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2hhc19saW5rX3dpdGhfdXJsID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaGFzX2J1dHRvbnMgPSBmYWxzZTtcclxuICBwcml2YXRlIF9oYXNfaW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGxpbms6IFRhYmxlQ29sdW1uTGluaztcclxuXHJcbiAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsIHx8IFwiXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGl0bGUgfHwgXCJcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWNjZXNzb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbi5hY2Nlc3NvcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5wdXQoKTogRm9ybVNjaGVtYURhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lucHV0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2hlbWEoKTogRm9ybVNjaGVtYSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBidXR0b25zKCk6IEFycmF5PFRhYmxlQnV0dG9uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnV0dG9uc1xyXG4gICAgICA/IHRoaXMuX2J1dHRvbnMuZmlsdGVyKGJ1dHRvbiA9PiBidXR0b24udmlzaWJsZSlcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBudW1lcmljKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uLm51bWVyaWM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGh0bWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW4uaHRtbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbi53aWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBfLmlzQm9vbGVhbih0aGlzLmNvbHVtbi5zZWxlY3RhYmxlKSA/IHRoaXMuY29sdW1uLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJ1bmNhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gXy5pc0Jvb2xlYW4odGhpcy5jb2x1bW4udHJ1bmNhdGUpID8gdGhpcy5jb2x1bW4udHJ1bmNhdGUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWxsb3dfc2VsZWN0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uLnNlbGVjdGFibGUgJiYgdGhpcy5yb3cuc2VsZWN0YWJsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3cuc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc19saW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc19saW5rO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGhhc19saW5rX3dpdGhfYWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc19saW5rX3dpdGhfYWN0aW9uO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGhhc19saW5rX3dpdGhfdXJsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc19saW5rX3dpdGhfdXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNfYnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNfYnV0dG9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzX2lucHV0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc19pbnB1dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLl9zZXRMYWJlbCgpO1xyXG4gICAgdGhpcy5fc2V0VGl0bGUoKTtcclxuICAgIHRoaXMuX3NldExpbmsoKTtcclxuICAgIHRoaXMuX3VwZGF0ZUJ1dHRvbnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyAkc2V0U2NoZW1hKHNjaGVtYTogRm9ybVNjaGVtYSkge1xyXG4gICAgdGhpcy5fc2NoZW1hID0gc2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QXR0cmlidXRlcygpIHtcclxuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmNvbHVtbi5saW5rO1xyXG4gICAgdGhpcy5faGFzX2xpbmsgPVxyXG4gICAgICBsaW5rICYmIChsaW5rLnVybCB8fCBfLmlzRnVuY3Rpb24obGluay5hY3Rpb24pKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMuX2hhc19saW5rX3dpdGhfYWN0aW9uID0gbGluayAmJiBfLmlzRnVuY3Rpb24obGluay5hY3Rpb24pO1xyXG4gICAgdGhpcy5faGFzX2xpbmtfd2l0aF91cmwgPSBsaW5rICYmICFfLmlzRnVuY3Rpb24obGluay5hY3Rpb24pO1xyXG4gICAgdGhpcy5faGFzX2J1dHRvbnMgPSB0aGlzLmJ1dHRvbnMgJiYgdGhpcy5idXR0b25zLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLl9oYXNfaW5wdXQgPSB0aGlzLl9pbnB1dCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEJ1dHRvbnMoKSB7XHJcbiAgICBsZXQgYnV0dG9uczogQXJyYXk8VGFibGVCdXR0b24+ID0gW107XHJcbiAgICBpZiAodGhpcy5jb2x1bW4uYnV0dG9ucykge1xyXG4gICAgICBidXR0b25zID0gdGhpcy5jb2x1bW4uYnV0dG9ucy5tYXAoYnV0dG9uID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFRhYmxlQnV0dG9uKGJ1dHRvbiwgdGhpcywgdGhpcy5yb3cpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2J1dHRvbnMgPSBidXR0b25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLl9idXR0b25zKSB7XHJcbiAgICAgIHRoaXMuX2J1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gYnV0dG9uLnVwZGF0ZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldElucHV0KCkge1xyXG4gICAgbGV0IGlucHV0OiBUYWJsZUNvbHVtbklucHV0RGF0YTtcclxuICAgIGlmICh0aGlzLmNvbHVtbi5pbnB1dCkge1xyXG4gICAgICBpbnB1dCA9IF8uY2xvbmVEZWVwKHRoaXMuY29sdW1uLmlucHV0KTtcclxuICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0TGFiZWwoKTtcclxuICAgICAgICBpbnB1dC5rZXkgPSB0aGlzLmNvbHVtbi5hY2Nlc3NvcjtcclxuICAgICAgICBpZiAodGhpcy5yb3dfZGF0YS5pZCkge1xyXG4gICAgICAgICAgaW5wdXQua2V5ICs9IGAtJHt0aGlzLnJvd19kYXRhLmlkfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlucHV0LmtleSArPSBgLSR7dGhpcy5yb3cuaW5kZXh9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb2x1bW4uaW5wdXQuZXZlbnRzIHx8IHt9O1xyXG4gICAgICAgIGlmICghXy5pc0VtcHR5KGV2ZW50cykpIHtcclxuICAgICAgICAgIF8uZm9yRWFjaChfLmNsb25lKGV2ZW50cyksIChmbiwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBfLmluY2x1ZGVzKFtcIm9uSW5pdFwiLCBcIm9uQ2hhbmdlXCIsIFwib25LZXl1cFwiXSwga2V5KSB8fFxyXG4gICAgICAgICAgICAgICFfLmlzRnVuY3Rpb24oZm4pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudHNba2V5XSA9IGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgICBldmVudC50YWJsZV9yb3cgPSB0aGlzLnJvdztcclxuICAgICAgICAgICAgICBldmVudC50YWJsZV9pdGVtID0gdGhpcztcclxuICAgICAgICAgICAgICBldmVudC5kYXRhID0gdGhpcy5yb3dfZGF0YTtcclxuICAgICAgICAgICAgICBmbihldmVudCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXQuZXZlbnRzID0gXy5tZXJnZSh7fSwgZXZlbnRzLCB7XHJcbiAgICAgICAgICBvbkluaXQ6IGV2ZW50ID0+IHRoaXMuX29uSW5wdXRJbml0KGV2ZW50LCBldmVudHMub25Jbml0KSxcclxuICAgICAgICAgIG9uQ2hhbmdlOiBldmVudCA9PiB0aGlzLl9vbklucHV0Q2hhbmdlKGV2ZW50LCBldmVudHMub25DaGFuZ2UpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLl9sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldExhYmVsKCkge1xyXG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLmNvbHVtbi5mb3JtYXQpKSB7XHJcbiAgICAgIHRoaXMuX2xhYmVsID0gdGhpcy5jb2x1bW4uZm9ybWF0KHRoaXMucm93X2RhdGEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbGFiZWwgPSBfLmF0KHRoaXMucm93X2RhdGEsIHRoaXMuY29sdW1uLmFjY2Vzc29yKVswXTtcclxuICAgICAgdGhpcy5fbGFiZWwgPSBsYWJlbCA/IGxhYmVsLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0VGl0bGUoKSB7XHJcbiAgICB0aGlzLl90aXRsZSA9IF8uaXNGdW5jdGlvbih0aGlzLmNvbHVtbi50aXRsZSlcclxuICAgICAgPyAoPFRhYmxlQ29sdW1uRm9ybWF0dGVyPnRoaXMuY29sdW1uLnRpdGxlKSh0aGlzLnJvd19kYXRhKVxyXG4gICAgICA6IHRoaXMuaHRtbFxyXG4gICAgICA/IHRoaXMubGFiZWwucmVwbGFjZSgvPCg/Oi58XFxuKSo/Pi9nbSwgXCJcIilcclxuICAgICAgOiB0aGlzLmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TGluaygpIHtcclxuICAgIGlmICghdGhpcy5faGFzX2xpbmspIHtcclxuICAgICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbGluayA9IHRoaXMuY29sdW1uLmxpbms7XHJcbiAgICAgIGlmIChsaW5rLmFjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGxpbmsuYWN0aW9uKHRoaXMucm93X2RhdGEpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5saW5rID0ge1xyXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25cclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGluayA9IHtcclxuICAgICAgICAgIHVybDogXy5pc0Z1bmN0aW9uKGxpbmsudXJsKVxyXG4gICAgICAgICAgICA/ICg8YW55PmxpbmsudXJsKSh0aGlzLnJvd19kYXRhKVxyXG4gICAgICAgICAgICA6IGxpbmsudXJsLFxyXG4gICAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uSW5wdXRJbml0KFxyXG4gICAgZXZlbnQ6IFRhYmxlQ29sdW1uSW5wdXRTY2hlbWFFdmVudCxcclxuICAgIGNhbGxiYWNrX2V2ZW50OiBGb3JtU2NoZW1hRXZlbnRGdW5jdGlvbjxUYWJsZUNvbHVtbklucHV0U2NoZW1hRXZlbnQ+XHJcbiAgKSB7XHJcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGNhbGxiYWNrX2V2ZW50KSkge1xyXG4gICAgICBldmVudC50YWJsZV9yb3cgPSB0aGlzLnJvdztcclxuICAgICAgZXZlbnQudGFibGVfaXRlbSA9IHRoaXM7XHJcbiAgICAgIGV2ZW50LmRhdGEgPSB0aGlzLnJvd19kYXRhO1xyXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNhbGxiYWNrX2V2ZW50KSkge1xyXG4gICAgICAgIGNhbGxiYWNrX2V2ZW50KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25JbnB1dENoYW5nZShcclxuICAgIGV2ZW50OiBUYWJsZUNvbHVtbklucHV0U2NoZW1hRXZlbnQsXHJcbiAgICBjYWxsYmFja19ldmVudDogRm9ybVNjaGVtYUV2ZW50RnVuY3Rpb248VGFibGVDb2x1bW5JbnB1dFNjaGVtYUV2ZW50PlxyXG4gICkge1xyXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBldmVudC5zY2hlbWEudmFsdWU7XHJcbiAgICBfLnNldCh0aGlzLnJvd19kYXRhLCB0aGlzLmNvbHVtbi5hY2Nlc3NvciwgZXZlbnQuc2NoZW1hLnZhbHVlKTtcclxuICAgIGlmIChfLmlzRnVuY3Rpb24oY2FsbGJhY2tfZXZlbnQpKSB7XHJcbiAgICAgIGV2ZW50LnRhYmxlX3JvdyA9IHRoaXMucm93O1xyXG4gICAgICBldmVudC50YWJsZV9pdGVtID0gdGhpcztcclxuICAgICAgZXZlbnQuZGF0YSA9IHRoaXMucm93X2RhdGE7XHJcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY2FsbGJhY2tfZXZlbnQpKSB7XHJcbiAgICAgICAgY2FsbGJhY2tfZXZlbnQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIl19