import * as sl from 'prosemirror-schema-list'; import { toStyleString } from 'ngx-editor/utils'; const doc = { content: 'block+', }; // :: NodeSpec The text node. const text = { group: 'inline', }; // :: NodeSpec A plain paragraph textblock. Represented in the DOM // as a `
` element. const paragraph = { content: 'inline*', group: 'block', attrs: { align: { default: null, }, }, parseDOM: [ { tag: 'p', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { align, }; }, }, ], toDOM(node) { const { align } = node.attrs; const styles = { textAlign: align !== 'left' ? align : null, }; const style = toStyleString(styles) || null; return ['p', { style }, 0]; }, }; // :: NodeSpec A blockquote (`
`) wrapping one or more blocks. const blockquote = { content: 'block+', group: 'block', defining: true, parseDOM: [{ tag: 'blockquote' }], toDOM() { return ['blockquote', 0]; }, }; // :: NodeSpec A horizontal rule (`
`). const horizontalRule = { group: 'block', parseDOM: [{ tag: 'hr' }], toDOM() { return ['hr']; }, }; // :: NodeSpec A heading textblock, with a `level` attribute that // should hold the number 1 to 6. Parsed and serialized as `` to // `
` elements. const heading = { attrs: { level: { default: 1, }, align: { default: null, }, }, content: 'inline*', group: 'block', defining: true, parseDOM: [ { tag: 'h1', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 1, align, }; }, }, { tag: 'h2', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 2, align, }; }, }, { tag: 'h3', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 3, align, }; }, }, { tag: 'h4', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 4, align, }; }, }, { tag: 'h5', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 5, align, }; }, }, { tag: 'h6', getAttrs(dom) { const { textAlign } = dom.style; const align = dom.getAttribute('align') || textAlign || null; return { level: 6, align, }; }, }, ], toDOM(node) { const { level, align } = node.attrs; const styles = { textAlign: align !== 'left' ? align : null, }; const style = toStyleString(styles) || null; return [`h${level}`, { style }, 0]; }, }; // :: NodeSpec A code listing. Disallows marks or non-text inline // nodes by default. Represented as a `
` element with a // `` element inside of it. const codeBlock = { content: 'text*', marks: '', group: 'block', code: true, defining: true, parseDOM: [ { tag: 'pre', preserveWhitespace: 'full', }, ], toDOM() { return ['pre', ['code', 0]]; }, }; // :: NodeSpec A hard line break, represented in the DOM as `
`. const hardBreak = { inline: true, group: 'inline', selectable: false, parseDOM: [{ tag: 'br' }], toDOM() { return ['br']; }, }; // :: NodeSpec An inline image (``) node. Supports `src`, // `alt`, and `href` attributes. The latter two default to the empty // string. export const image = { inline: true, attrs: { src: {}, alt: { default: null }, title: { default: null }, width: { default: null }, }, group: 'inline', draggable: true, parseDOM: [ { tag: 'img[src]', getAttrs(dom) { return { src: dom.getAttribute('src'), title: dom.getAttribute('title'), alt: dom.getAttribute('alt'), width: dom.getAttribute('width'), }; }, }, ], toDOM(node) { const { src, alt, title, width } = node.attrs; return ['img', { src, alt, title, width }]; }, }; const listItem = { ...sl.listItem, content: 'paragraph block*', }; const orderedList = { ...sl.orderedList, content: 'list_item+', group: 'block', }; const bulletList = { ...sl.bulletList, content: 'list_item+', group: 'block', }; const nodes = { doc, text, paragraph, blockquote, horizontal_rule: horizontalRule, heading, hard_break: hardBreak, code_block: codeBlock, image, list_item: listItem, ordered_list: orderedList, bullet_list: bulletList, }; export default nodes; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NjaGVtYS9ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxNQUFNLEdBQUcsR0FBYTtJQUNwQixPQUFPLEVBQUUsUUFBUTtDQUNsQixDQUFDO0FBRUYsNkJBQTZCO0FBQzdCLE1BQU0sSUFBSSxHQUFhO0lBQ3JCLEtBQUssRUFBRSxRQUFRO0NBQ2hCLENBQUM7QUFFRixrRUFBa0U7QUFDbEUsc0JBQXNCO0FBQ3RCLE1BQU0sU0FBUyxHQUFhO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFO1lBQ0wsT0FBTyxFQUFFLElBQUk7U0FDZDtLQUNGO0lBQ0QsUUFBUSxFQUFFO1FBQ1I7WUFDRSxHQUFHLEVBQUUsR0FBRztZQUNSLFFBQVEsQ0FBQyxHQUFnQjtnQkFDdkIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQztnQkFFN0QsT0FBTztvQkFDTCxLQUFLO2lCQUNOLENBQUM7WUFDSixDQUFDO1NBQ0Y7S0FDRjtJQUNELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQWlDO1lBQzNDLFNBQVMsRUFBRSxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDM0MsQ0FBQztRQUNG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S0FBSyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2lCQUNqQyxDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0Y7SUFDRCxLQUFLLENBQUMsSUFBcUI7UUFDekIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDOUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRztJQUNmLEdBQUcsRUFBRSxDQUFDLFFBQVE7SUFDZCxPQUFPLEVBQUUsa0JBQWtCO0NBQzVCLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixHQUFHLEVBQUUsQ0FBQyxXQUFXO0lBQ2pCLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLEdBQUcsRUFBRSxDQUFDLFVBQVU7SUFDaEIsT0FBTyxFQUFFLFlBQVk7SUFDckIsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsTUFBTSxLQUFLLEdBQUc7SUFDWixHQUFHO0lBQ0gsSUFBSTtJQUNKLFNBQVM7SUFDVCxVQUFVO0lBQ1YsZUFBZSxFQUFFLGNBQWM7SUFDL0IsT0FBTztJQUNQLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLEtBQUs7SUFDTCxTQUFTLEVBQUUsUUFBUTtJQUNuQixZQUFZLEVBQUUsV0FBVztJQUN6QixXQUFXLEVBQUUsVUFBVTtDQUN4QixDQUFDO0FBRUYsZUFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01PdXRwdXRTcGVjLCBOb2RlIGFzIFByb3NlTWlycm9yTm9kZSwgTm9kZVNwZWMgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgKiBhcyBzbCBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtbGlzdCc7XG5cbmltcG9ydCB7IHRvU3R5bGVTdHJpbmcgfSBmcm9tICduZ3gtZWRpdG9yL3V0aWxzJztcblxuY29uc3QgZG9jOiBOb2RlU3BlYyA9IHtcbiAgY29udGVudDogJ2Jsb2NrKycsXG59O1xuXG4vLyA6OiBOb2RlU3BlYyBUaGUgdGV4dCBub2RlLlxuY29uc3QgdGV4dDogTm9kZVNwZWMgPSB7XG4gIGdyb3VwOiAnaW5saW5lJyxcbn07XG5cbi8vIDo6IE5vZGVTcGVjIEEgcGxhaW4gcGFyYWdyYXBoIHRleHRibG9jay4gUmVwcmVzZW50ZWQgaW4gdGhlIERPTVxuLy8gYXMgYSBgPHA+YCBlbGVtZW50LlxuY29uc3QgcGFyYWdyYXBoOiBOb2RlU3BlYyA9IHtcbiAgY29udGVudDogJ2lubGluZSonLFxuICBncm91cDogJ2Jsb2NrJyxcbiAgYXR0cnM6IHtcbiAgICBhbGlnbjoge1xuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICB9LFxuICB9LFxuICBwYXJzZURPTTogW1xuICAgIHtcbiAgICAgIHRhZzogJ3AnLFxuICAgICAgZ2V0QXR0cnMoZG9tOiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICBjb25zdCB7IHRleHRBbGlnbiB9ID0gZG9tLnN0eWxlO1xuICAgICAgICBjb25zdCBhbGlnbiA9IGRvbS5nZXRBdHRyaWJ1dGUoJ2FsaWduJykgfHwgdGV4dEFsaWduIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgdG9ET00obm9kZSk6IERPTU91dHB1dFNwZWMge1xuICAgIGNvbnN0IHsgYWxpZ24gfSA9IG5vZGUuYXR0cnM7XG5cbiAgICBjb25zdCBzdHlsZXM6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPSB7XG4gICAgICB0ZXh0QWxpZ246IGFsaWduICE9PSAnbGVmdCcgPyBhbGlnbiA6IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCBzdHlsZSA9IHRvU3R5bGVTdHJpbmcoc3R5bGVzKSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIFsncCcsIHsgc3R5bGUgfSwgMF07XG4gIH0sXG59O1xuXG4vLyA6OiBOb2RlU3BlYyBBIGJsb2NrcXVvdGUgKGA8YmxvY2txdW90ZT5gKSB3cmFwcGluZyBvbmUgb3IgbW9yZSBibG9ja3MuXG5jb25zdCBibG9ja3F1b3RlOiBOb2RlU3BlYyA9IHtcbiAgY29udGVudDogJ2Jsb2NrKycsXG4gIGdyb3VwOiAnYmxvY2snLFxuICBkZWZpbmluZzogdHJ1ZSxcbiAgcGFyc2VET006IFt7IHRhZzogJ2Jsb2NrcXVvdGUnIH1dLFxuICB0b0RPTSgpOiBET01PdXRwdXRTcGVjIHtcbiAgICByZXR1cm4gWydibG9ja3F1b3RlJywgMF07XG4gIH0sXG59O1xuXG4vLyA6OiBOb2RlU3BlYyBBIGhvcml6b250YWwgcnVsZSAoYDxocj5gKS5cbmNvbnN0IGhvcml6b250YWxSdWxlOiBOb2RlU3BlYyA9IHtcbiAgZ3JvdXA6ICdibG9jaycsXG4gIHBhcnNlRE9NOiBbeyB0YWc6ICdocicgfV0sXG4gIHRvRE9NKCk6IERPTU91dHB1dFNwZWMge1xuICAgIHJldHVybiBbJ2hyJ107XG4gIH0sXG59O1xuXG4vLyA6OiBOb2RlU3BlYyBBIGhlYWRpbmcgdGV4dGJsb2NrLCB3aXRoIGEgYGxldmVsYCBhdHRyaWJ1dGUgdGhhdFxuLy8gc2hvdWxkIGhvbGQgdGhlIG51bWJlciAxIHRvIDYuIFBhcnNlZCBhbmQgc2VyaWFsaXplZCBhcyBgPGgxPmAgdG9cbi8vIGA8aDY+YCBlbGVtZW50cy5cbmNvbnN0IGhlYWRpbmc6IE5vZGVTcGVjID0ge1xuICBhdHRyczoge1xuICAgIGxldmVsOiB7XG4gICAgICBkZWZhdWx0OiAxLFxuICAgIH0sXG4gICAgYWxpZ246IHtcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgfSxcbiAgfSxcbiAgY29udGVudDogJ2lubGluZSonLFxuICBncm91cDogJ2Jsb2NrJyxcbiAgZGVmaW5pbmc6IHRydWUsXG4gIHBhcnNlRE9NOiBbXG4gICAge1xuICAgICAgdGFnOiAnaDEnLFxuICAgICAgZ2V0QXR0cnMoZG9tOiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICBjb25zdCB7IHRleHRBbGlnbiB9ID0gZG9tLnN0eWxlO1xuICAgICAgICBjb25zdCBhbGlnbiA9IGRvbS5nZXRBdHRyaWJ1dGUoJ2FsaWduJykgfHwgdGV4dEFsaWduIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZXZlbDogMSxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0YWc6ICdoMicsXG4gICAgICBnZXRBdHRycyhkb206IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIGNvbnN0IHsgdGV4dEFsaWduIH0gPSBkb20uc3R5bGU7XG4gICAgICAgIGNvbnN0IGFsaWduID0gZG9tLmdldEF0dHJpYnV0ZSgnYWxpZ24nKSB8fCB0ZXh0QWxpZ24gfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxldmVsOiAyLFxuICAgICAgICAgIGFsaWduLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRhZzogJ2gzJyxcbiAgICAgIGdldEF0dHJzKGRvbTogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgY29uc3QgeyB0ZXh0QWxpZ24gfSA9IGRvbS5zdHlsZTtcbiAgICAgICAgY29uc3QgYWxpZ24gPSBkb20uZ2V0QXR0cmlidXRlKCdhbGlnbicpIHx8IHRleHRBbGlnbiB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGV2ZWw6IDMsXG4gICAgICAgICAgYWxpZ24sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdGFnOiAnaDQnLFxuICAgICAgZ2V0QXR0cnMoZG9tOiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICBjb25zdCB7IHRleHRBbGlnbiB9ID0gZG9tLnN0eWxlO1xuICAgICAgICBjb25zdCBhbGlnbiA9IGRvbS5nZXRBdHRyaWJ1dGUoJ2FsaWduJykgfHwgdGV4dEFsaWduIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZXZlbDogNCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0YWc6ICdoNScsXG4gICAgICBnZXRBdHRycyhkb206IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIGNvbnN0IHsgdGV4dEFsaWduIH0gPSBkb20uc3R5bGU7XG4gICAgICAgIGNvbnN0IGFsaWduID0gZG9tLmdldEF0dHJpYnV0ZSgnYWxpZ24nKSB8fCB0ZXh0QWxpZ24gfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxldmVsOiA1LFxuICAgICAgICAgIGFsaWduLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRhZzogJ2g2JyxcbiAgICAgIGdldEF0dHJzKGRvbTogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgY29uc3QgeyB0ZXh0QWxpZ24gfSA9IGRvbS5zdHlsZTtcbiAgICAgICAgY29uc3QgYWxpZ24gPSBkb20uZ2V0QXR0cmlidXRlKCdhbGlnbicpIHx8IHRleHRBbGlnbiB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGV2ZWw6IDYsXG4gICAgICAgICAgYWxpZ24sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIHRvRE9NKG5vZGUpOiBET01PdXRwdXRTcGVjIHtcbiAgICBjb25zdCB7IGxldmVsLCBhbGlnbiB9ID0gbm9kZS5hdHRycztcblxuICAgIGNvbnN0IHN0eWxlczogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiA9IHtcbiAgICAgIHRleHRBbGlnbjogYWxpZ24gIT09ICdsZWZ0JyA/IGFsaWduIDogbnVsbCxcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlID0gdG9TdHlsZVN0cmluZyhzdHlsZXMpIHx8IG51bGw7XG5cbiAgICByZXR1cm4gW2BoJHtsZXZlbH1gLCB7IHN0eWxlIH0sIDBdO1xuICB9LFxufTtcblxuLy8gOjogTm9kZVNwZWMgQSBjb2RlIGxpc3RpbmcuIERpc2FsbG93cyBtYXJrcyBvciBub24tdGV4dCBpbmxpbmVcbi8vIG5vZGVzIGJ5IGRlZmF1bHQuIFJlcHJlc2VudGVkIGFzIGEgYDxwcmU+YCBlbGVtZW50IHdpdGggYVxuLy8gYDxjb2RlPmAgZWxlbWVudCBpbnNpZGUgb2YgaXQuXG5jb25zdCBjb2RlQmxvY2s6IE5vZGVTcGVjID0ge1xuICBjb250ZW50OiAndGV4dConLFxuICBtYXJrczogJycsXG4gIGdyb3VwOiAnYmxvY2snLFxuICBjb2RlOiB0cnVlLFxuICBkZWZpbmluZzogdHJ1ZSxcbiAgcGFyc2VET006IFtcbiAgICB7XG4gICAgICB0YWc6ICdwcmUnLFxuICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiAnZnVsbCcsXG4gICAgfSxcbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsncHJlJywgWydjb2RlJywgMF1dO1xuICB9LFxufTtcblxuLy8gOjogTm9kZVNwZWMgQSBoYXJkIGxpbmUgYnJlYWssIHJlcHJlc2VudGVkIGluIHRoZSBET00gYXMgYDxicj5gLlxuY29uc3QgaGFyZEJyZWFrOiBOb2RlU3BlYyA9IHtcbiAgaW5saW5lOiB0cnVlLFxuICBncm91cDogJ2lubGluZScsXG4gIHNlbGVjdGFibGU6IGZhbHNlLFxuICBwYXJzZURPTTogW3sgdGFnOiAnYnInIH1dLFxuICB0b0RPTSgpOiBET01PdXRwdXRTcGVjIHtcbiAgICByZXR1cm4gWydiciddO1xuICB9LFxufTtcblxuLy8gOjogTm9kZVNwZWMgQW4gaW5saW5lIGltYWdlIChgPGltZz5gKSBub2RlLiBTdXBwb3J0cyBgc3JjYCxcbi8vIGBhbHRgLCBhbmQgYGhyZWZgIGF0dHJpYnV0ZXMuIFRoZSBsYXR0ZXIgdHdvIGRlZmF1bHQgdG8gdGhlIGVtcHR5XG4vLyBzdHJpbmcuXG5leHBvcnQgY29uc3QgaW1hZ2U6IE5vZGVTcGVjID0ge1xuICBpbmxpbmU6IHRydWUsXG4gIGF0dHJzOiB7XG4gICAgc3JjOiB7fSxcbiAgICBhbHQ6IHsgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IGRlZmF1bHQ6IG51bGwgfSxcbiAgICB3aWR0aDogeyBkZWZhdWx0OiBudWxsIH0sXG4gIH0sXG4gIGdyb3VwOiAnaW5saW5lJyxcbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICBwYXJzZURPTTogW1xuICAgIHtcbiAgICAgIHRhZzogJ2ltZ1tzcmNdJyxcbiAgICAgIGdldEF0dHJzKGRvbTogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzcmM6IGRvbS5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpLFxuICAgICAgICAgIGFsdDogZG9tLmdldEF0dHJpYnV0ZSgnYWx0JyksXG4gICAgICAgICAgd2lkdGg6IGRvbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIHRvRE9NKG5vZGU6IFByb3NlTWlycm9yTm9kZSk6IERPTU91dHB1dFNwZWMge1xuICAgIGNvbnN0IHsgc3JjLCBhbHQsIHRpdGxlLCB3aWR0aCB9ID0gbm9kZS5hdHRycztcbiAgICByZXR1cm4gWydpbWcnLCB7IHNyYywgYWx0LCB0aXRsZSwgd2lkdGggfV07XG4gIH0sXG59O1xuXG5jb25zdCBsaXN0SXRlbSA9IHtcbiAgLi4uc2wubGlzdEl0ZW0sXG4gIGNvbnRlbnQ6ICdwYXJhZ3JhcGggYmxvY2sqJyxcbn07XG5cbmNvbnN0IG9yZGVyZWRMaXN0ID0ge1xuICAuLi5zbC5vcmRlcmVkTGlzdCxcbiAgY29udGVudDogJ2xpc3RfaXRlbSsnLFxuICBncm91cDogJ2Jsb2NrJyxcbn07XG5cbmNvbnN0IGJ1bGxldExpc3QgPSB7XG4gIC4uLnNsLmJ1bGxldExpc3QsXG4gIGNvbnRlbnQ6ICdsaXN0X2l0ZW0rJyxcbiAgZ3JvdXA6ICdibG9jaycsXG59O1xuXG5jb25zdCBub2RlcyA9IHtcbiAgZG9jLFxuICB0ZXh0LFxuICBwYXJhZ3JhcGgsXG4gIGJsb2NrcXVvdGUsXG4gIGhvcml6b250YWxfcnVsZTogaG9yaXpvbnRhbFJ1bGUsXG4gIGhlYWRpbmcsXG4gIGhhcmRfYnJlYWs6IGhhcmRCcmVhayxcbiAgY29kZV9ibG9jazogY29kZUJsb2NrLFxuICBpbWFnZSxcbiAgbGlzdF9pdGVtOiBsaXN0SXRlbSxcbiAgb3JkZXJlZF9saXN0OiBvcmRlcmVkTGlzdCxcbiAgYnVsbGV0X2xpc3Q6IGJ1bGxldExpc3QsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBub2RlcztcbiJdfQ==