@mdefy/ngx-markdown-editor
Version:
An Angular Markdown Editor in WYSIWYG style with extensive functionality, high customizability and an integrated material theme.
86 lines • 20.4 kB
JavaScript
import { Observable } from 'rxjs';
/**
* Transforms a _CodeMirror_ event to an RxJS observable.
*
* @param cm the `CodeMirror.Editor` instance of which the event shall be observed
* @param eventName the name of a _CodeMirror_ event
*/
export function fromCmEvent(cm, eventName) {
return new Observable((subscriber) => {
let handler;
switch (eventName) {
case 'change':
handler = (...args) => subscriber.next({ instance: args[0], changeObj: args[1] });
break;
case 'changes':
handler = (...args) => subscriber.next({ instance: args[0], changes: args[1] });
break;
case 'beforeChange':
handler = (...args) => subscriber.next({ instance: args[0], changeObj: args[1] });
break;
case 'cursorActivity':
handler = (...args) => subscriber.next({ instance: args[0] });
break;
case 'keyHandled':
handler = (...args) => subscriber.next({ instance: args[0], name: args[1], event: args[2] });
break;
case 'inputRead':
handler = (...args) => subscriber.next({ instance: args[0], changeObj: args[1] });
break;
case 'electricInput':
handler = (...args) => subscriber.next({ instance: args[0], line: args[1] });
break;
case 'beforeSelectionChange':
handler = (...args) => subscriber.next({ instance: args[0], obj: args[1] });
break;
case 'viewportChange':
handler = (...args) => subscriber.next({ instance: args[0], from: args[1], to: args[2] });
break;
case 'swapDoc':
handler = (...args) => subscriber.next({ instance: args[0], oldDoc: args[1] });
break;
case 'gutterClick':
handler = (...args) => subscriber.next({ instance: args[0], line: args[1], gutter: args[2], clickEvent: args[3] });
break;
case 'gutterContextMenu':
handler = (...args) => subscriber.next({ instance: args[0], line: args[1], gutter: args[2], contextMenu: args[3] });
break;
case 'focus':
handler = (...args) => subscriber.next({ instance: args[0], event: args[1] });
break;
case 'blur':
handler = (...args) => subscriber.next({ instance: args[0], event: args[1] });
break;
case 'scroll':
handler = (...args) => subscriber.next({ instance: args[0] });
break;
case 'refresh':
handler = (...args) => subscriber.next({ instance: args[0] });
break;
case 'optionChange':
handler = (...args) => subscriber.next({ instance: args[0], option: args[1] });
break;
case 'scrollCursorIntoView':
handler = (...args) => subscriber.next({ instance: args[0], event: args[1] });
break;
case 'update':
handler = (...args) => subscriber.next({ instance: args[0] });
break;
case 'renderLine':
handler = (...args) => subscriber.next({ instance: args[0], line: args[1], element: args[2] });
break;
case 'overwriteToggle':
handler = (...args) => subscriber.next({ instance: args[0], overwrite: args[1] });
break;
default:
handler = (...args) => subscriber.next({ instance: args[0], event: args[1] });
}
if (cm) {
cm.on(eventName, handler);
return () => cm.off(eventName, handler);
}
subscriber.error(new Error('CodeMirror instance is undefined'));
return;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS1jbS1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXJrZG93bi1lZGl0b3Ivc3JjL2xpYi91dGlsL2Zyb20tY20tZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQXdGbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQXFCLEVBQUUsU0FBaUI7SUFDbEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQ25DLElBQUksT0FBbUIsQ0FBQztRQUN4QixRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkYsTUFBTTtZQUNSLEtBQUssY0FBYztnQkFDakIsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBQ1IsS0FBSyxnQkFBZ0I7Z0JBQ25CLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BHLE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBQ1IsS0FBSyxlQUFlO2dCQUNsQixPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BGLE1BQU07WUFDUixLQUFLLHVCQUF1QjtnQkFDMUIsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixNQUFNO1lBQ1IsS0FBSyxnQkFBZ0I7Z0JBQ25CLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEYsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlGLE1BQU07WUFDUixLQUFLLG1CQUFtQjtnQkFDdEIsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9GLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckYsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEYsTUFBTTtZQUNSLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JGLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckUsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEcsTUFBTTtZQUNSLEtBQUssaUJBQWlCO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLE1BQU07WUFDUjtnQkFDRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLEVBQUUsRUFBRTtZQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7UUFFRCxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPO0lBQ1QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5pZmllZC1zaWduYXR1cmVzICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnY2hhbmdlJ1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgY2hhbmdlT2JqOiBDb2RlTWlycm9yLkVkaXRvckNoYW5nZUxpbmtlZExpc3QgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnY2hhbmdlcydcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IGNoYW5nZXM6IENvZGVNaXJyb3IuRWRpdG9yQ2hhbmdlTGlua2VkTGlzdFtdIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogJ2JlZm9yZUNoYW5nZSdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IGNoYW5nZU9iajogQ29kZU1pcnJvci5FZGl0b3JDaGFuZ2VDYW5jZWxsYWJsZSB9PjtcbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ21FdmVudChcbiAgY206IENvZGVNaXJyb3IuRWRpdG9yLFxuICBldmVudE5hbWU6ICdjdXJzb3JBY3Rpdml0eSdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3IgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAna2V5SGFuZGxlZCdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IG5hbWU6IHN0cmluZzsgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnaW5wdXRSZWFkJ1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgY2hhbmdlT2JqOiBDb2RlTWlycm9yLkVkaXRvckNoYW5nZSB9PjtcbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ21FdmVudChcbiAgY206IENvZGVNaXJyb3IuRWRpdG9yLFxuICBldmVudE5hbWU6ICdlbGVjdHJpY0lucHV0J1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgbGluZTogbnVtYmVyIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogJ2JlZm9yZVNlbGVjdGlvbkNoYW5nZSdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IG9iajogQ29kZU1pcnJvci5FZGl0b3JTZWxlY3Rpb25DaGFuZ2UgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAndmlld3BvcnRDaGFuZ2UnXG4pOiBPYnNlcnZhYmxlPHsgaW5zdGFuY2U6IENvZGVNaXJyb3IuRWRpdG9yOyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnc3dhcERvYydcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IG9sZERvYzogQ29kZU1pcnJvci5Eb2MgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnZ3V0dGVyQ2xpY2snXG4pOiBPYnNlcnZhYmxlPHsgaW5zdGFuY2U6IENvZGVNaXJyb3IuRWRpdG9yOyBsaW5lOiBudW1iZXI7IGd1dHRlcjogc3RyaW5nOyBjbGlja0V2ZW50OiBNb3VzZUV2ZW50IH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogJ2d1dHRlckNvbnRleHRNZW51J1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgbGluZTogbnVtYmVyOyBndXR0ZXI6IHN0cmluZzsgY29udGV4dE1lbnU6IE1vdXNlRXZlbnQgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnZm9jdXMnXG4pOiBPYnNlcnZhYmxlPHsgaW5zdGFuY2U6IENvZGVNaXJyb3IuRWRpdG9yOyBldmVudDogRm9jdXNFdmVudCB9PjtcbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ21FdmVudChcbiAgY206IENvZGVNaXJyb3IuRWRpdG9yLFxuICBldmVudE5hbWU6ICdibHVyJ1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgZXZlbnQ6IEZvY3VzRXZlbnQgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ21FdmVudChjbTogQ29kZU1pcnJvci5FZGl0b3IsIGV2ZW50TmFtZTogJ3Njcm9sbCcpOiBPYnNlcnZhYmxlPHsgaW5zdGFuY2U6IENvZGVNaXJyb3IuRWRpdG9yIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KGNtOiBDb2RlTWlycm9yLkVkaXRvciwgZXZlbnROYW1lOiAncmVmcmVzaCcpOiBPYnNlcnZhYmxlPHsgaW5zdGFuY2U6IENvZGVNaXJyb3IuRWRpdG9yIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogJ29wdGlvbkNoYW5nZSdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IG9wdGlvbjogc3RyaW5nIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogJ3Njcm9sbEN1cnNvckludG9WaWV3J1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgZXZlbnQ6IEV2ZW50IH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50KGNtOiBDb2RlTWlycm9yLkVkaXRvciwgZXZlbnROYW1lOiAndXBkYXRlJyk6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3IgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAncmVuZGVyTGluZSdcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IGxpbmU6IENvZGVNaXJyb3IuTGluZUhhbmRsZTsgZWxlbWVudDogSFRNTEVsZW1lbnQgfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQoXG4gIGNtOiBDb2RlTWlycm9yLkVkaXRvcixcbiAgZXZlbnROYW1lOiAnb3ZlcndyaXRlVG9nZ2xlJ1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgb3ZlcndyaXRlOiBib29sZWFuIH0+O1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21DbUV2ZW50PEsgZXh0ZW5kcyBDb2RlTWlycm9yLkRPTUV2ZW50ICYga2V5b2YgR2xvYmFsRXZlbnRIYW5kbGVyc0V2ZW50TWFwPihcbiAgY206IENvZGVNaXJyb3IuRWRpdG9yLFxuICBldmVudE5hbWU6IEtcbik6IE9ic2VydmFibGU8eyBpbnN0YW5jZTogQ29kZU1pcnJvci5FZGl0b3I7IGV2ZW50OiBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXBbS10gfT47XG5leHBvcnQgZnVuY3Rpb24gZnJvbUNtRXZlbnQ8SyBleHRlbmRzIENvZGVNaXJyb3IuRE9NRXZlbnQgJiBrZXlvZiBEb2N1bWVudEFuZEVsZW1lbnRFdmVudEhhbmRsZXJzRXZlbnRNYXA+KFxuICBjbTogQ29kZU1pcnJvci5FZGl0b3IsXG4gIGV2ZW50TmFtZTogS1xuKTogT2JzZXJ2YWJsZTx7IGluc3RhbmNlOiBDb2RlTWlycm9yLkVkaXRvcjsgZXZlbnQ6IERvY3VtZW50QW5kRWxlbWVudEV2ZW50SGFuZGxlcnNFdmVudE1hcFtLXSB9PjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgX0NvZGVNaXJyb3JfIGV2ZW50IHRvIGFuIFJ4SlMgb2JzZXJ2YWJsZS5cbiAqXG4gKiBAcGFyYW0gY20gdGhlIGBDb2RlTWlycm9yLkVkaXRvcmAgaW5zdGFuY2Ugb2Ygd2hpY2ggdGhlIGV2ZW50IHNoYWxsIGJlIG9ic2VydmVkXG4gKiBAcGFyYW0gZXZlbnROYW1lIHRoZSBuYW1lIG9mIGEgX0NvZGVNaXJyb3JfIGV2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ21FdmVudChjbTogQ29kZU1pcnJvci5FZGl0b3IsIGV2ZW50TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGhhbmRsZXI6ICgpID0+IHZvaWQ7XG4gICAgc3dpdGNoIChldmVudE5hbWUpIHtcbiAgICAgIGNhc2UgJ2NoYW5nZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBjaGFuZ2VPYmo6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hhbmdlcyc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBjaGFuZ2VzOiBhcmdzWzFdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JlZm9yZUNoYW5nZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBjaGFuZ2VPYmo6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3Vyc29yQWN0aXZpdHknOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBzdWJzY3JpYmVyLm5leHQoeyBpbnN0YW5jZTogYXJnc1swXSB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdrZXlIYW5kbGVkJzpcbiAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gc3Vic2NyaWJlci5uZXh0KHsgaW5zdGFuY2U6IGFyZ3NbMF0sIG5hbWU6IGFyZ3NbMV0sIGV2ZW50OiBhcmdzWzJdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lucHV0UmVhZCc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBjaGFuZ2VPYmo6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWxlY3RyaWNJbnB1dCc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBsaW5lOiBhcmdzWzFdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JlZm9yZVNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBvYmo6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmlld3BvcnRDaGFuZ2UnOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBzdWJzY3JpYmVyLm5leHQoeyBpbnN0YW5jZTogYXJnc1swXSwgZnJvbTogYXJnc1sxXSwgdG86IGFyZ3NbMl0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3dhcERvYyc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBvbGREb2M6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3V0dGVyQ2xpY2snOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBsaW5lOiBhcmdzWzFdLCBndXR0ZXI6IGFyZ3NbMl0sIGNsaWNrRXZlbnQ6IGFyZ3NbM10gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3V0dGVyQ29udGV4dE1lbnUnOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBsaW5lOiBhcmdzWzFdLCBndXR0ZXI6IGFyZ3NbMl0sIGNvbnRleHRNZW51OiBhcmdzWzNdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gc3Vic2NyaWJlci5uZXh0KHsgaW5zdGFuY2U6IGFyZ3NbMF0sIGV2ZW50OiBhcmdzWzFdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JsdXInOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBzdWJzY3JpYmVyLm5leHQoeyBpbnN0YW5jZTogYXJnc1swXSwgZXZlbnQ6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gc3Vic2NyaWJlci5uZXh0KHsgaW5zdGFuY2U6IGFyZ3NbMF0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVmcmVzaCc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbkNoYW5nZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBvcHRpb246IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2Nyb2xsQ3Vyc29ySW50b1ZpZXcnOlxuICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBzdWJzY3JpYmVyLm5leHQoeyBpbnN0YW5jZTogYXJnc1swXSwgZXZlbnQ6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gc3Vic2NyaWJlci5uZXh0KHsgaW5zdGFuY2U6IGFyZ3NbMF0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVuZGVyTGluZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBsaW5lOiBhcmdzWzFdLCBlbGVtZW50OiBhcmdzWzJdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJ3cml0ZVRvZ2dsZSc6XG4gICAgICAgIGhhbmRsZXIgPSAoLi4uYXJnczogYW55W10pID0+IHN1YnNjcmliZXIubmV4dCh7IGluc3RhbmNlOiBhcmdzWzBdLCBvdmVyd3JpdGU6IGFyZ3NbMV0gfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gc3Vic2NyaWJlci5uZXh0KHsgaW5zdGFuY2U6IGFyZ3NbMF0sIGV2ZW50OiBhcmdzWzFdIH0pO1xuICAgIH1cblxuICAgIGlmIChjbSkge1xuICAgICAgY20ub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBjbS5vZmYoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcignQ29kZU1pcnJvciBpbnN0YW5jZSBpcyB1bmRlZmluZWQnKSk7XG4gICAgcmV0dXJuO1xuICB9KTtcbn1cbiJdfQ==