UNPKG

81.6 kBJavaScriptView Raw
1import { Component, ViewEncapsulation, Inject, forwardRef, Input, EventEmitter, ChangeDetectionStrategy, ElementRef, Optional, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
2import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
3import { CommonModule } from '@angular/common';
4import { TreeDragDropService, PrimeTemplate, SharedModule } from 'primeng/api';
5import { ObjectUtils } from 'primeng/utils';
6import { DomHandler } from 'primeng/dom';
7import { RippleModule } from 'primeng/ripple';
8
9class UITreeNode {
10 constructor(tree) {
11 this.tree = tree;
12 }
13 ngOnInit() {
14 this.node.parent = this.parentNode;
15 if (this.parentNode) {
16 this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
17 }
18 }
19 getIcon() {
20 let icon;
21 if (this.node.icon)
22 icon = this.node.icon;
23 else
24 icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;
25 return UITreeNode.ICON_CLASS + ' ' + icon;
26 }
27 isLeaf() {
28 return this.tree.isNodeLeaf(this.node);
29 }
30 toggle(event) {
31 if (this.node.expanded)
32 this.collapse(event);
33 else
34 this.expand(event);
35 }
36 expand(event) {
37 this.node.expanded = true;
38 if (this.tree.virtualScroll) {
39 this.tree.updateSerializedValue();
40 }
41 this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
42 }
43 collapse(event) {
44 this.node.expanded = false;
45 if (this.tree.virtualScroll) {
46 this.tree.updateSerializedValue();
47 }
48 this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
49 }
50 onNodeClick(event) {
51 this.tree.onNodeClick(event, this.node);
52 }
53 onNodeKeydown(event) {
54 if (event.which === 13) {
55 this.tree.onNodeClick(event, this.node);
56 }
57 }
58 onNodeTouchEnd() {
59 this.tree.onNodeTouchEnd();
60 }
61 onNodeRightClick(event) {
62 this.tree.onNodeRightClick(event, this.node);
63 }
64 isSelected() {
65 return this.tree.isSelected(this.node);
66 }
67 onDropPoint(event, position) {
68 event.preventDefault();
69 let dragNode = this.tree.dragNode;
70 let dragNodeIndex = this.tree.dragNodeIndex;
71 let dragNodeScope = this.tree.dragNodeScope;
72 let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;
73 if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
74 let dropParams = Object.assign({}, this.createDropPointEventMetadata(position));
75 if (this.tree.validateDrop) {
76 this.tree.onNodeDrop.emit({
77 originalEvent: event,
78 dragNode: dragNode,
79 dropNode: this.node,
80 dropIndex: this.index,
81 accept: () => {
82 this.processPointDrop(dropParams);
83 }
84 });
85 }
86 else {
87 this.processPointDrop(dropParams);
88 this.tree.onNodeDrop.emit({
89 originalEvent: event,
90 dragNode: dragNode,
91 dropNode: this.node,
92 dropIndex: this.index
93 });
94 }
95 }
96 this.draghoverPrev = false;
97 this.draghoverNext = false;
98 }
99 processPointDrop(event) {
100 let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
101 event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
102 let dropIndex = this.index;
103 if (event.position < 0) {
104 dropIndex = (event.dragNodeSubNodes === newNodeList) ? ((event.dragNodeIndex > event.index) ? event.index : event.index - 1) : event.index;
105 newNodeList.splice(dropIndex, 0, event.dragNode);
106 }
107 else {
108 dropIndex = newNodeList.length;
109 newNodeList.push(event.dragNode);
110 }
111 this.tree.dragDropService.stopDrag({
112 node: event.dragNode,
113 subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
114 index: event.dragNodeIndex
115 });
116 }
117 createDropPointEventMetadata(position) {
118 return {
119 dragNode: this.tree.dragNode,
120 dragNodeIndex: this.tree.dragNodeIndex,
121 dragNodeSubNodes: this.tree.dragNodeSubNodes,
122 dropNode: this.node,
123 index: this.index,
124 position: position
125 };
126 }
127 onDropPointDragOver(event) {
128 event.dataTransfer.dropEffect = 'move';
129 event.preventDefault();
130 }
131 onDropPointDragEnter(event, position) {
132 if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
133 if (position < 0)
134 this.draghoverPrev = true;
135 else
136 this.draghoverNext = true;
137 }
138 }
139 onDropPointDragLeave(event) {
140 this.draghoverPrev = false;
141 this.draghoverNext = false;
142 }
143 onDragStart(event) {
144 if (this.tree.draggableNodes && this.node.draggable !== false) {
145 event.dataTransfer.setData("text", "data");
146 this.tree.dragDropService.startDrag({
147 tree: this,
148 node: this.node,
149 subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
150 index: this.index,
151 scope: this.tree.draggableScope
152 });
153 }
154 else {
155 event.preventDefault();
156 }
157 }
158 onDragStop(event) {
159 this.tree.dragDropService.stopDrag({
160 node: this.node,
161 subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
162 index: this.index
163 });
164 }
165 onDropNodeDragOver(event) {
166 event.dataTransfer.dropEffect = 'move';
167 if (this.tree.droppableNodes) {
168 event.preventDefault();
169 event.stopPropagation();
170 }
171 }
172 onDropNode(event) {
173 if (this.tree.droppableNodes && this.node.droppable !== false) {
174 let dragNode = this.tree.dragNode;
175 if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
176 let dropParams = Object.assign({}, this.createDropNodeEventMetadata());
177 if (this.tree.validateDrop) {
178 this.tree.onNodeDrop.emit({
179 originalEvent: event,
180 dragNode: dragNode,
181 dropNode: this.node,
182 index: this.index,
183 accept: () => {
184 this.processNodeDrop(dropParams);
185 }
186 });
187 }
188 else {
189 this.processNodeDrop(dropParams);
190 this.tree.onNodeDrop.emit({
191 originalEvent: event,
192 dragNode: dragNode,
193 dropNode: this.node,
194 index: this.index
195 });
196 }
197 }
198 }
199 event.preventDefault();
200 event.stopPropagation();
201 this.draghoverNode = false;
202 }
203 createDropNodeEventMetadata() {
204 return {
205 dragNode: this.tree.dragNode,
206 dragNodeIndex: this.tree.dragNodeIndex,
207 dragNodeSubNodes: this.tree.dragNodeSubNodes,
208 dropNode: this.node
209 };
210 }
211 processNodeDrop(event) {
212 let dragNodeIndex = event.dragNodeIndex;
213 event.dragNodeSubNodes.splice(dragNodeIndex, 1);
214 if (event.dropNode.children)
215 event.dropNode.children.push(event.dragNode);
216 else
217 event.dropNode.children = [event.dragNode];
218 this.tree.dragDropService.stopDrag({
219 node: event.dragNode,
220 subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
221 index: dragNodeIndex
222 });
223 }
224 onDropNodeDragEnter(event) {
225 if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
226 this.draghoverNode = true;
227 }
228 }
229 onDropNodeDragLeave(event) {
230 if (this.tree.droppableNodes) {
231 let rect = event.currentTarget.getBoundingClientRect();
232 if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
233 this.draghoverNode = false;
234 }
235 }
236 }
237 onKeyDown(event) {
238 const nodeElement = event.target.parentElement.parentElement;
239 if (nodeElement.nodeName !== 'P-TREENODE') {
240 return;
241 }
242 switch (event.which) {
243 //down arrow
244 case 40:
245 const listElement = (this.tree.droppableNodes) ? nodeElement.children[1].children[1] : nodeElement.children[0].children[1];
246 if (listElement && listElement.children.length > 0) {
247 this.focusNode(listElement.children[0]);
248 }
249 else {
250 const nextNodeElement = nodeElement.nextElementSibling;
251 if (nextNodeElement) {
252 this.focusNode(nextNodeElement);
253 }
254 else {
255 let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);
256 if (nextSiblingAncestor) {
257 this.focusNode(nextSiblingAncestor);
258 }
259 }
260 }
261 event.preventDefault();
262 break;
263 //up arrow
264 case 38:
265 if (nodeElement.previousElementSibling) {
266 this.focusNode(this.findLastVisibleDescendant(nodeElement.previousElementSibling));
267 }
268 else {
269 let parentNodeElement = this.getParentNodeElement(nodeElement);
270 if (parentNodeElement) {
271 this.focusNode(parentNodeElement);
272 }
273 }
274 event.preventDefault();
275 break;
276 //right arrow
277 case 39:
278 if (!this.node.expanded && !this.tree.isNodeLeaf(this.node)) {
279 this.expand(event);
280 }
281 event.preventDefault();
282 break;
283 //left arrow
284 case 37:
285 if (this.node.expanded) {
286 this.collapse(event);
287 }
288 else {
289 let parentNodeElement = this.getParentNodeElement(nodeElement);
290 if (parentNodeElement) {
291 this.focusNode(parentNodeElement);
292 }
293 }
294 event.preventDefault();
295 break;
296 //enter
297 case 13:
298 this.tree.onNodeClick(event, this.node);
299 event.preventDefault();
300 break;
301 default:
302 //no op
303 break;
304 }
305 }
306 findNextSiblingOfAncestor(nodeElement) {
307 let parentNodeElement = this.getParentNodeElement(nodeElement);
308 if (parentNodeElement) {
309 if (parentNodeElement.nextElementSibling)
310 return parentNodeElement.nextElementSibling;
311 else
312 return this.findNextSiblingOfAncestor(parentNodeElement);
313 }
314 else {
315 return null;
316 }
317 }
318 findLastVisibleDescendant(nodeElement) {
319 const listElement = Array.from(nodeElement.children).find(el => DomHandler.hasClass(el, 'p-treenode'));
320 const childrenListElement = listElement.children[1];
321 if (childrenListElement && childrenListElement.children.length > 0) {
322 const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
323 return this.findLastVisibleDescendant(lastChildElement);
324 }
325 else {
326 return nodeElement;
327 }
328 }
329 getParentNodeElement(nodeElement) {
330 const parentNodeElement = nodeElement.parentElement.parentElement.parentElement;
331 return parentNodeElement.tagName === 'P-TREENODE' ? parentNodeElement : null;
332 }
333 focusNode(element) {
334 if (this.tree.droppableNodes)
335 element.children[1].children[0].focus();
336 else
337 element.children[0].children[0].focus();
338 }
339}
340UITreeNode.ICON_CLASS = 'p-treenode-icon ';
341UITreeNode.decorators = [
342 { type: Component, args: [{
343 selector: 'p-treeNode',
344 template: `
345 <ng-template [ngIf]="node">
346 <li *ngIf="tree.droppableNodes" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverPrev}"
347 (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>
348 <li *ngIf="!tree.horizontal" role="treeitem" [ngClass]="['p-treenode',node.styleClass||'', isLeaf() ? 'p-treenode-leaf': '']">
349 <div class="p-treenode-content" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"
350 (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"
351 [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)" [attr.tabindex]="0"
352 [ngClass]="{'p-treenode-selectable':tree.selectionMode && node.selectable !== false,'p-treenode-dragover':draghoverNode, 'p-highlight':isSelected()}"
353 (keydown)="onKeyDown($event)" [attr.aria-posinset]="this.index + 1" [attr.aria-expanded]="this.node.expanded" [attr.aria-selected]="isSelected()" [attr.aria-label]="node.label">
354 <button type="button" class="p-tree-toggler p-link" (click)="toggle($event)" pRipple>
355 <span class="p-tree-toggler-icon pi pi-fw" [ngClass]="{'pi-chevron-right':!node.expanded,'pi-chevron-down':node.expanded}"></span>
356 </button>
357 <div class="p-checkbox p-component" *ngIf="tree.selectionMode == 'checkbox'" [attr.aria-checked]="isSelected()">
358 <div class="p-checkbox-box" [ngClass]="{'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected}">
359 <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':isSelected(),'pi-minus':node.partialSelected}"></span>
360 </div>
361 </div>
362 <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
363 <span class="p-treenode-label">
364 <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
365 <span *ngIf="tree.getTemplateForNode(node)">
366 <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
367 </span>
368 </span>
369 </div>
370 <ul class="p-treenode-children" style="display: none;" *ngIf="!tree.virtualScroll && node.children && node.expanded" [style.display]="node.expanded ? 'block' : 'none'" role="group">
371 <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index; trackBy: tree.trackBy" [node]="childNode" [parentNode]="node"
372 [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="tree.virtualNodeHeight" [level]="level + 1"></p-treeNode>
373 </ul>
374 </li>
375 <li *ngIf="tree.droppableNodes&&lastChild" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverNext}"
376 (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>
377 <table *ngIf="tree.horizontal" [class]="node.styleClass">
378 <tbody>
379 <tr>
380 <td class="p-treenode-connector" *ngIf="!root">
381 <table class="p-treenode-connector-table">
382 <tbody>
383 <tr>
384 <td [ngClass]="{'p-treenode-connector-line':!firstChild}"></td>
385 </tr>
386 <tr>
387 <td [ngClass]="{'p-treenode-connector-line':!lastChild}"></td>
388 </tr>
389 </tbody>
390 </table>
391 </td>
392 <td class="p-treenode" [ngClass]="{'p-treenode-collapsed':!node.expanded}">
393 <div class="p-treenode-content" tabindex="0" [ngClass]="{'p-treenode-selectable':tree.selectionMode,'p-highlight':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"
394 (touchend)="onNodeTouchEnd()" (keydown)="onNodeKeydown($event)">
395 <span class="p-tree-toggler pi pi-fw" [ngClass]="{'pi-plus':!node.expanded,'pi-minus':node.expanded}" *ngIf="!isLeaf()" (click)="toggle($event)"></span>
396 <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
397 <span class="p-treenode-label">
398 <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
399 <span *ngIf="tree.getTemplateForNode(node)">
400 <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
401 </span>
402 </span>
403 </div>
404 </td>
405 <td class="p-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? 'table-cell' : 'none'">
406 <div class="p-treenode-children">
407 <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; trackBy: tree.trackBy" [node]="childNode"
408 [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>
409 </div>
410 </td>
411 </tr>
412 </tbody>
413 </table>
414 </ng-template>
415 `,
416 encapsulation: ViewEncapsulation.None
417 },] }
418];
419UITreeNode.ctorParameters = () => [
420 { type: undefined, decorators: [{ type: Inject, args: [forwardRef(() => Tree),] }] }
421];
422UITreeNode.propDecorators = {
423 rowNode: [{ type: Input }],
424 node: [{ type: Input }],
425 parentNode: [{ type: Input }],
426 root: [{ type: Input }],
427 index: [{ type: Input }],
428 firstChild: [{ type: Input }],
429 lastChild: [{ type: Input }],
430 level: [{ type: Input }]
431};
432class Tree {
433 constructor(el, dragDropService) {
434 this.el = el;
435 this.dragDropService = dragDropService;
436 this.selectionChange = new EventEmitter();
437 this.onNodeSelect = new EventEmitter();
438 this.onNodeUnselect = new EventEmitter();
439 this.onNodeExpand = new EventEmitter();
440 this.onNodeCollapse = new EventEmitter();
441 this.onNodeContextMenuSelect = new EventEmitter();
442 this.onNodeDrop = new EventEmitter();
443 this.layout = 'vertical';
444 this.metaKeySelection = true;
445 this.propagateSelectionUp = true;
446 this.propagateSelectionDown = true;
447 this.loadingIcon = 'pi pi-spinner';
448 this.emptyMessage = 'No records found';
449 this.filterBy = 'label';
450 this.filterMode = 'lenient';
451 this.trackBy = (index, item) => item;
452 this.onFilter = new EventEmitter();
453 }
454 ngOnInit() {
455 if (this.droppableNodes) {
456 this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(event => {
457 this.dragNodeTree = event.tree;
458 this.dragNode = event.node;
459 this.dragNodeSubNodes = event.subNodes;
460 this.dragNodeIndex = event.index;
461 this.dragNodeScope = event.scope;
462 });
463 this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(event => {
464 this.dragNodeTree = null;
465 this.dragNode = null;
466 this.dragNodeSubNodes = null;
467 this.dragNodeIndex = null;
468 this.dragNodeScope = null;
469 this.dragHover = false;
470 });
471 }
472 }
473 ngOnChanges(simpleChange) {
474 if (simpleChange.value) {
475 this.updateSerializedValue();
476 }
477 if (simpleChange.scrollHeight && this.virtualScrollBody) {
478 this.virtualScrollBody.checkViewportSize();
479 }
480 }
481 get horizontal() {
482 return this.layout == 'horizontal';
483 }
484 ngAfterContentInit() {
485 if (this.templates.length) {
486 this.templateMap = {};
487 }
488 this.templates.forEach((item) => {
489 this.templateMap[item.name] = item.template;
490 });
491 }
492 updateSerializedValue() {
493 this.serializedValue = [];
494 this.serializeNodes(null, this.getRootNode(), 0, true);
495 }
496 serializeNodes(parent, nodes, level, visible) {
497 if (nodes && nodes.length) {
498 for (let node of nodes) {
499 node.parent = parent;
500 const rowNode = {
501 node: node,
502 parent: parent,
503 level: level,
504 visible: visible && (parent ? parent.expanded : true)
505 };
506 this.serializedValue.push(rowNode);
507 if (rowNode.visible && node.expanded) {
508 this.serializeNodes(node, node.children, level + 1, rowNode.visible);
509 }
510 }
511 }
512 }
513 onNodeClick(event, node) {
514 let eventTarget = event.target;
515 if (DomHandler.hasClass(eventTarget, 'p-tree-toggler') || DomHandler.hasClass(eventTarget, 'p-tree-toggler-icon')) {
516 return;
517 }
518 else if (this.selectionMode) {
519 if (node.selectable === false) {
520 return;
521 }
522 if (this.hasFilteredNodes()) {
523 node = this.getNodeWithKey(node.key, this.value);
524 if (!node) {
525 return;
526 }
527 }
528 let index = this.findIndexInSelection(node);
529 let selected = (index >= 0);
530 if (this.isCheckboxSelectionMode()) {
531 if (selected) {
532 if (this.propagateSelectionDown)
533 this.propagateDown(node, false);
534 else
535 this.selection = this.selection.filter((val, i) => i != index);
536 if (this.propagateSelectionUp && node.parent) {
537 this.propagateUp(node.parent, false);
538 }
539 this.selectionChange.emit(this.selection);
540 this.onNodeUnselect.emit({ originalEvent: event, node: node });
541 }
542 else {
543 if (this.propagateSelectionDown)
544 this.propagateDown(node, true);
545 else
546 this.selection = [...this.selection || [], node];
547 if (this.propagateSelectionUp && node.parent) {
548 this.propagateUp(node.parent, true);
549 }
550 this.selectionChange.emit(this.selection);
551 this.onNodeSelect.emit({ originalEvent: event, node: node });
552 }
553 }
554 else {
555 let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
556 if (metaSelection) {
557 let metaKey = (event.metaKey || event.ctrlKey);
558 if (selected && metaKey) {
559 if (this.isSingleSelectionMode()) {
560 this.selectionChange.emit(null);
561 }
562 else {
563 this.selection = this.selection.filter((val, i) => i != index);
564 this.selectionChange.emit(this.selection);
565 }
566 this.onNodeUnselect.emit({ originalEvent: event, node: node });
567 }
568 else {
569 if (this.isSingleSelectionMode()) {
570 this.selectionChange.emit(node);
571 }
572 else if (this.isMultipleSelectionMode()) {
573 this.selection = (!metaKey) ? [] : this.selection || [];
574 this.selection = [...this.selection, node];
575 this.selectionChange.emit(this.selection);
576 }
577 this.onNodeSelect.emit({ originalEvent: event, node: node });
578 }
579 }
580 else {
581 if (this.isSingleSelectionMode()) {
582 if (selected) {
583 this.selection = null;
584 this.onNodeUnselect.emit({ originalEvent: event, node: node });
585 }
586 else {
587 this.selection = node;
588 this.onNodeSelect.emit({ originalEvent: event, node: node });
589 }
590 }
591 else {
592 if (selected) {
593 this.selection = this.selection.filter((val, i) => i != index);
594 this.onNodeUnselect.emit({ originalEvent: event, node: node });
595 }
596 else {
597 this.selection = [...this.selection || [], node];
598 this.onNodeSelect.emit({ originalEvent: event, node: node });
599 }
600 }
601 this.selectionChange.emit(this.selection);
602 }
603 }
604 }
605 this.nodeTouched = false;
606 }
607 onNodeTouchEnd() {
608 this.nodeTouched = true;
609 }
610 onNodeRightClick(event, node) {
611 if (this.contextMenu) {
612 let eventTarget = event.target;
613 if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {
614 return;
615 }
616 else {
617 let index = this.findIndexInSelection(node);
618 let selected = (index >= 0);
619 if (!selected) {
620 if (this.isSingleSelectionMode())
621 this.selectionChange.emit(node);
622 else
623 this.selectionChange.emit([node]);
624 }
625 this.contextMenu.show(event);
626 this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
627 }
628 }
629 }
630 findIndexInSelection(node) {
631 let index = -1;
632 if (this.selectionMode && this.selection) {
633 if (this.isSingleSelectionMode()) {
634 let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
635 index = areNodesEqual ? 0 : -1;
636 }
637 else {
638 for (let i = 0; i < this.selection.length; i++) {
639 let selectedNode = this.selection[i];
640 let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
641 if (areNodesEqual) {
642 index = i;
643 break;
644 }
645 }
646 }
647 }
648 return index;
649 }
650 syncNodeOption(node, parentNodes, option, value) {
651 // to synchronize the node option between the filtered nodes and the original nodes(this.value)
652 const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
653 if (_node) {
654 _node[option] = value || node[option];
655 }
656 }
657 hasFilteredNodes() {
658 return this.filter && this.filteredNodes && this.filteredNodes.length;
659 }
660 getNodeWithKey(key, nodes) {
661 for (let node of nodes) {
662 if (node.key === key) {
663 return node;
664 }
665 if (node.children) {
666 let matchedNode = this.getNodeWithKey(key, node.children);
667 if (matchedNode) {
668 return matchedNode;
669 }
670 }
671 }
672 }
673 propagateUp(node, select) {
674 if (node.children && node.children.length) {
675 let selectedCount = 0;
676 let childPartialSelected = false;
677 for (let child of node.children) {
678 if (this.isSelected(child)) {
679 selectedCount++;
680 }
681 else if (child.partialSelected) {
682 childPartialSelected = true;
683 }
684 }
685 if (select && selectedCount == node.children.length) {
686 this.selection = [...this.selection || [], node];
687 node.partialSelected = false;
688 }
689 else {
690 if (!select) {
691 let index = this.findIndexInSelection(node);
692 if (index >= 0) {
693 this.selection = this.selection.filter((val, i) => i != index);
694 }
695 }
696 if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)
697 node.partialSelected = true;
698 else
699 node.partialSelected = false;
700 }
701 this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
702 }
703 let parent = node.parent;
704 if (parent) {
705 this.propagateUp(parent, select);
706 }
707 }
708 propagateDown(node, select) {
709 let index = this.findIndexInSelection(node);
710 if (select && index == -1) {
711 this.selection = [...this.selection || [], node];
712 }
713 else if (!select && index > -1) {
714 this.selection = this.selection.filter((val, i) => i != index);
715 }
716 node.partialSelected = false;
717 this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
718 if (node.children && node.children.length) {
719 for (let child of node.children) {
720 this.propagateDown(child, select);
721 }
722 }
723 }
724 isSelected(node) {
725 return this.findIndexInSelection(node) != -1;
726 }
727 isSingleSelectionMode() {
728 return this.selectionMode && this.selectionMode == 'single';
729 }
730 isMultipleSelectionMode() {
731 return this.selectionMode && this.selectionMode == 'multiple';
732 }
733 isCheckboxSelectionMode() {
734 return this.selectionMode && this.selectionMode == 'checkbox';
735 }
736 isNodeLeaf(node) {
737 return node.leaf == false ? false : !(node.children && node.children.length);
738 }
739 getRootNode() {
740 return this.filteredNodes ? this.filteredNodes : this.value;
741 }
742 getTemplateForNode(node) {
743 if (this.templateMap)
744 return node.type ? this.templateMap[node.type] : this.templateMap['default'];
745 else
746 return null;
747 }
748 onDragOver(event) {
749 if (this.droppableNodes && (!this.value || this.value.length === 0)) {
750 event.dataTransfer.dropEffect = 'move';
751 event.preventDefault();
752 }
753 }
754 onDrop(event) {
755 if (this.droppableNodes && (!this.value || this.value.length === 0)) {
756 event.preventDefault();
757 let dragNode = this.dragNode;
758 if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
759 let dragNodeIndex = this.dragNodeIndex;
760 this.dragNodeSubNodes.splice(dragNodeIndex, 1);
761 this.value = this.value || [];
762 this.value.push(dragNode);
763 this.dragDropService.stopDrag({
764 node: dragNode
765 });
766 }
767 }
768 }
769 onDragEnter(event) {
770 if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
771 this.dragHover = true;
772 }
773 }
774 onDragLeave(event) {
775 if (this.droppableNodes) {
776 let rect = event.currentTarget.getBoundingClientRect();
777 if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
778 this.dragHover = false;
779 }
780 }
781 }
782 allowDrop(dragNode, dropNode, dragNodeScope) {
783 if (!dragNode) {
784 //prevent random html elements to be dragged
785 return false;
786 }
787 else if (this.isValidDragScope(dragNodeScope)) {
788 let allow = true;
789 if (dropNode) {
790 if (dragNode === dropNode) {
791 allow = false;
792 }
793 else {
794 let parent = dropNode.parent;
795 while (parent != null) {
796 if (parent === dragNode) {
797 allow = false;
798 break;
799 }
800 parent = parent.parent;
801 }
802 }
803 }
804 return allow;
805 }
806 else {
807 return false;
808 }
809 }
810 isValidDragScope(dragScope) {
811 let dropScope = this.droppableScope;
812 if (dropScope) {
813 if (typeof dropScope === 'string') {
814 if (typeof dragScope === 'string')
815 return dropScope === dragScope;
816 else if (dragScope instanceof Array)
817 return dragScope.indexOf(dropScope) != -1;
818 }
819 else if (dropScope instanceof Array) {
820 if (typeof dragScope === 'string') {
821 return dropScope.indexOf(dragScope) != -1;
822 }
823 else if (dragScope instanceof Array) {
824 for (let s of dropScope) {
825 for (let ds of dragScope) {
826 if (s === ds) {
827 return true;
828 }
829 }
830 }
831 }
832 }
833 return false;
834 }
835 else {
836 return true;
837 }
838 }
839 _filter(event) {
840 let filterValue = event.target.value;
841 if (filterValue === '') {
842 this.filteredNodes = null;
843 }
844 else {
845 this.filteredNodes = [];
846 const searchFields = this.filterBy.split(',');
847 const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
848 const isStrictMode = this.filterMode === 'strict';
849 for (let node of this.value) {
850 let copyNode = Object.assign({}, node);
851 let paramsWithoutNode = { searchFields, filterText, isStrictMode };
852 if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
853 (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
854 this.filteredNodes.push(copyNode);
855 }
856 }
857 }
858 this.updateSerializedValue();
859 this.onFilter.emit({
860 filter: filterValue,
861 filteredValue: this.filteredNodes
862 });
863 }
864 findFilteredNodes(node, paramsWithoutNode) {
865 if (node) {
866 let matched = false;
867 if (node.children) {
868 let childNodes = [...node.children];
869 node.children = [];
870 for (let childNode of childNodes) {
871 let copyChildNode = Object.assign({}, childNode);
872 if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
873 matched = true;
874 node.children.push(copyChildNode);
875 }
876 }
877 }
878 if (matched) {
879 node.expanded = true;
880 return true;
881 }
882 }
883 }
884 isFilterMatched(node, { searchFields, filterText, isStrictMode }) {
885 let matched = false;
886 for (let field of searchFields) {
887 let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
888 if (fieldValue.indexOf(filterText) > -1) {
889 matched = true;
890 }
891 }
892 if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
893 matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
894 }
895 return matched;
896 }
897 getBlockableElement() {
898 return this.el.nativeElement.children[0];
899 }
900 ngOnDestroy() {
901 if (this.dragStartSubscription) {
902 this.dragStartSubscription.unsubscribe();
903 }
904 if (this.dragStopSubscription) {
905 this.dragStopSubscription.unsubscribe();
906 }
907 }
908}
909Tree.decorators = [
910 { type: Component, args: [{
911 selector: 'p-tree',
912 template: `
913 <div [ngClass]="{'p-tree p-component':true,'p-tree-selectable':selectionMode,
914 'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
915 [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"
916 (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)">
917 <div class="p-tree-loading-overlay p-component-overlay" *ngIf="loading">
918 <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
919 </div>
920 <div *ngIf="filter" class="p-tree-filter-container">
921 <input #filter type="text" autocomplete="off" class="p-tree-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
922 (keydown.enter)="$event.preventDefault()" (input)="_filter($event)">
923 <span class="p-tree-filter-icon pi pi-search"></span>
924 </div>
925 <ng-container *ngIf="!virtualScroll; else virtualScrollList">
926 <div class="p-tree-wrapper" [style.max-height]="scrollHeight">
927 <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
928 <p-treeNode *ngFor="let node of getRootNode(); let firstChild=first;let lastChild=last; let index=index; trackBy: trackBy" [node]="node"
929 [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [level]="0"></p-treeNode>
930 </ul>
931 </div>
932 </ng-container>
933 <ng-template #virtualScrollList>
934 <cdk-virtual-scroll-viewport class="p-tree-wrapper" [style.height]="scrollHeight" [itemSize]="virtualNodeHeight" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx">
935 <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
936 <p-treeNode *cdkVirtualFor="let rowNode of serializedValue; let firstChild=first; let lastChild=last; let index=index; trackBy: trackBy; templateCacheSize: 0" [level]="rowNode.level"
937 [rowNode]="rowNode" [node]="rowNode.node" [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="virtualNodeHeight"></p-treeNode>
938 </ul>
939 </cdk-virtual-scroll-viewport>
940 </ng-template>
941 <div class="p-tree-empty-message" *ngIf="!loading && (value == null || value.length === 0)">{{emptyMessage}}</div>
942 </div>
943 <div [ngClass]="{'p-tree p-tree-horizontal p-component':true,'p-tree-selectable':selectionMode}" [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">
944 <div class="p-tree-loading-mask p-component-overlay" *ngIf="loading">
945 <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
946 </div>
947 <table *ngIf="value&&value[0]">
948 <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>
949 </table>
950 <div class="p-tree-empty-message" *ngIf="!loading && (value == null || value.length === 0)">{{emptyMessage}}</div>
951 </div>
952 `,
953 changeDetection: ChangeDetectionStrategy.Default,
954 encapsulation: ViewEncapsulation.None,
955 styles: [".p-tree-container{overflow:auto}.p-tree-container,.p-treenode-children{list-style-type:none;margin:0;padding:0}.p-tree-wrapper{overflow:auto}.p-tree-toggler,.p-treenode-selectable{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;user-select:none}.p-tree-toggler{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;justify-content:center;overflow:hidden;position:relative}.p-treenode-leaf>.p-treenode-content .p-tree-toggler{visibility:hidden}.p-treenode-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.p-tree-filter{width:100%}.p-tree-filter-container{display:block;position:relative;width:100%}.p-tree-filter-icon{margin-top:-.5rem;position:absolute;top:50%}.p-tree-loading{min-height:4rem;position:relative}.p-tree .p-tree-loading-overlay{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-flexbox;display:flex;justify-content:center;position:absolute;z-index:2}.p-tree-flex-scrollable{-ms-flex:1;-ms-flex-direction:column;display:-ms-flexbox;display:flex;flex:1;flex-direction:column;height:100%}.p-tree-flex-scrollable .p-tree-wrapper{-ms-flex:1;flex:1}.p-tree .p-treenode-droppoint{height:4px;list-style-type:none}.p-tree .p-treenode-droppoint-active{border:0}.p-tree-horizontal{overflow:auto;padding-left:0;padding-right:0;width:auto}.p-tree.p-tree-horizontal table,.p-tree.p-tree-horizontal td,.p-tree.p-tree-horizontal tr{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.p-tree-horizontal .p-treenode-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;font-weight:400;padding:.4em 1em .4em .2em}.p-tree-horizontal .p-treenode-parent .p-treenode-content{font-weight:400;white-space:nowrap}.p-tree.p-tree-horizontal .p-treenode{background:url(\"data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=\") repeat-x scroll 50% rgba(0,0,0,0);padding:.25rem 2.5rem}.p-tree.p-tree-horizontal .p-treenode.p-treenode-collapsed,.p-tree.p-tree-horizontal .p-treenode.p-treenode-leaf{padding-right:0}.p-tree.p-tree-horizontal .p-treenode-children{margin:0;padding:0}.p-tree.p-tree-horizontal .p-treenode-connector{width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-table{height:100%;width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-line{background:url(\"data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=\") repeat-y scroll 0 0 rgba(0,0,0,0);width:1px}.p-tree.p-tree-horizontal table{height:0}"]
956 },] }
957];
958Tree.ctorParameters = () => [
959 { type: ElementRef },
960 { type: TreeDragDropService, decorators: [{ type: Optional }] }
961];
962Tree.propDecorators = {
963 value: [{ type: Input }],
964 selectionMode: [{ type: Input }],
965 selection: [{ type: Input }],
966 selectionChange: [{ type: Output }],
967 onNodeSelect: [{ type: Output }],
968 onNodeUnselect: [{ type: Output }],
969 onNodeExpand: [{ type: Output }],
970 onNodeCollapse: [{ type: Output }],
971 onNodeContextMenuSelect: [{ type: Output }],
972 onNodeDrop: [{ type: Output }],
973 style: [{ type: Input }],
974 styleClass: [{ type: Input }],
975 contextMenu: [{ type: Input }],
976 layout: [{ type: Input }],
977 draggableScope: [{ type: Input }],
978 droppableScope: [{ type: Input }],
979 draggableNodes: [{ type: Input }],
980 droppableNodes: [{ type: Input }],
981 metaKeySelection: [{ type: Input }],
982 propagateSelectionUp: [{ type: Input }],
983 propagateSelectionDown: [{ type: Input }],
984 loading: [{ type: Input }],
985 loadingIcon: [{ type: Input }],
986 emptyMessage: [{ type: Input }],
987 ariaLabel: [{ type: Input }],
988 ariaLabelledBy: [{ type: Input }],
989 validateDrop: [{ type: Input }],
990 filter: [{ type: Input }],
991 filterBy: [{ type: Input }],
992 filterMode: [{ type: Input }],
993 filterPlaceholder: [{ type: Input }],
994 filterLocale: [{ type: Input }],
995 scrollHeight: [{ type: Input }],
996 virtualScroll: [{ type: Input }],
997 virtualNodeHeight: [{ type: Input }],
998 minBufferPx: [{ type: Input }],
999 maxBufferPx: [{ type: Input }],
1000 trackBy: [{ type: Input }],
1001 onFilter: [{ type: Output }],
1002 templates: [{ type: ContentChildren, args: [PrimeTemplate,] }],
1003 virtualScrollBody: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }]
1004};
1005class TreeModule {
1006}
1007TreeModule.decorators = [
1008 { type: NgModule, args: [{
1009 imports: [CommonModule, ScrollingModule, RippleModule],
1010 exports: [Tree, SharedModule, ScrollingModule],
1011 declarations: [Tree, UITreeNode]
1012 },] }
1013];
1014
1015/**
1016 * Generated bundle index. Do not edit.
1017 */
1018
1019export { Tree, TreeModule, UITreeNode };
1020//# sourceMappingURL=primeng-tree.js.map