@bryntum/taskboard-angular 7.1.1

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 (156) hide show
  1. package/README.md +44 -0
  2. package/bryntum-taskboard-angular.d.ts +5 -0
  3. package/bundles/bryntum-taskboard-angular.umd.js +56826 -0
  4. package/bundles/bryntum-taskboard-angular.umd.js.map +1 -0
  5. package/esm2015/bryntum-taskboard-angular.js +5 -0
  6. package/esm2015/lib/bryntum-button-group.component.js +725 -0
  7. package/esm2015/lib/bryntum-button.component.js +715 -0
  8. package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
  9. package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
  10. package/esm2015/lib/bryntum-checkbox.component.js +805 -0
  11. package/esm2015/lib/bryntum-chip-view.component.js +727 -0
  12. package/esm2015/lib/bryntum-code-editor.component.js +818 -0
  13. package/esm2015/lib/bryntum-color-field.component.js +794 -0
  14. package/esm2015/lib/bryntum-column-combo.component.js +936 -0
  15. package/esm2015/lib/bryntum-column-filter-field.component.js +799 -0
  16. package/esm2015/lib/bryntum-column-picker-button.component.js +719 -0
  17. package/esm2015/lib/bryntum-column-scroll-button.component.js +719 -0
  18. package/esm2015/lib/bryntum-combo.component.js +932 -0
  19. package/esm2015/lib/bryntum-container.component.js +681 -0
  20. package/esm2015/lib/bryntum-date-field.component.js +831 -0
  21. package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
  22. package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
  23. package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
  24. package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
  25. package/esm2015/lib/bryntum-demo-header.component.js +171 -0
  26. package/esm2015/lib/bryntum-display-field.component.js +772 -0
  27. package/esm2015/lib/bryntum-duration-field.component.js +815 -0
  28. package/esm2015/lib/bryntum-editor.component.js +823 -0
  29. package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
  30. package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
  31. package/esm2015/lib/bryntum-field-set.component.js +810 -0
  32. package/esm2015/lib/bryntum-file-field.component.js +776 -0
  33. package/esm2015/lib/bryntum-file-picker.component.js +709 -0
  34. package/esm2015/lib/bryntum-filter-field.component.js +803 -0
  35. package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
  36. package/esm2015/lib/bryntum-hint.component.js +856 -0
  37. package/esm2015/lib/bryntum-label.component.js +584 -0
  38. package/esm2015/lib/bryntum-list.component.js +715 -0
  39. package/esm2015/lib/bryntum-menu.component.js +883 -0
  40. package/esm2015/lib/bryntum-month-picker.component.js +818 -0
  41. package/esm2015/lib/bryntum-number-field.component.js +800 -0
  42. package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
  43. package/esm2015/lib/bryntum-panel.component.js +794 -0
  44. package/esm2015/lib/bryntum-password-field.component.js +768 -0
  45. package/esm2015/lib/bryntum-project-combo.component.js +940 -0
  46. package/esm2015/lib/bryntum-radio-group.component.js +826 -0
  47. package/esm2015/lib/bryntum-radio.component.js +805 -0
  48. package/esm2015/lib/bryntum-resources-combo.component.js +936 -0
  49. package/esm2015/lib/bryntum-scheduler-project-combo.component.js +936 -0
  50. package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
  51. package/esm2015/lib/bryntum-slider.component.js +661 -0
  52. package/esm2015/lib/bryntum-splitter.component.js +618 -0
  53. package/esm2015/lib/bryntum-swimlane-combo.component.js +936 -0
  54. package/esm2015/lib/bryntum-swimlane-filter-field.component.js +807 -0
  55. package/esm2015/lib/bryntum-swimlane-picker-button.component.js +719 -0
  56. package/esm2015/lib/bryntum-swimlane-scroll-button.component.js +719 -0
  57. package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
  58. package/esm2015/lib/bryntum-tag-combo.component.js +940 -0
  59. package/esm2015/lib/bryntum-task-board-base.component.js +1678 -0
  60. package/esm2015/lib/bryntum-task-board-field-filter-picker-group.component.js +762 -0
  61. package/esm2015/lib/bryntum-task-board-field-filter-picker.component.js +732 -0
  62. package/esm2015/lib/bryntum-task-board-project-model.component.js +690 -0
  63. package/esm2015/lib/bryntum-task-board.component.js +1682 -0
  64. package/esm2015/lib/bryntum-task-color-combo.component.js +794 -0
  65. package/esm2015/lib/bryntum-task-filter-field.component.js +807 -0
  66. package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
  67. package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
  68. package/esm2015/lib/bryntum-text-field.component.js +783 -0
  69. package/esm2015/lib/bryntum-time-field.component.js +819 -0
  70. package/esm2015/lib/bryntum-time-picker.component.js +709 -0
  71. package/esm2015/lib/bryntum-todo-list-field.component.js +780 -0
  72. package/esm2015/lib/bryntum-toolbar.component.js +732 -0
  73. package/esm2015/lib/bryntum-undo-redo.component.js +689 -0
  74. package/esm2015/lib/bryntum-widget.component.js +580 -0
  75. package/esm2015/lib/bryntum-year-picker.component.js +827 -0
  76. package/esm2015/lib/bryntum-zoom-slider.component.js +665 -0
  77. package/esm2015/lib/taskboard.module.js +374 -0
  78. package/esm2015/lib/wrapper.helper.js +74 -0
  79. package/esm2015/public-api.js +76 -0
  80. package/fesm2015/bryntum-taskboard-angular.js +56188 -0
  81. package/fesm2015/bryntum-taskboard-angular.js.map +1 -0
  82. package/lib/bryntum-button-group.component.d.ts +860 -0
  83. package/lib/bryntum-button.component.d.ts +845 -0
  84. package/lib/bryntum-chat-panel.component.d.ts +1060 -0
  85. package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
  86. package/lib/bryntum-checkbox.component.d.ts +968 -0
  87. package/lib/bryntum-chip-view.component.d.ts +872 -0
  88. package/lib/bryntum-code-editor.component.d.ts +1045 -0
  89. package/lib/bryntum-color-field.component.d.ts +965 -0
  90. package/lib/bryntum-column-combo.component.d.ts +1208 -0
  91. package/lib/bryntum-column-filter-field.component.d.ts +988 -0
  92. package/lib/bryntum-column-picker-button.component.d.ts +853 -0
  93. package/lib/bryntum-column-scroll-button.component.d.ts +853 -0
  94. package/lib/bryntum-combo.component.d.ts +1199 -0
  95. package/lib/bryntum-container.component.d.ts +822 -0
  96. package/lib/bryntum-date-field.component.d.ts +1025 -0
  97. package/lib/bryntum-date-picker.component.d.ts +1338 -0
  98. package/lib/bryntum-date-range-field.component.d.ts +1027 -0
  99. package/lib/bryntum-date-time-field.component.d.ts +912 -0
  100. package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
  101. package/lib/bryntum-demo-header.component.d.ts +29 -0
  102. package/lib/bryntum-display-field.component.d.ts +949 -0
  103. package/lib/bryntum-duration-field.component.d.ts +1008 -0
  104. package/lib/bryntum-editor.component.d.ts +969 -0
  105. package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
  106. package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
  107. package/lib/bryntum-field-set.component.d.ts +1038 -0
  108. package/lib/bryntum-file-field.component.d.ts +952 -0
  109. package/lib/bryntum-file-picker.component.d.ts +847 -0
  110. package/lib/bryntum-filter-field.component.d.ts +993 -0
  111. package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
  112. package/lib/bryntum-hint.component.d.ts +1117 -0
  113. package/lib/bryntum-label.component.d.ts +683 -0
  114. package/lib/bryntum-list.component.d.ts +849 -0
  115. package/lib/bryntum-menu.component.d.ts +1129 -0
  116. package/lib/bryntum-month-picker.component.d.ts +1034 -0
  117. package/lib/bryntum-number-field.component.d.ts +995 -0
  118. package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
  119. package/lib/bryntum-panel.component.d.ts +1015 -0
  120. package/lib/bryntum-password-field.component.d.ts +939 -0
  121. package/lib/bryntum-project-combo.component.d.ts +1209 -0
  122. package/lib/bryntum-radio-group.component.d.ts +1068 -0
  123. package/lib/bryntum-radio.component.d.ts +968 -0
  124. package/lib/bryntum-resources-combo.component.d.ts +1207 -0
  125. package/lib/bryntum-scheduler-project-combo.component.d.ts +1201 -0
  126. package/lib/bryntum-slide-toggle.component.d.ts +968 -0
  127. package/lib/bryntum-slider.component.d.ts +776 -0
  128. package/lib/bryntum-splitter.component.d.ts +714 -0
  129. package/lib/bryntum-swimlane-combo.component.d.ts +1207 -0
  130. package/lib/bryntum-swimlane-filter-field.component.d.ts +1001 -0
  131. package/lib/bryntum-swimlane-picker-button.component.d.ts +853 -0
  132. package/lib/bryntum-swimlane-scroll-button.component.d.ts +853 -0
  133. package/lib/bryntum-tab-panel.component.d.ts +1065 -0
  134. package/lib/bryntum-tag-combo.component.d.ts +1212 -0
  135. package/lib/bryntum-task-board-base.component.d.ts +1921 -0
  136. package/lib/bryntum-task-board-field-filter-picker-group.component.d.ts +941 -0
  137. package/lib/bryntum-task-board-field-filter-picker.component.d.ts +889 -0
  138. package/lib/bryntum-task-board-project-model.component.d.ts +732 -0
  139. package/lib/bryntum-task-board.component.d.ts +1923 -0
  140. package/lib/bryntum-task-color-combo.component.d.ts +965 -0
  141. package/lib/bryntum-task-filter-field.component.d.ts +1001 -0
  142. package/lib/bryntum-text-area-field.component.d.ts +951 -0
  143. package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
  144. package/lib/bryntum-text-field.component.d.ts +957 -0
  145. package/lib/bryntum-time-field.component.d.ts +1006 -0
  146. package/lib/bryntum-time-picker.component.d.ts +853 -0
  147. package/lib/bryntum-todo-list-field.component.d.ts +955 -0
  148. package/lib/bryntum-toolbar.component.d.ts +879 -0
  149. package/lib/bryntum-undo-redo.component.d.ts +831 -0
  150. package/lib/bryntum-widget.component.d.ts +678 -0
  151. package/lib/bryntum-year-picker.component.d.ts +1049 -0
  152. package/lib/bryntum-zoom-slider.component.d.ts +784 -0
  153. package/lib/taskboard.module.d.ts +77 -0
  154. package/lib/wrapper.helper.d.ts +26 -0
  155. package/package.json +33 -0
  156. package/public-api.d.ts +72 -0
@@ -0,0 +1,171 @@
1
+ import { __awaiter } from "tslib";
2
+ /**
3
+ * Angular wrapper for Bryntum Demo Header
4
+ */
5
+ import { Component, ViewChild } from '@angular/core';
6
+ import { CSSHelper, DemoCodeEditor, AjaxHelper } from '@bryntum/taskboard';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./bryntum-button.component";
9
+ import * as i2 from "./bryntum-fullscreen-button.component";
10
+ export class BryntumDemoHeaderComponent {
11
+ constructor() {
12
+ var _a;
13
+ this.title = document.title.split(' - ')[1] || document.title;
14
+ this.isTest = document.location.search.includes('test');
15
+ this.isIonic = document.location.href.includes('/ionic/');
16
+ this.demoProduct = ((_a = document.location.href.match(/\/(\w+)(-trial)?\/[-\w]*examples\//)) === null || _a === void 0 ? void 0 : _a[1].toLowerCase()) || 'taskboard';
17
+ this.downloadLink = `https://bryntum.com/download/?product=${this.demoProduct}`;
18
+ this.link = '';
19
+ this.appFolder = this.isIonic ? '../' : '../../';
20
+ this.hiddenEditor = !Boolean(DemoCodeEditor.monacoCodePath);
21
+ this.tooltip = {
22
+ html: 'L{codeButton}',
23
+ align: 't100-b100'
24
+ };
25
+ }
26
+ ngOnInit() {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ // Convert:
29
+ // https://bryntum.com/products/schedulerpro/examples-scheduler/frameworks/angular/basic/dist/basic/
30
+ // https://bryntum.com/products/schedulerpro/examples/frameworks/angular/basic/dist/basic/
31
+ // To:
32
+ // https://bryntum.com/products/schedulerpro/examples/#example-examples-scheduler-frameworks-angular-basic
33
+ // https://bryntum.com/products/schedulerpro/examples/#example-frameworks-angular-basic
34
+ const match = /(.*?\/)(examples.*?\/frameworks\/.*?)\/dist/.exec(document.location.href);
35
+ this.link = match ? `${match[1]}examples/#example-${match[2].replace(/\//gm, '-').replace('examples-frameworks', 'frameworks')}` : '#';
36
+ if (!this.hiddenEditor) {
37
+ CSSHelper.insertRule('body { flex-flow : row !important }');
38
+ CSSHelper.insertRule('app-root { flex : 1 !important; overflow : hidden !important }');
39
+ if (this.isIonic) {
40
+ CSSHelper.insertRule('app-root { flex-direction : row !important }');
41
+ CSSHelper.insertRule('ion-app { position : relative !important; flex : 1; overflow : hidden !important }');
42
+ }
43
+ const appConfig = (yield AjaxHelper.get(`${this.appFolder}app.config.json`, { parseJson: true })).parsedJson;
44
+ if (appConfig.zip || this.isTest) {
45
+ const downloadButton = this.downloadButton.instance;
46
+ downloadButton.hidden = false;
47
+ downloadButton.href = `${this.appFolder}${appConfig.zip}`;
48
+ }
49
+ }
50
+ // Enables special styling when generating screenshots
51
+ const params = new URLSearchParams(window.location.search);
52
+ if (params.has('screenshot')) {
53
+ document.body.classList.add('b-screenshot');
54
+ if (window.bryntum) {
55
+ window.bryntum.noAnimations = true;
56
+ }
57
+ }
58
+ });
59
+ }
60
+ copyShadowRootStyle() {
61
+ var _a, _b;
62
+ const shadowRootStyle = (_b = (_a = document.querySelector('app-root')) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('style');
63
+ if (shadowRootStyle) {
64
+ document.head.appendChild(shadowRootStyle.cloneNode(true));
65
+ }
66
+ }
67
+ toggleCodeEditor() {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ if (!this.codeEditor) {
70
+ this.copyShadowRootStyle();
71
+ }
72
+ this.codeEditor = yield DemoCodeEditor.toggleCodeEditor(this.codeEditor, this.codeButton.instance, {
73
+ appendTo: this.isIonic ? document.querySelector('app-root') : document.body,
74
+ appFolder: this.appFolder,
75
+ preferredSources: [
76
+ /\w+\.component\.ts/,
77
+ /\w+\.config\.ts/
78
+ ]
79
+ });
80
+ });
81
+ }
82
+ }
83
+ BryntumDemoHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDemoHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
+ BryntumDemoHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDemoHeaderComponent, selector: "bryntum-demo-header", viewQueries: [{ propertyName: "codeButton", first: true, predicate: ["code"], descendants: true }, { propertyName: "downloadButton", first: true, predicate: ["download"], descendants: true }], ngImport: i0, template: `
85
+ <header class="demo-header b-bryntum">
86
+ <a id="title" class="title" href="{{ link }}">
87
+ <h1>
88
+ <svg viewBox="0 0 354.9 144.52" xmlns="http://www.w3.org/2000/svg">
89
+ <g><path d="m305.63 144.52c-12.47 0-23.53-4.83-31.58-13.28v11.06h-25.54v-142.3h26.75v48.58c7.84-7.64 18.5-12.07 30.37-12.07 27.15 0 49.28 23.33 49.28 54.1s-22.12 53.9-49.28 53.9zm-3.82-83.47c-14.68 0-26.55 13.27-26.55 29.77s11.87 29.16 26.55 29.16 26.55-12.67 26.55-29.16-11.87-29.77-26.55-29.77z"/><path d="m148.02 0h74.01v29.78h-74.01z"/><path d="m0 56.26h222.03v29.78h-222.03z"/><path d="m74.01 112.52h148.02v29.6h-148.02z"/></g>
90
+ </svg>
91
+ {{ title }}
92
+ </h1>
93
+ </a>
94
+ <ng-content></ng-content>
95
+ <div id="tools" class="tools">
96
+ <bryntum-button
97
+ text="Download Trial"
98
+ href="{{ downloadLink }}"
99
+ rendition="filled"
100
+ style="margin-inline-end: .5em"
101
+ ></bryntum-button>
102
+ <bryntum-button
103
+ #code
104
+ icon="b-icon-code"
105
+ tooltip="Click to show the code viewer"
106
+ rendition="text"
107
+ [hidden]="hiddenEditor"
108
+ (onClick)="toggleCodeEditor()"
109
+ ></bryntum-button>
110
+ <bryntum-button
111
+ #download
112
+ icon="b-icon-download"
113
+ tooltip="Download this demo zip archive"
114
+ rendition="text"
115
+ href='#'
116
+ [hidden]="true"
117
+ ></bryntum-button>
118
+ <bryntum-fullscreen-button></bryntum-fullscreen-button>
119
+ </div>
120
+ </header>`, isInline: true, components: [{ type: i1.BryntumButtonComponent, selector: "bryntum-button", inputs: ["adopt", "align", "anchor", "ariaDescription", "ariaLabel", "bubbleEvents", "centered", "color", "config", "constrainTo", "contentElementCls", "dataField", "defaultBindProperty", "detectCSSCompatibilityIssues", "dock", "draggable", "elementAttributes", "floating", "hideAnimation", "htmlCls", "ignoreParentReadOnly", "listeners", "localeClass", "localizable", "localizableProperties", "maskDefaults", "masked", "monitorResize", "owner", "positioned", "preventTooltipOnTouch", "relayStoreEvents", "ripple", "rootElement", "scrollAction", "showAnimation", "showTooltipWhenDisabled", "supportsPressedClick", "tab", "tag", "textAlign", "title", "type", "ui", "weight", "alignSelf", "appendTo", "badge", "behaviorType", "callOnFunctions", "catchEventHandlerExceptions", "cls", "column", "content", "dataset", "disabled", "extraData", "flex", "height", "hidden", "href", "html", "icon", "iconAlign", "id", "insertBefore", "insertFirst", "keyMap", "margin", "maxHeight", "maximizeOnMobile", "maxWidth", "menu", "menuIcon", "minHeight", "minWidth", "pressed", "pressedCls", "pressedIcon", "readOnly", "rendition", "rtl", "scrollable", "span", "split", "tabIndex", "target", "text", "toggleable", "toggleGroup", "tooltip", "width", "x", "y", "anchorSize", "focusVisible", "parent"], outputs: ["onAction", "onBeforeDestroy", "onBeforeHide", "onBeforeShow", "onBeforeShowMenu", "onBeforeToggle", "onCatchAll", "onClick", "onDestroy", "onElementCreated", "onFocusIn", "onFocusOut", "onHide", "onPaint", "onReadOnly", "onRecompose", "onResize", "onShow", "onToggle"] }, { type: i2.BryntumFullscreenButtonComponent, selector: "bryntum-fullscreen-button" }] });
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDemoHeaderComponent, decorators: [{
122
+ type: Component,
123
+ args: [{
124
+ selector: 'bryntum-demo-header',
125
+ template: `
126
+ <header class="demo-header b-bryntum">
127
+ <a id="title" class="title" href="{{ link }}">
128
+ <h1>
129
+ <svg viewBox="0 0 354.9 144.52" xmlns="http://www.w3.org/2000/svg">
130
+ <g><path d="m305.63 144.52c-12.47 0-23.53-4.83-31.58-13.28v11.06h-25.54v-142.3h26.75v48.58c7.84-7.64 18.5-12.07 30.37-12.07 27.15 0 49.28 23.33 49.28 54.1s-22.12 53.9-49.28 53.9zm-3.82-83.47c-14.68 0-26.55 13.27-26.55 29.77s11.87 29.16 26.55 29.16 26.55-12.67 26.55-29.16-11.87-29.77-26.55-29.77z"/><path d="m148.02 0h74.01v29.78h-74.01z"/><path d="m0 56.26h222.03v29.78h-222.03z"/><path d="m74.01 112.52h148.02v29.6h-148.02z"/></g>
131
+ </svg>
132
+ {{ title }}
133
+ </h1>
134
+ </a>
135
+ <ng-content></ng-content>
136
+ <div id="tools" class="tools">
137
+ <bryntum-button
138
+ text="Download Trial"
139
+ href="{{ downloadLink }}"
140
+ rendition="filled"
141
+ style="margin-inline-end: .5em"
142
+ ></bryntum-button>
143
+ <bryntum-button
144
+ #code
145
+ icon="b-icon-code"
146
+ tooltip="Click to show the code viewer"
147
+ rendition="text"
148
+ [hidden]="hiddenEditor"
149
+ (onClick)="toggleCodeEditor()"
150
+ ></bryntum-button>
151
+ <bryntum-button
152
+ #download
153
+ icon="b-icon-download"
154
+ tooltip="Download this demo zip archive"
155
+ rendition="text"
156
+ href='#'
157
+ [hidden]="true"
158
+ ></bryntum-button>
159
+ <bryntum-fullscreen-button></bryntum-fullscreen-button>
160
+ </div>
161
+ </header>`,
162
+ styles: []
163
+ }]
164
+ }], propDecorators: { codeButton: [{
165
+ type: ViewChild,
166
+ args: ['code', { static: false }]
167
+ }], downloadButton: [{
168
+ type: ViewChild,
169
+ args: ['download', { static: false }]
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kZW1vLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLWRlbW8taGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQTZDM0UsTUFBTSxPQUFPLDBCQUEwQjtJQTFDdkM7O1FBaURJLFVBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRXpELFdBQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsWUFBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRCxnQkFBVyxHQUFHLENBQUEsTUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsMENBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFJLFdBQVcsQ0FBQztRQUVuSCxpQkFBWSxHQUFHLHlDQUF5QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFM0UsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLGNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxpQkFBWSxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV2RCxZ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Q0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDcEYsU0FBUyxFQUFVLElBQUksQ0FBQyxTQUFTO2dCQUNqQyxnQkFBZ0IsRUFBRztvQkFDZixvQkFBb0I7b0JBQ3BCLGlCQUFpQjtpQkFDcEI7YUFDSixDQUNKLENBQUM7UUFDTixDQUFDO0tBQUE7O3VIQXpGUSwwQkFBMEI7MkdBQTFCLDBCQUEwQiw0UEF4Q3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBb0NHOzJGQUlMLDBCQUEwQjtrQkExQ3RDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFHLHFCQUFxQjtvQkFDaEMsUUFBUSxFQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBb0NHO29CQUNkLE1BQU0sRUFBRyxFQUNSO2lCQUNKOzhCQUcwQyxVQUFVO3NCQUFoRCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRyxLQUFLLEVBQUU7Z0JBQ00sY0FBYztzQkFBeEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUcsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gRGVtbyBIZWFkZXJcbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ1NTSGVscGVyLCBEZW1vQ29kZUVkaXRvciwgQWpheEhlbHBlciB9IGZyb20gJ0BicnludHVtL3Rhc2tib2FyZCc7XG5pbXBvcnQgeyBCcnludHVtQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9icnludHVtLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLWRlbW8taGVhZGVyJyxcbiAgICB0ZW1wbGF0ZSA6IGBcbiAgICAgICAgPGhlYWRlciBjbGFzcz1cImRlbW8taGVhZGVyIGItYnJ5bnR1bVwiPlxuICAgICAgICAgICAgPGEgaWQ9XCJ0aXRsZVwiIGNsYXNzPVwidGl0bGVcIiBocmVmPVwie3sgbGluayB9fVwiPlxuICAgICAgICAgICAgICAgIDxoMT5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDM1NC45IDE0NC41MlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxnPjxwYXRoIGQ9XCJtMzA1LjYzIDE0NC41MmMtMTIuNDcgMC0yMy41My00LjgzLTMxLjU4LTEzLjI4djExLjA2aC0yNS41NHYtMTQyLjNoMjYuNzV2NDguNThjNy44NC03LjY0IDE4LjUtMTIuMDcgMzAuMzctMTIuMDcgMjcuMTUgMCA0OS4yOCAyMy4zMyA0OS4yOCA1NC4xcy0yMi4xMiA1My45LTQ5LjI4IDUzLjl6bS0zLjgyLTgzLjQ3Yy0xNC42OCAwLTI2LjU1IDEzLjI3LTI2LjU1IDI5Ljc3czExLjg3IDI5LjE2IDI2LjU1IDI5LjE2IDI2LjU1LTEyLjY3IDI2LjU1LTI5LjE2LTExLjg3LTI5Ljc3LTI2LjU1LTI5Ljc3elwiLz48cGF0aCBkPVwibTE0OC4wMiAwaDc0LjAxdjI5Ljc4aC03NC4wMXpcIi8+PHBhdGggZD1cIm0wIDU2LjI2aDIyMi4wM3YyOS43OGgtMjIyLjAzelwiLz48cGF0aCBkPVwibTc0LjAxIDExMi41MmgxNDguMDJ2MjkuNmgtMTQ4LjAyelwiLz48L2c+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGlkPVwidG9vbHNcIiBjbGFzcz1cInRvb2xzXCI+XG4gICAgICAgICAgICAgICAgPGJyeW50dW0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJEb3dubG9hZCBUcmlhbFwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBkb3dubG9hZExpbmsgfX1cIlxuICAgICAgICAgICAgICAgICAgICByZW5kaXRpb249XCJmaWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1pbmxpbmUtZW5kOiAuNWVtXCJcbiAgICAgICAgICAgICAgICA+PC9icnludHVtLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnJ5bnR1bS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgI2NvZGVcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImItaWNvbi1jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cIkNsaWNrIHRvIHNob3cgdGhlIGNvZGUgdmlld2VyXCJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGl0aW9uPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuRWRpdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlQ29kZUVkaXRvcigpXCJcbiAgICAgICAgICAgICAgICA+PC9icnludHVtLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnJ5bnR1bS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgI2Rvd25sb2FkXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJiLWljb24tZG93bmxvYWRcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwiRG93bmxvYWQgdGhpcyBkZW1vIHppcCBhcmNoaXZlXCJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGl0aW9uPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9JyMnXG4gICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvYnJ5bnR1bS1idXR0b24+XG4gICAgICAgICAgICAgICAgPGJyeW50dW0tZnVsbHNjcmVlbi1idXR0b24+PC9icnludHVtLWZ1bGxzY3JlZW4tYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPmAsXG4gICAgc3R5bGVzIDogW1xuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bURlbW9IZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQFZpZXdDaGlsZCgnY29kZScsIHsgc3RhdGljIDogZmFsc2UgfSkgY29kZUJ1dHRvbiE6IEJyeW50dW1CdXR0b25Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZG93bmxvYWQnLCB7IHN0YXRpYyA6IGZhbHNlIH0pIGRvd25sb2FkQnV0dG9uITogQnJ5bnR1bUJ1dHRvbkNvbXBvbmVudDtcblxuICAgIGNvZGVFZGl0b3I/OiBEZW1vQ29kZUVkaXRvcjtcblxuICAgIHRpdGxlID0gZG9jdW1lbnQudGl0bGUuc3BsaXQoJyAtICcpWzFdIHx8IGRvY3VtZW50LnRpdGxlO1xuXG4gICAgaXNUZXN0ID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmluY2x1ZGVzKCd0ZXN0Jyk7XG5cbiAgICBpc0lvbmljID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL2lvbmljLycpO1xuXG4gICAgZGVtb1Byb2R1Y3QgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLm1hdGNoKC9cXC8oXFx3KykoLXRyaWFsKT9cXC9bLVxcd10qZXhhbXBsZXNcXC8vKT8uWzFdLnRvTG93ZXJDYXNlKCkgfHwgJ3Rhc2tib2FyZCc7XG5cbiAgICBkb3dubG9hZExpbmsgPSBgaHR0cHM6Ly9icnludHVtLmNvbS9kb3dubG9hZC8/cHJvZHVjdD0ke3RoaXMuZGVtb1Byb2R1Y3R9YDtcblxuICAgIGxpbmsgPSAnJztcblxuICAgIGFwcEZvbGRlciA9IHRoaXMuaXNJb25pYyA/ICcuLi8nIDogJy4uLy4uLyc7XG5cbiAgICBoaWRkZW5FZGl0b3IgPSAhQm9vbGVhbihEZW1vQ29kZUVkaXRvci5tb25hY29Db2RlUGF0aCk7XG5cbiAgICB0b29sdGlwID0ge1xuICAgICAgICBodG1sICA6ICdMe2NvZGVCdXR0b259JyxcbiAgICAgICAgYWxpZ24gOiAndDEwMC1iMTAwJ1xuICAgIH07XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gQ29udmVydDpcbiAgICAgICAgLy8gaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXJwcm8vZXhhbXBsZXMtc2NoZWR1bGVyL2ZyYW1ld29ya3MvYW5ndWxhci9iYXNpYy9kaXN0L2Jhc2ljL1xuICAgICAgICAvLyBodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlcnByby9leGFtcGxlcy9mcmFtZXdvcmtzL2FuZ3VsYXIvYmFzaWMvZGlzdC9iYXNpYy9cbiAgICAgICAgLy8gVG86XG4gICAgICAgIC8vIGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVycHJvL2V4YW1wbGVzLyNleGFtcGxlLWV4YW1wbGVzLXNjaGVkdWxlci1mcmFtZXdvcmtzLWFuZ3VsYXItYmFzaWNcbiAgICAgICAgLy8gaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXJwcm8vZXhhbXBsZXMvI2V4YW1wbGUtZnJhbWV3b3Jrcy1hbmd1bGFyLWJhc2ljXG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvKC4qP1xcLykoZXhhbXBsZXMuKj9cXC9mcmFtZXdvcmtzXFwvLio/KVxcL2Rpc3QvLmV4ZWMoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7XG4gICAgICAgIHRoaXMubGluayA9IG1hdGNoID8gYCR7bWF0Y2hbMV19ZXhhbXBsZXMvI2V4YW1wbGUtJHttYXRjaFsyXS5yZXBsYWNlKC9cXC8vZ20sICctJykucmVwbGFjZSgnZXhhbXBsZXMtZnJhbWV3b3JrcycsICdmcmFtZXdvcmtzJyl9YCA6ICcjJztcblxuICAgICAgICBpZiAoIXRoaXMuaGlkZGVuRWRpdG9yKSB7XG4gICAgICAgICAgICBDU1NIZWxwZXIuaW5zZXJ0UnVsZSgnYm9keSB7IGZsZXgtZmxvdyA6IHJvdyAhaW1wb3J0YW50IH0nKTtcbiAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdhcHAtcm9vdCB7IGZsZXggOiAxICFpbXBvcnRhbnQ7IG92ZXJmbG93IDogaGlkZGVuICFpbXBvcnRhbnQgfScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJb25pYykge1xuICAgICAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdhcHAtcm9vdCB7IGZsZXgtZGlyZWN0aW9uIDogcm93ICFpbXBvcnRhbnQgfScpO1xuICAgICAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdpb24tYXBwIHsgcG9zaXRpb24gOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBmbGV4IDogMTsgb3ZlcmZsb3cgOiBoaWRkZW4gIWltcG9ydGFudCB9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcENvbmZpZyA9IChhd2FpdCBBamF4SGVscGVyLmdldChgJHt0aGlzLmFwcEZvbGRlcn1hcHAuY29uZmlnLmpzb25gLCB7IHBhcnNlSnNvbiA6IHRydWUgfSkpLnBhcnNlZEpzb247XG4gICAgICAgICAgICBpZiAoYXBwQ29uZmlnLnppcCB8fCB0aGlzLmlzVGVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkQnV0dG9uID0gdGhpcy5kb3dubG9hZEJ1dHRvbi5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBkb3dubG9hZEJ1dHRvbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb3dubG9hZEJ1dHRvbi5ocmVmID0gYCR7dGhpcy5hcHBGb2xkZXJ9JHthcHBDb25maWcuemlwfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmFibGVzIHNwZWNpYWwgc3R5bGluZyB3aGVuIGdlbmVyYXRpbmcgc2NyZWVuc2hvdHNcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgaWYgKHBhcmFtcy5oYXMoJ3NjcmVlbnNob3QnKSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdiLXNjcmVlbnNob3QnKTtcbiAgICAgICAgICAgIGlmICgod2luZG93IGFzIGFueSkuYnJ5bnR1bSkge1xuICAgICAgICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5icnludHVtLm5vQW5pbWF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb3B5U2hhZG93Um9vdFN0eWxlKCkge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290U3R5bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcm9vdCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCdzdHlsZScpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdFN0eWxlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNoYWRvd1Jvb3RTdHlsZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgdG9nZ2xlQ29kZUVkaXRvcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvZGVFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVNoYWRvd1Jvb3RTdHlsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2RlRWRpdG9yID0gYXdhaXQgRGVtb0NvZGVFZGl0b3IudG9nZ2xlQ29kZUVkaXRvcihcbiAgICAgICAgICAgIHRoaXMuY29kZUVkaXRvcixcbiAgICAgICAgICAgIHRoaXMuY29kZUJ1dHRvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdGhpcy5pc0lvbmljID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXJvb3QnKSA6IGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAgICAgYXBwRm9sZGVyICAgICAgICA6IHRoaXMuYXBwRm9sZGVyLFxuICAgICAgICAgICAgICAgIHByZWZlcnJlZFNvdXJjZXMgOiBbXG4gICAgICAgICAgICAgICAgICAgIC9cXHcrXFwuY29tcG9uZW50XFwudHMvLFxuICAgICAgICAgICAgICAgICAgICAvXFx3K1xcLmNvbmZpZ1xcLnRzL1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==