UNPKG

@uex/web-extensions

Version:

Uex extensions for Angular 6+ web projects

420 lines 30.3 kB
/** * @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