@bnsights/bbsf-utilities 1.0.69-beta.2 → 1.0.69-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/esm2022/lib/shared/models/index.mjs +1 -2
  2. package/esm2022/lib/shared/services/index.mjs +1 -2
  3. package/esm2022/public-api.mjs +3 -5
  4. package/fesm2022/bnsights-bbsf-utilities.mjs +1 -64
  5. package/fesm2022/bnsights-bbsf-utilities.mjs.map +1 -1
  6. package/lib/shared/models/index.d.ts +0 -1
  7. package/lib/shared/services/index.d.ts +0 -1
  8. package/package.json +1 -16
  9. package/public-api.d.ts +0 -2
  10. package/esm2022/lib/shared/config/word/constants.mjs +0 -105
  11. package/esm2022/lib/shared/config/word/docx-document.mjs +0 -348
  12. package/esm2022/lib/shared/config/word/helpers/index.mjs +0 -4
  13. package/esm2022/lib/shared/config/word/helpers/render-document-file.mjs +0 -154
  14. package/esm2022/lib/shared/config/word/helpers/xml-builder.mjs +0 -1836
  15. package/esm2022/lib/shared/config/word/html-to-docx.mjs +0 -187
  16. package/esm2022/lib/shared/config/word/index.mjs +0 -50
  17. package/esm2022/lib/shared/config/word/namespaces.mjs +0 -37
  18. package/esm2022/lib/shared/config/word/schemas/content-types.mjs +0 -26
  19. package/esm2022/lib/shared/config/word/schemas/core.mjs +0 -27
  20. package/esm2022/lib/shared/config/word/schemas/document-rels.mjs +0 -16
  21. package/esm2022/lib/shared/config/word/schemas/document.template.mjs +0 -107
  22. package/esm2022/lib/shared/config/word/schemas/font-table.mjs +0 -40
  23. package/esm2022/lib/shared/config/word/schemas/generic-rels.mjs +0 -11
  24. package/esm2022/lib/shared/config/word/schemas/index.mjs +0 -13
  25. package/esm2022/lib/shared/config/word/schemas/numbering.mjs +0 -17
  26. package/esm2022/lib/shared/config/word/schemas/rels.mjs +0 -11
  27. package/esm2022/lib/shared/config/word/schemas/settings.mjs +0 -13
  28. package/esm2022/lib/shared/config/word/schemas/styles.mjs +0 -147
  29. package/esm2022/lib/shared/config/word/schemas/theme.mjs +0 -198
  30. package/esm2022/lib/shared/config/word/schemas/web-settings.mjs +0 -9
  31. package/esm2022/lib/shared/config/word/utils/color-conversion.mjs +0 -60
  32. package/esm2022/lib/shared/config/word/utils/list.mjs +0 -51
  33. package/esm2022/lib/shared/config/word/utils/unit-conversion.mjs +0 -30
  34. package/esm2022/lib/shared/config/word/utils/url.mjs +0 -7
  35. package/esm2022/lib/shared/config/word/utils/vnode.mjs +0 -3
  36. package/esm2022/lib/shared/config/word/word-work/templates/documentTemplate.mjs +0 -54
  37. package/esm2022/lib/shared/config/word/word-work/templates/index.mjs +0 -4
  38. package/esm2022/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.mjs +0 -22
  39. package/esm2022/lib/shared/config/word/word-work/templates/mhtPartTemplate.mjs +0 -10
  40. package/esm2022/lib/shared/config/word/word-work/utils.mjs +0 -26
  41. package/esm2022/lib/shared/models/word-document-model.mjs +0 -8
  42. package/esm2022/lib/shared/services/word-document.service.mjs +0 -57
  43. package/esm2022/word/bnsights-bbsf-utilities-word.mjs +0 -5
  44. package/esm2022/word/public-api.mjs +0 -9
  45. package/fesm2022/bnsights-bbsf-utilities-index-C3Twnewr.mjs +0 -3536
  46. package/fesm2022/bnsights-bbsf-utilities-index-C3Twnewr.mjs.map +0 -1
  47. package/fesm2022/bnsights-bbsf-utilities-word.mjs +0 -13
  48. package/fesm2022/bnsights-bbsf-utilities-word.mjs.map +0 -1
  49. package/lib/shared/config/word/constants.d.ts +0 -124
  50. package/lib/shared/config/word/docx-document.d.ts +0 -73
  51. package/lib/shared/config/word/helpers/index.d.ts +0 -1
  52. package/lib/shared/config/word/helpers/render-document-file.d.ts +0 -2
  53. package/lib/shared/config/word/helpers/xml-builder.d.ts +0 -16
  54. package/lib/shared/config/word/html-to-docx.d.ts +0 -1
  55. package/lib/shared/config/word/index.d.ts +0 -1
  56. package/lib/shared/config/word/namespaces.d.ts +0 -36
  57. package/lib/shared/config/word/schemas/content-types.d.ts +0 -1
  58. package/lib/shared/config/word/schemas/core.d.ts +0 -1
  59. package/lib/shared/config/word/schemas/document-rels.d.ts +0 -1
  60. package/lib/shared/config/word/schemas/document.template.d.ts +0 -4
  61. package/lib/shared/config/word/schemas/font-table.d.ts +0 -1
  62. package/lib/shared/config/word/schemas/generic-rels.d.ts +0 -1
  63. package/lib/shared/config/word/schemas/index.d.ts +0 -12
  64. package/lib/shared/config/word/schemas/numbering.d.ts +0 -1
  65. package/lib/shared/config/word/schemas/rels.d.ts +0 -1
  66. package/lib/shared/config/word/schemas/settings.d.ts +0 -1
  67. package/lib/shared/config/word/schemas/styles.d.ts +0 -1
  68. package/lib/shared/config/word/schemas/theme.d.ts +0 -1
  69. package/lib/shared/config/word/schemas/web-settings.d.ts +0 -1
  70. package/lib/shared/config/word/utils/color-conversion.d.ts +0 -7
  71. package/lib/shared/config/word/utils/list.d.ts +0 -6
  72. package/lib/shared/config/word/utils/unit-conversion.d.ts +0 -29
  73. package/lib/shared/config/word/utils/url.d.ts +0 -1
  74. package/lib/shared/config/word/utils/vnode.d.ts +0 -1
  75. package/lib/shared/config/word/word-work/templates/documentTemplate.d.ts +0 -12
  76. package/lib/shared/config/word/word-work/templates/index.d.ts +0 -3
  77. package/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.d.ts +0 -1
  78. package/lib/shared/config/word/word-work/templates/mhtPartTemplate.d.ts +0 -1
  79. package/lib/shared/config/word/word-work/utils.d.ts +0 -1
  80. package/lib/shared/models/word-document-model.d.ts +0 -16
  81. package/lib/shared/services/word-document.service.d.ts +0 -25
  82. package/word/index.d.ts +0 -5
  83. package/word/public-api.d.ts +0 -2
@@ -1,154 +0,0 @@
1
- /* eslint-disable no-await-in-loop */
2
- /* eslint-disable no-case-declarations */
3
- import { fragment } from 'xmlbuilder2';
4
- import VNode from 'virtual-dom/vnode/vnode';
5
- import VText from 'virtual-dom/vnode/vtext';
6
- import isVNode from 'virtual-dom/vnode/is-vnode';
7
- import isVText from 'virtual-dom/vnode/is-vtext';
8
- // eslint-disable-next-line import/no-named-default
9
- import { default as HTMLToVDOM } from 'html-to-vdom';
10
- import escape from 'escape-html';
11
- // FIXME: remove the cyclic dependency
12
- // eslint-disable-next-line import/no-cycle
13
- import * as xmlBuilder from './xml-builder';
14
- import namespaces from '../namespaces';
15
- import { vNodeHasChildren } from '../utils/vnode';
16
- const convertHTML = HTMLToVDOM({
17
- VNode,
18
- VText,
19
- });
20
- async function findXMLEquivalent(docxDocumentInstance, vNode, xmlFragment) {
21
- if (vNode.tagName === 'div' &&
22
- (vNode.properties.attributes.class === 'page-break' ||
23
- (vNode.properties.style && vNode.properties.style['page-break-after']))) {
24
- const paragraphFragment = fragment({ namespaceAlias: { w: namespaces.w } })
25
- .ele('@w', 'p')
26
- .ele('@w', 'r')
27
- .ele('@w', 'br')
28
- .att('@w', 'type', 'page')
29
- .up()
30
- .up()
31
- .up();
32
- xmlFragment.import(paragraphFragment);
33
- return;
34
- }
35
- switch (vNode.tagName) {
36
- case 'h1':
37
- case 'h2':
38
- case 'h3':
39
- case 'h4':
40
- case 'h5':
41
- case 'h6':
42
- const headingFragment = await xmlBuilder.buildParagraph(vNode, {
43
- paragraphStyle: `Heading${vNode.tagName[1]}`,
44
- }, docxDocumentInstance);
45
- xmlFragment.import(headingFragment);
46
- return;
47
- case 'span':
48
- case 'strong':
49
- case 'b':
50
- case 'em':
51
- case 'i':
52
- case 'u':
53
- case 'ins':
54
- case 'strike':
55
- case 'del':
56
- case 's':
57
- case 'sub':
58
- case 'sup':
59
- case 'mark':
60
- case 'p':
61
- case 'a':
62
- case 'blockquote':
63
- case 'code':
64
- case 'pre':
65
- const paragraphFragment = await xmlBuilder.buildParagraph(vNode, {}, docxDocumentInstance);
66
- xmlFragment.import(paragraphFragment);
67
- return;
68
- case 'figure':
69
- if (vNodeHasChildren(vNode)) {
70
- // eslint-disable-next-line no-plusplus
71
- for (let index = 0; index < vNode.children.length; index++) {
72
- const childVNode = vNode.children[index];
73
- if (childVNode.tagName === 'table') {
74
- const tableFragment = await xmlBuilder.buildTable(childVNode, {
75
- maximumWidth: docxDocumentInstance.availableDocumentSpace,
76
- rowCantSplit: docxDocumentInstance.tableRowCantSplit,
77
- }, docxDocumentInstance);
78
- xmlFragment.import(tableFragment);
79
- // Adding empty paragraph for space after table
80
- const emptyParagraphFragment = await xmlBuilder.buildParagraph(null, {});
81
- xmlFragment.import(emptyParagraphFragment);
82
- }
83
- else if (childVNode.tagName === 'img') {
84
- const imageFragment = await xmlBuilder.buildImage(docxDocumentInstance, childVNode);
85
- if (imageFragment) {
86
- xmlFragment.import(imageFragment);
87
- }
88
- }
89
- }
90
- }
91
- return;
92
- case 'table':
93
- const tableFragment = await xmlBuilder.buildTable(vNode, {
94
- maximumWidth: docxDocumentInstance.availableDocumentSpace,
95
- rowCantSplit: docxDocumentInstance.tableRowCantSplit,
96
- }, docxDocumentInstance);
97
- xmlFragment.import(tableFragment);
98
- // Adding empty paragraph for space after table
99
- const emptyParagraphFragment = await xmlBuilder.buildParagraph(null, {});
100
- xmlFragment.import(emptyParagraphFragment);
101
- return;
102
- case 'ol':
103
- case 'ul':
104
- await xmlBuilder.buildList(vNode, docxDocumentInstance, xmlFragment);
105
- return;
106
- case 'img':
107
- const imageFragment = await xmlBuilder.buildImage(docxDocumentInstance, vNode);
108
- if (imageFragment) {
109
- xmlFragment.import(imageFragment);
110
- }
111
- return;
112
- case 'br':
113
- const linebreakFragment = await xmlBuilder.buildParagraph(null, {});
114
- xmlFragment.import(linebreakFragment);
115
- return;
116
- }
117
- if (vNodeHasChildren(vNode)) {
118
- // eslint-disable-next-line no-plusplus
119
- for (let index = 0; index < vNode.children.length; index++) {
120
- const childVNode = vNode.children[index];
121
- // eslint-disable-next-line no-use-before-define
122
- await convertVTreeToXML(docxDocumentInstance, childVNode, xmlFragment);
123
- }
124
- }
125
- }
126
- // eslint-disable-next-line consistent-return
127
- export async function convertVTreeToXML(docxDocumentInstance, vTree, xmlFragment) {
128
- if (!vTree) {
129
- // eslint-disable-next-line no-useless-return
130
- return '';
131
- }
132
- if (Array.isArray(vTree) && vTree.length) {
133
- // eslint-disable-next-line no-plusplus
134
- for (let index = 0; index < vTree.length; index++) {
135
- const vNode = vTree[index];
136
- await convertVTreeToXML(docxDocumentInstance, vNode, xmlFragment);
137
- }
138
- }
139
- else if (isVNode(vTree)) {
140
- await findXMLEquivalent(docxDocumentInstance, vTree, xmlFragment);
141
- }
142
- else if (isVText(vTree)) {
143
- xmlBuilder.buildTextElement(xmlFragment, escape(String(vTree.text)));
144
- }
145
- return xmlFragment;
146
- }
147
- async function renderDocumentFile(docxDocumentInstance) {
148
- const vTree = convertHTML(docxDocumentInstance.htmlString);
149
- const xmlFragment = fragment({ namespaceAlias: { w: namespaces.w } });
150
- const populatedXmlFragment = await convertVTreeToXML(docxDocumentInstance, vTree, xmlFragment);
151
- return populatedXmlFragment;
152
- }
153
- export { renderDocumentFile };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWRvY3VtZW50LWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLXV0aWxpdGllcy9zcmMvbGliL3NoYXJlZC9jb25maWcvd29yZC9oZWxwZXJzL3JlbmRlci1kb2N1bWVudC1maWxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEtBQUssTUFBTSx5QkFBeUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSx5QkFBeUIsQ0FBQztBQUM1QyxPQUFPLE9BQU8sTUFBTSw0QkFBNEIsQ0FBQztBQUNqRCxPQUFPLE9BQU8sTUFBTSw0QkFBNEIsQ0FBQztBQUNqRCxtREFBbUQ7QUFDbkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRWpDLHNDQUFzQztBQUN0QywyQ0FBMkM7QUFDM0MsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUM3QixLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUMsQ0FBQztBQUVILEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsV0FBVztJQUN2RSxJQUNFLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSztRQUN2QixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxZQUFZO1lBQ2pELENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQ3pFO1FBQ0EsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDeEUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7YUFDZCxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzthQUNkLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2FBQ2YsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO2FBQ3pCLEVBQUUsRUFBRTthQUNKLEVBQUUsRUFBRTthQUNKLEVBQUUsRUFBRSxDQUFDO1FBRVIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE9BQU87S0FDUjtJQUVELFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUNyQixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJO1lBQ1AsTUFBTSxlQUFlLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUNyRCxLQUFLLEVBQ0w7Z0JBQ0UsY0FBYyxFQUFFLFVBQVUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTthQUM3QyxFQUNELG9CQUFvQixDQUNyQixDQUFDO1lBQ0YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNwQyxPQUFPO1FBQ1QsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUs7WUFDUixNQUFNLGlCQUFpQixHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDM0YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RDLE9BQU87UUFDVCxLQUFLLFFBQVE7WUFDWCxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQix1Q0FBdUM7Z0JBQ3ZDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDMUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekMsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTt3QkFDbEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUMvQyxVQUFVLEVBQ1Y7NEJBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQjs0QkFDekQsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjt5QkFDckQsRUFDRCxvQkFBb0IsQ0FDckIsQ0FBQzt3QkFDRixXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNsQywrQ0FBK0M7d0JBQy9DLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDekUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3FCQUM1Qzt5QkFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO3dCQUN2QyxNQUFNLGFBQWEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3BGLElBQUksYUFBYSxFQUFFOzRCQUNqQixXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3lCQUNuQztxQkFDRjtpQkFDRjthQUNGO1lBQ0QsT0FBTztRQUNULEtBQUssT0FBTztZQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sVUFBVSxDQUFDLFVBQVUsQ0FDL0MsS0FBSyxFQUNMO2dCQUNFLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxzQkFBc0I7Z0JBQ3pELFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUI7YUFDckQsRUFDRCxvQkFBb0IsQ0FDckIsQ0FBQztZQUNGLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEMsK0NBQStDO1lBQy9DLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxXQUFXLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDM0MsT0FBTztRQUNULEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJO1lBQ1AsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNyRSxPQUFPO1FBQ1QsS0FBSyxLQUFLO1lBQ1IsTUFBTSxhQUFhLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9FLElBQUksYUFBYSxFQUFFO2dCQUNqQixXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsT0FBTztRQUNULEtBQUssSUFBSTtZQUNQLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEMsT0FBTztLQUNWO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMzQix1Q0FBdUM7UUFDdkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsZ0RBQWdEO1lBQ2hELE1BQU0saUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3hFO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLFdBQVc7SUFDOUUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLDZDQUE2QztRQUM3QyxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDeEMsdUNBQXVDO1FBQ3ZDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixNQUFNLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRTtLQUNGO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekIsTUFBTSxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDbkU7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QixVQUFVLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsb0JBQW9CO0lBQ3BELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUzRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0RSxNQUFNLG9CQUFvQixHQUFHLE1BQU0saUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRS9GLE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xyXG5pbXBvcnQgeyBmcmFnbWVudCB9IGZyb20gJ3htbGJ1aWxkZXIyJztcclxuaW1wb3J0IFZOb2RlIGZyb20gJ3ZpcnR1YWwtZG9tL3Zub2RlL3Zub2RlJztcclxuaW1wb3J0IFZUZXh0IGZyb20gJ3ZpcnR1YWwtZG9tL3Zub2RlL3Z0ZXh0JztcclxuaW1wb3J0IGlzVk5vZGUgZnJvbSAndmlydHVhbC1kb20vdm5vZGUvaXMtdm5vZGUnO1xyXG5pbXBvcnQgaXNWVGV4dCBmcm9tICd2aXJ0dWFsLWRvbS92bm9kZS9pcy12dGV4dCc7XHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tbmFtZWQtZGVmYXVsdFxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEhUTUxUb1ZET00gfSBmcm9tICdodG1sLXRvLXZkb20nO1xyXG5pbXBvcnQgZXNjYXBlIGZyb20gJ2VzY2FwZS1odG1sJztcclxuXHJcbi8vIEZJWE1FOiByZW1vdmUgdGhlIGN5Y2xpYyBkZXBlbmRlbmN5XHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcclxuaW1wb3J0ICogYXMgeG1sQnVpbGRlciBmcm9tICcuL3htbC1idWlsZGVyJztcclxuaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSAnLi4vbmFtZXNwYWNlcyc7XHJcbmltcG9ydCB7IHZOb2RlSGFzQ2hpbGRyZW4gfSBmcm9tICcuLi91dGlscy92bm9kZSc7XHJcblxyXG5jb25zdCBjb252ZXJ0SFRNTCA9IEhUTUxUb1ZET00oe1xyXG4gIFZOb2RlLFxyXG4gIFZUZXh0LFxyXG59KTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGZpbmRYTUxFcXVpdmFsZW50KGRvY3hEb2N1bWVudEluc3RhbmNlLCB2Tm9kZSwgeG1sRnJhZ21lbnQpIHtcclxuICBpZiAoXHJcbiAgICB2Tm9kZS50YWdOYW1lID09PSAnZGl2JyAmJlxyXG4gICAgKHZOb2RlLnByb3BlcnRpZXMuYXR0cmlidXRlcy5jbGFzcyA9PT0gJ3BhZ2UtYnJlYWsnIHx8XHJcbiAgICAgICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3BhZ2UtYnJlYWstYWZ0ZXInXSkpXHJcbiAgKSB7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgICAgLmVsZSgnQHcnLCAncCcpXHJcbiAgICAgIC5lbGUoJ0B3JywgJ3InKVxyXG4gICAgICAuZWxlKCdAdycsICdicicpXHJcbiAgICAgIC5hdHQoJ0B3JywgJ3R5cGUnLCAncGFnZScpXHJcbiAgICAgIC51cCgpXHJcbiAgICAgIC51cCgpXHJcbiAgICAgIC51cCgpO1xyXG5cclxuICAgIHhtbEZyYWdtZW50LmltcG9ydChwYXJhZ3JhcGhGcmFnbWVudCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHZOb2RlLnRhZ05hbWUpIHtcclxuICAgIGNhc2UgJ2gxJzpcclxuICAgIGNhc2UgJ2gyJzpcclxuICAgIGNhc2UgJ2gzJzpcclxuICAgIGNhc2UgJ2g0JzpcclxuICAgIGNhc2UgJ2g1JzpcclxuICAgIGNhc2UgJ2g2JzpcclxuICAgICAgY29uc3QgaGVhZGluZ0ZyYWdtZW50ID0gYXdhaXQgeG1sQnVpbGRlci5idWlsZFBhcmFncmFwaChcclxuICAgICAgICB2Tm9kZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXJhZ3JhcGhTdHlsZTogYEhlYWRpbmcke3ZOb2RlLnRhZ05hbWVbMV19YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhtbEZyYWdtZW50LmltcG9ydChoZWFkaW5nRnJhZ21lbnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICBjYXNlICdzcGFuJzpcclxuICAgIGNhc2UgJ3N0cm9uZyc6XHJcbiAgICBjYXNlICdiJzpcclxuICAgIGNhc2UgJ2VtJzpcclxuICAgIGNhc2UgJ2knOlxyXG4gICAgY2FzZSAndSc6XHJcbiAgICBjYXNlICdpbnMnOlxyXG4gICAgY2FzZSAnc3RyaWtlJzpcclxuICAgIGNhc2UgJ2RlbCc6XHJcbiAgICBjYXNlICdzJzpcclxuICAgIGNhc2UgJ3N1Yic6XHJcbiAgICBjYXNlICdzdXAnOlxyXG4gICAgY2FzZSAnbWFyayc6XHJcbiAgICBjYXNlICdwJzpcclxuICAgIGNhc2UgJ2EnOlxyXG4gICAgY2FzZSAnYmxvY2txdW90ZSc6XHJcbiAgICBjYXNlICdjb2RlJzpcclxuICAgIGNhc2UgJ3ByZSc6XHJcbiAgICAgIGNvbnN0IHBhcmFncmFwaEZyYWdtZW50ID0gYXdhaXQgeG1sQnVpbGRlci5idWlsZFBhcmFncmFwaCh2Tm9kZSwge30sIGRvY3hEb2N1bWVudEluc3RhbmNlKTtcclxuICAgICAgeG1sRnJhZ21lbnQuaW1wb3J0KHBhcmFncmFwaEZyYWdtZW50KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY2FzZSAnZmlndXJlJzpcclxuICAgICAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRWTm9kZSA9IHZOb2RlLmNoaWxkcmVuW2luZGV4XTtcclxuICAgICAgICAgIGlmIChjaGlsZFZOb2RlLnRhZ05hbWUgPT09ICd0YWJsZScpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVGcmFnbWVudCA9IGF3YWl0IHhtbEJ1aWxkZXIuYnVpbGRUYWJsZShcclxuICAgICAgICAgICAgICBjaGlsZFZOb2RlLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG1heGltdW1XaWR0aDogZG9jeERvY3VtZW50SW5zdGFuY2UuYXZhaWxhYmxlRG9jdW1lbnRTcGFjZSxcclxuICAgICAgICAgICAgICAgIHJvd0NhbnRTcGxpdDogZG9jeERvY3VtZW50SW5zdGFuY2UudGFibGVSb3dDYW50U3BsaXQsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB4bWxGcmFnbWVudC5pbXBvcnQodGFibGVGcmFnbWVudCk7XHJcbiAgICAgICAgICAgIC8vIEFkZGluZyBlbXB0eSBwYXJhZ3JhcGggZm9yIHNwYWNlIGFmdGVyIHRhYmxlXHJcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5UGFyYWdyYXBoRnJhZ21lbnQgPSBhd2FpdCB4bWxCdWlsZGVyLmJ1aWxkUGFyYWdyYXBoKG51bGwsIHt9KTtcclxuICAgICAgICAgICAgeG1sRnJhZ21lbnQuaW1wb3J0KGVtcHR5UGFyYWdyYXBoRnJhZ21lbnQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFZOb2RlLnRhZ05hbWUgPT09ICdpbWcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRnJhZ21lbnQgPSBhd2FpdCB4bWxCdWlsZGVyLmJ1aWxkSW1hZ2UoZG9jeERvY3VtZW50SW5zdGFuY2UsIGNoaWxkVk5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaW1hZ2VGcmFnbWVudCkge1xyXG4gICAgICAgICAgICAgIHhtbEZyYWdtZW50LmltcG9ydChpbWFnZUZyYWdtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgIGNvbnN0IHRhYmxlRnJhZ21lbnQgPSBhd2FpdCB4bWxCdWlsZGVyLmJ1aWxkVGFibGUoXHJcbiAgICAgICAgdk5vZGUsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWF4aW11bVdpZHRoOiBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlLFxyXG4gICAgICAgICAgcm93Q2FudFNwbGl0OiBkb2N4RG9jdW1lbnRJbnN0YW5jZS50YWJsZVJvd0NhbnRTcGxpdCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhtbEZyYWdtZW50LmltcG9ydCh0YWJsZUZyYWdtZW50KTtcclxuICAgICAgLy8gQWRkaW5nIGVtcHR5IHBhcmFncmFwaCBmb3Igc3BhY2UgYWZ0ZXIgdGFibGVcclxuICAgICAgY29uc3QgZW1wdHlQYXJhZ3JhcGhGcmFnbWVudCA9IGF3YWl0IHhtbEJ1aWxkZXIuYnVpbGRQYXJhZ3JhcGgobnVsbCwge30pO1xyXG4gICAgICB4bWxGcmFnbWVudC5pbXBvcnQoZW1wdHlQYXJhZ3JhcGhGcmFnbWVudCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIGNhc2UgJ29sJzpcclxuICAgIGNhc2UgJ3VsJzpcclxuICAgICAgYXdhaXQgeG1sQnVpbGRlci5idWlsZExpc3Qodk5vZGUsIGRvY3hEb2N1bWVudEluc3RhbmNlLCB4bWxGcmFnbWVudCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIGNhc2UgJ2ltZyc6XHJcbiAgICAgIGNvbnN0IGltYWdlRnJhZ21lbnQgPSBhd2FpdCB4bWxCdWlsZGVyLmJ1aWxkSW1hZ2UoZG9jeERvY3VtZW50SW5zdGFuY2UsIHZOb2RlKTtcclxuICAgICAgaWYgKGltYWdlRnJhZ21lbnQpIHtcclxuICAgICAgICB4bWxGcmFnbWVudC5pbXBvcnQoaW1hZ2VGcmFnbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgY2FzZSAnYnInOlxyXG4gICAgICBjb25zdCBsaW5lYnJlYWtGcmFnbWVudCA9IGF3YWl0IHhtbEJ1aWxkZXIuYnVpbGRQYXJhZ3JhcGgobnVsbCwge30pO1xyXG4gICAgICB4bWxGcmFnbWVudC5pbXBvcnQobGluZWJyZWFrRnJhZ21lbnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmICh2Tm9kZUhhc0NoaWxkcmVuKHZOb2RlKSkge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdk5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkVk5vZGUgPSB2Tm9kZS5jaGlsZHJlbltpbmRleF07XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxyXG4gICAgICBhd2FpdCBjb252ZXJ0VlRyZWVUb1hNTChkb2N4RG9jdW1lbnRJbnN0YW5jZSwgY2hpbGRWTm9kZSwgeG1sRnJhZ21lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VlRyZWVUb1hNTChkb2N4RG9jdW1lbnRJbnN0YW5jZSwgdlRyZWUsIHhtbEZyYWdtZW50KSB7XHJcbiAgaWYgKCF2VHJlZSkge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtcmV0dXJuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIGlmIChBcnJheS5pc0FycmF5KHZUcmVlKSAmJiB2VHJlZS5sZW5ndGgpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZUcmVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCB2Tm9kZSA9IHZUcmVlW2luZGV4XTtcclxuICAgICAgYXdhaXQgY29udmVydFZUcmVlVG9YTUwoZG9jeERvY3VtZW50SW5zdGFuY2UsIHZOb2RlLCB4bWxGcmFnbWVudCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc1ZOb2RlKHZUcmVlKSkge1xyXG4gICAgYXdhaXQgZmluZFhNTEVxdWl2YWxlbnQoZG9jeERvY3VtZW50SW5zdGFuY2UsIHZUcmVlLCB4bWxGcmFnbWVudCk7XHJcbiAgfSBlbHNlIGlmIChpc1ZUZXh0KHZUcmVlKSkge1xyXG4gICAgeG1sQnVpbGRlci5idWlsZFRleHRFbGVtZW50KHhtbEZyYWdtZW50LCBlc2NhcGUoU3RyaW5nKHZUcmVlLnRleHQpKSk7XHJcbiAgfVxyXG4gIHJldHVybiB4bWxGcmFnbWVudDtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyRG9jdW1lbnRGaWxlKGRvY3hEb2N1bWVudEluc3RhbmNlKSB7XHJcbiAgY29uc3QgdlRyZWUgPSBjb252ZXJ0SFRNTChkb2N4RG9jdW1lbnRJbnN0YW5jZS5odG1sU3RyaW5nKTtcclxuXHJcbiAgY29uc3QgeG1sRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pO1xyXG5cclxuICBjb25zdCBwb3B1bGF0ZWRYbWxGcmFnbWVudCA9IGF3YWl0IGNvbnZlcnRWVHJlZVRvWE1MKGRvY3hEb2N1bWVudEluc3RhbmNlLCB2VHJlZSwgeG1sRnJhZ21lbnQpO1xyXG5cclxuICByZXR1cm4gcG9wdWxhdGVkWG1sRnJhZ21lbnQ7XHJcbn1cclxuXHJcbmV4cG9ydCB7IHJlbmRlckRvY3VtZW50RmlsZSB9O1xyXG4iXX0=