@bizdoc/core 1.16.3 → 1.16.4
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.
- package/bizdoc-core.d.ts.map +1 -0
- package/esm2020/lib/admin/admin-dismiss.service.mjs +6 -6
- package/esm2020/lib/admin/admin-menu.component.mjs +82 -9
- package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +248 -0
- package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +192 -29
- package/esm2020/lib/admin/configuration-designer/designer.base.mjs +37 -25
- package/esm2020/lib/admin/configuration-designer/designer.component.mjs +152 -10
- package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +107 -10
- package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +447 -7
- package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +441 -7
- package/esm2020/lib/admin/configuration-designer/elements/anomaly-rule.component.mjs +25 -7
- package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +25 -7
- package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +79 -7
- package/esm2020/lib/admin/configuration-designer/elements/cube-index-utility.component.mjs +71 -7
- package/esm2020/lib/admin/configuration-designer/elements/cube-view.component.mjs +98 -7
- package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +793 -10
- package/esm2020/lib/admin/configuration-designer/elements/documents-report.component.mjs +52 -7
- package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +55 -10
- package/esm2020/lib/admin/configuration-designer/elements/explore-view.component.mjs +73 -7
- package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +275 -9
- package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +96 -10
- package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +78 -7
- package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +293 -8
- package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +210 -8
- package/esm2020/lib/admin/configuration-designer/elements/performance-widget.component.mjs +74 -7
- package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +162 -8
- package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +58 -7
- package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +40 -7
- package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +70 -8
- package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +20 -7
- package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +63 -11
- package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +132 -8
- package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +101 -7
- package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +25 -7
- package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +205 -8
- package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +24 -7
- package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +22 -7
- package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +54 -7
- package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +79 -30
- package/esm2020/lib/admin/core/ace.input.mjs +35 -29
- package/esm2020/lib/admin/core/color-picker.input.mjs +89 -36
- package/esm2020/lib/admin/core/search.input.mjs +23 -13
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +90 -15
- package/esm2020/lib/admin/document-trace/document-trace.component.mjs +296 -30
- package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +63 -10
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +238 -7
- package/esm2020/lib/admin/form/designer/designer.component.mjs +492 -10
- package/esm2020/lib/admin/form/form.resolve.service.mjs +6 -6
- package/esm2020/lib/admin/form/workflow/node.component.mjs +86 -15
- package/esm2020/lib/admin/form/workflow/role-node.component.mjs +152 -13
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +219 -18
- package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +160 -13
- package/esm2020/lib/admin/patterns/patterns.component.mjs +280 -19
- package/esm2020/lib/admin/permissions/permissions.component.mjs +129 -13
- package/esm2020/lib/admin/positions/positions-popup.component.mjs +77 -13
- package/esm2020/lib/admin/positions/positions.component.mjs +605 -31
- package/esm2020/lib/admin/profiler/outofoffice.component.mjs +184 -16
- package/esm2020/lib/admin/profiler/profiler.component.mjs +268 -21
- package/esm2020/lib/admin/system.service.mjs +6 -6
- package/esm2020/lib/admin/utility-wrapper.component.mjs +9 -9
- package/esm2020/lib/admin/utility.pane.component.mjs +23 -15
- package/esm2020/lib/app.component.mjs +19 -19
- package/esm2020/lib/bizdoc.module.mjs +30 -29
- package/esm2020/lib/browse/browse-items.component.mjs +629 -40
- package/esm2020/lib/browse/browse.mobile.component.mjs +218 -13
- package/esm2020/lib/browse/browse.pane.component.mjs +214 -18
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +161 -11
- package/esm2020/lib/browse/filter/filter.component.mjs +184 -27
- package/esm2020/lib/browse/folders-menu.component.mjs +74 -11
- package/esm2020/lib/chat/chat-info.mjs +10 -10
- package/esm2020/lib/chat/chat.mobile.component.mjs +32 -11
- package/esm2020/lib/chat/chat.service.mjs +7 -7
- package/esm2020/lib/chat/contacts.component.mjs +134 -15
- package/esm2020/lib/chat/contacts.pane.component.mjs +16 -12
- package/esm2020/lib/chat/conversation.component.mjs +128 -21
- package/esm2020/lib/chat/conversation.pane.component.mjs +13 -9
- package/esm2020/lib/compose/action/action-picker.component.mjs +107 -14
- package/esm2020/lib/compose/action/action.dialog.mjs +78 -13
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +58 -12
- package/esm2020/lib/compose/action/assign-action.component.mjs +93 -10
- package/esm2020/lib/compose/action/moveto-action.component.mjs +110 -10
- package/esm2020/lib/compose/action/return-action.component.mjs +55 -7
- package/esm2020/lib/compose/attachments/attachments.component.mjs +140 -13
- package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +147 -58
- package/esm2020/lib/compose/attachments/progress-button.directive.mjs +9 -9
- package/esm2020/lib/compose/box/box.component.mjs +160 -7
- package/esm2020/lib/compose/can-deactivate-changes.service.mjs +6 -6
- package/esm2020/lib/compose/comments/comment.component.mjs +189 -26
- package/esm2020/lib/compose/comments/comments.component.mjs +111 -22
- package/esm2020/lib/compose/comments/comments.pane.component.mjs +21 -12
- package/esm2020/lib/compose/comments/edit-comment.component.mjs +16 -10
- package/esm2020/lib/compose/comments/edits.component.mjs +47 -10
- package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +37 -10
- package/esm2020/lib/compose/comments/votes.component.mjs +45 -10
- package/esm2020/lib/compose/compose-resolve.service.mjs +11 -11
- package/esm2020/lib/compose/compose.mobile.component.mjs +297 -19
- package/esm2020/lib/compose/compose.pane.component.mjs +336 -36
- package/esm2020/lib/compose/copy/copy.dialog.mjs +58 -7
- package/esm2020/lib/compose/dismiss.service.mjs +6 -6
- package/esm2020/lib/compose/document-resolver.service.mjs +6 -6
- package/esm2020/lib/compose/document.component.mjs +28 -12
- package/esm2020/lib/compose/document.mobile.component.mjs +13 -9
- package/esm2020/lib/compose/document.pane.component.mjs +13 -9
- package/esm2020/lib/compose/events/events.component.mjs +33 -9
- package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +40 -7
- package/esm2020/lib/compose/form.component.mjs +119 -40
- package/esm2020/lib/compose/new-menu.component.mjs +45 -9
- package/esm2020/lib/compose/privilage.directive.mjs +31 -31
- package/esm2020/lib/compose/recipient-resolver.service.mjs +6 -6
- package/esm2020/lib/compose/state.component.mjs +9 -9
- package/esm2020/lib/compose/tag/tags.component.mjs +73 -16
- package/esm2020/lib/compose/trace/flow.component.mjs +13 -13
- package/esm2020/lib/compose/trace/people.component.mjs +23 -13
- package/esm2020/lib/compose/trace/trace.base.mjs +6 -6
- package/esm2020/lib/compose/trace/trace.component.mjs +306 -11
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +31 -15
- package/esm2020/lib/compose/version-compare/version-compare.component.mjs +14 -14
- package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +64 -64
- package/esm2020/lib/compose/version-compare/version.pane.component.mjs +66 -9
- package/esm2020/lib/core/NgComponentOutlet.mjs +18 -18
- package/esm2020/lib/core/account.service.mjs +7 -7
- package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +7 -7
- package/esm2020/lib/core/avatar/avatar.component.mjs +43 -16
- package/esm2020/lib/core/component-factory-resolver.mjs +6 -6
- package/esm2020/lib/core/controls/address.input.mjs +74 -45
- package/esm2020/lib/core/controls/auto-complete.input.mjs +129 -65
- package/esm2020/lib/core/controls/combination-picker-body.mjs +156 -20
- package/esm2020/lib/core/controls/combination-picker.mjs +71 -52
- package/esm2020/lib/core/controls/combination-pool.mjs +76 -20
- package/esm2020/lib/core/controls/file.input.mjs +316 -51
- package/esm2020/lib/core/controls/select.input.mjs +115 -59
- package/esm2020/lib/core/controls/time-picker.mjs +49 -25
- package/esm2020/lib/core/controls/timespan.input.mjs +59 -37
- package/esm2020/lib/core/datasource.service.mjs +7 -7
- package/esm2020/lib/core/guide/guide.component.mjs +88 -19
- package/esm2020/lib/core/guide/guide.service.mjs +10 -10
- package/esm2020/lib/core/guide/help-tip.component.mjs +36 -14
- package/esm2020/lib/core/http.interceptor.mjs +12 -12
- package/esm2020/lib/core/hub.service.mjs +9 -9
- package/esm2020/lib/core/identity/identity.component.mjs +38 -16
- package/esm2020/lib/core/info/attachment-info.service.mjs +6 -6
- package/esm2020/lib/core/info/document-info.service.mjs +6 -6
- package/esm2020/lib/core/info/location-info.component.mjs +12 -12
- package/esm2020/lib/core/info/map-info.mjs +6 -6
- package/esm2020/lib/core/layout/autocomplete.field.mjs +66 -22
- package/esm2020/lib/core/layout/checkbox.field.mjs +56 -18
- package/esm2020/lib/core/layout/checkbox.mjs +33 -19
- package/esm2020/lib/core/layout/date-range.field.mjs +47 -22
- package/esm2020/lib/core/layout/date.field.mjs +67 -23
- package/esm2020/lib/core/layout/expression.field.mjs +66 -24
- package/esm2020/lib/core/layout/file.field.mjs +64 -20
- package/esm2020/lib/core/layout/html.field.mjs +60 -18
- package/esm2020/lib/core/layout/input.base.mjs +6 -6
- package/esm2020/lib/core/layout/input.field.mjs +64 -20
- package/esm2020/lib/core/layout/layout.component.mjs +34 -26
- package/esm2020/lib/core/layout/numeric.field.mjs +72 -21
- package/esm2020/lib/core/layout/select.field.mjs +100 -33
- package/esm2020/lib/core/layout/switch.field.mjs +56 -18
- package/esm2020/lib/core/layout/textarea.field.mjs +60 -18
- package/esm2020/lib/core/layout/timespan.field.mjs +67 -22
- package/esm2020/lib/core/lottie-animation.mjs +22 -20
- package/esm2020/lib/core/mailbox.service.mjs +7 -7
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/none.component.mjs +39 -17
- package/esm2020/lib/core/pipes/action.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/calendar.pipe.mjs +10 -10
- package/esm2020/lib/core/pipes/date-format.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/daterange.pipe.mjs +13 -13
- package/esm2020/lib/core/pipes/difference.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/duration-format.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/duration.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/form.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/join.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/role.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/sort.pipe.mjs +17 -17
- package/esm2020/lib/core/pipes/state.pipe.mjs +7 -7
- package/esm2020/lib/core/pipes/time-ago.pipe.mjs +10 -10
- package/esm2020/lib/core/pipes/type-value.pipe.mjs +9 -9
- package/esm2020/lib/core/pipes/user-name.pipe.mjs +7 -7
- package/esm2020/lib/core/popup/popup.component.mjs +26 -13
- package/esm2020/lib/core/popup/popup.service.mjs +7 -7
- package/esm2020/lib/core/popup/tooltip.directive.mjs +34 -34
- package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +34 -10
- package/esm2020/lib/core/prompt/mask/mask.component.mjs +18 -10
- package/esm2020/lib/core/prompt.service.mjs +7 -7
- package/esm2020/lib/core/router.mjs +11 -11
- package/esm2020/lib/core/save-changes.dialog.mjs +43 -7
- package/esm2020/lib/core/session.service.mjs +10 -10
- package/esm2020/lib/core/slots/router.directive.mjs +29 -27
- package/esm2020/lib/core/slots/router.service.mjs +7 -7
- package/esm2020/lib/core/slots/slots.component.mjs +296 -41
- package/esm2020/lib/core/tagging/documents.component.mjs +33 -7
- package/esm2020/lib/core/tagging/edit-input.component.mjs +141 -38
- package/esm2020/lib/core/tagging/emoji.component.mjs +15 -12
- package/esm2020/lib/core/tagging/tagging-item.directive.mjs +31 -23
- package/esm2020/lib/core/tagging/tagging.component-base.mjs +14 -9
- package/esm2020/lib/core/tagging/tagging.directive.mjs +23 -21
- package/esm2020/lib/core/tagging/tagging.pipe.mjs +7 -7
- package/esm2020/lib/core/tagging/users.component.mjs +37 -7
- package/esm2020/lib/core/translate.service.mjs +7 -7
- package/esm2020/lib/core/translations.mjs +4 -1
- package/esm2020/lib/core/window-title.service.mjs +10 -10
- package/esm2020/lib/cube/accum/accum.component.mjs +41 -39
- package/esm2020/lib/cube/chart/chart.component.mjs +47 -45
- package/esm2020/lib/cube/cube-info.service.mjs +6 -6
- package/esm2020/lib/cube/cube-menu.component.mjs +70 -11
- package/esm2020/lib/cube/cube-view.component.mjs +34 -32
- package/esm2020/lib/cube/cube.service.mjs +10 -10
- package/esm2020/lib/cube/explore/document-item.component.mjs +15 -11
- package/esm2020/lib/cube/explore/explore-item.component.mjs +11 -11
- package/esm2020/lib/cube/explore/explore-items.component.mjs +167 -37
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +65 -12
- package/esm2020/lib/cube/explore/item-resolver.service.mjs +11 -11
- package/esm2020/lib/cube/explore/item.pane.component.mjs +13 -9
- package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +59 -15
- package/esm2020/lib/cube/filter/filter.component.mjs +153 -17
- package/esm2020/lib/cube/grid/grid.component.mjs +33 -31
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +39 -37
- package/esm2020/lib/cube/matrix/matrix.base.mjs +6 -6
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +112 -10
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +123 -12
- package/esm2020/lib/cube/matrix/popup.component.mjs +120 -16
- package/esm2020/lib/cube/matrix/table.component.mjs +178 -45
- package/esm2020/lib/cube/parallel/parallel.component.mjs +57 -28
- package/esm2020/lib/cube/pivot/pivot.component.mjs +43 -40
- package/esm2020/lib/cube/sum/sum.component.mjs +238 -32
- package/esm2020/lib/cube/view-base.mjs +6 -6
- package/esm2020/lib/cube/view.mobile.component.mjs +177 -19
- package/esm2020/lib/cube/view.pane.component.mjs +109 -15
- package/esm2020/lib/dashboard/actions/actions.widget.mjs +28 -21
- package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +17 -15
- package/esm2020/lib/dashboard/cube/compare.widget.mjs +25 -18
- package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +6 -6
- package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +10 -10
- package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +17 -15
- package/esm2020/lib/dashboard/cube/documents.widget.mjs +114 -19
- package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +13 -7
- package/esm2020/lib/dashboard/dashboard.component.mjs +90 -12
- package/esm2020/lib/dashboard/dashboard.pane.component.mjs +9 -7
- package/esm2020/lib/dashboard/recents/recents.widget.mjs +164 -19
- package/esm2020/lib/dashboard/score/activity.widget.mjs +18 -13
- package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +25 -18
- package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +26 -19
- package/esm2020/lib/dashboard/score/pending-results.widget.mjs +143 -19
- package/esm2020/lib/dashboard/score/personal-score.widget.mjs +23 -18
- package/esm2020/lib/dashboard/widget-item.component.mjs +17 -15
- package/esm2020/lib/desktop.module.mjs +58 -57
- package/esm2020/lib/home/about/about.dialog.mjs +97 -7
- package/esm2020/lib/home/home-base.component.mjs +6 -6
- package/esm2020/lib/home/home.desktop.component.mjs +336 -16
- package/esm2020/lib/home/home.mobile.component.mjs +310 -16
- package/esm2020/lib/home/notifications/notifications.component.mjs +78 -7
- package/esm2020/lib/home/options/options.component.mjs +171 -7
- package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +40 -10
- package/esm2020/lib/home/search.service.mjs +6 -6
- package/esm2020/lib/home/sign/sign.component.mjs +32 -7
- package/esm2020/lib/home/tools.component.mjs +87 -13
- package/esm2020/lib/impersonate/impersonate.component.mjs +61 -7
- package/esm2020/lib/mobile.module.mjs +34 -33
- package/esm2020/lib/modules/chart.module.mjs +22 -21
- package/esm2020/lib/modules/circular-gauge.module.mjs +13 -12
- package/esm2020/lib/modules/datepicker.intl.mjs +6 -6
- package/esm2020/lib/modules/dayjs.module.mjs +11 -11
- package/esm2020/lib/modules/diagram.module.mjs +24 -23
- package/esm2020/lib/modules/gantt.module.mjs +13 -12
- package/esm2020/lib/modules/grid.module.mjs +16 -15
- package/esm2020/lib/modules/material.module.mjs +87 -86
- package/esm2020/lib/modules/paginator.intl.mjs +6 -6
- package/esm2020/lib/modules/pivot.module.mjs +17 -16
- package/esm2020/lib/modules/schedule.module.mjs +15 -14
- package/esm2020/lib/modules/spreadsheet.module.mjs +21 -20
- package/esm2020/lib/modules/stepper.intl.mjs +6 -6
- package/esm2020/lib/modules/texteditor.module.mjs +19 -18
- package/esm2020/lib/notifications/filter.component.mjs +22 -7
- package/esm2020/lib/notifications/notifications-table.component.mjs +214 -10
- package/esm2020/lib/notifications/notifications.mobile.component.mjs +11 -9
- package/esm2020/lib/notifications/notifications.pane.component.mjs +14 -12
- package/esm2020/lib/notifications/notifications.service.mjs +6 -6
- package/esm2020/lib/notifications/types/commented.notification.mjs +42 -15
- package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +25 -15
- package/esm2020/lib/notifications/types/escalated.notification.mjs +24 -12
- package/esm2020/lib/notifications/types/liked.notification.mjs +42 -15
- package/esm2020/lib/notifications/types/long-running-task.notification.mjs +17 -13
- package/esm2020/lib/notifications/types/notification-base.mjs +11 -9
- package/esm2020/lib/notifications/types/nudge.notification.mjs +18 -12
- package/esm2020/lib/notifications/types/state-changed.notification.mjs +18 -10
- package/esm2020/lib/notifications/types/tagged.notification.mjs +26 -14
- package/esm2020/lib/notifications/types/text.notification.mjs +14 -10
- package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +24 -15
- package/esm2020/lib/options/options.component.mjs +350 -25
- package/esm2020/lib/options/options.service.mjs +6 -6
- package/esm2020/lib/reports/arguments-component.mjs +20 -20
- package/esm2020/lib/reports/cube/documents.component.mjs +9 -9
- package/esm2020/lib/reports/cube/grid-documents.component.mjs +77 -10
- package/esm2020/lib/reports/cube/table-documents.component.mjs +175 -13
- package/esm2020/lib/reports/cube/usage-args.component.mjs +13 -7
- package/esm2020/lib/reports/cube/usage-base.mjs +6 -6
- package/esm2020/lib/reports/cube/usage-chart.component.mjs +15 -13
- package/esm2020/lib/reports/cube/usage-pivot.component.mjs +21 -14
- package/esm2020/lib/reports/cube/usage.component.mjs +9 -9
- package/esm2020/lib/reports/report-viewer.component.mjs +36 -20
- package/esm2020/lib/reports/report.mobile.component.mjs +105 -13
- package/esm2020/lib/reports/report.pane.component.mjs +92 -15
- package/esm2020/lib/reports/reports-menu.component.mjs +40 -11
- package/esm2020/lib/reports/substitution/substitution.component.mjs +157 -10
- package/esm2020/lib/reports/table/table-view.component.mjs +74 -16
- package/esm2020/lib/reports/tasks/tasks.component.mjs +38 -10
- package/esm2020/lib/scheduler/schedule.component.mjs +110 -14
- package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +15 -9
- package/esm2020/lib/scheduler/scheduler.pane.component.mjs +19 -12
- package/esm2020/lib/shared.module.mjs +197 -196
- package/esm2020/lib/system.module.mjs +64 -62
- package/esm2020/lib/views/cube/chart.component.mjs +45 -7
- package/esm2020/lib/views/cube/cube-base.mjs +6 -6
- package/esm2020/lib/views/cube/explore.component.mjs +128 -7
- package/esm2020/lib/views/cube/matrix.component.mjs +164 -10
- package/esm2020/lib/views/cube/parallel.component.mjs +20 -7
- package/esm2020/lib/views/cube/pivot.component.mjs +20 -7
- package/esm2020/lib/views/cube/sum.component.mjs +116 -7
- package/esm2020/lib/views/cube/view.component.mjs +137 -10
- package/esm2020/lib/views/timeline/timeline.component.exp.mjs +14 -12
- package/esm2020/lib/views/view-item.component.mjs +20 -18
- package/esm2020/lib/views/views.component.mjs +31 -12
- package/esm2020/lib/views/views.mobile.component.mjs +11 -7
- package/esm2020/lib/views/views.pane.component.mjs +19 -10
- package/fesm2015/bizdoc-core.mjs +25737 -2457
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +24051 -5129
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/admin/admin-dismiss.service.d.ts +1 -0
- package/lib/admin/admin-dismiss.service.d.ts.map +1 -0
- package/lib/admin/admin-menu.component.d.ts +1 -0
- package/lib/admin/admin-menu.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts +36 -0
- package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/designer-element.component.d.ts +6 -2
- package/lib/admin/configuration-designer/designer-element.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/designer.base.d.ts +25 -3
- package/lib/admin/configuration-designer/designer.base.d.ts.map +1 -0
- package/lib/admin/configuration-designer/designer.component.d.ts +1 -0
- package/lib/admin/configuration-designer/designer.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/action.component.d.ts +16 -1
- package/lib/admin/configuration-designer/elements/action.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/box-form.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/box-form.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/cube-index-utility.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/cube-index-utility.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/cube-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/cube-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/cube.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/cube.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/documents-report.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/documents-report.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/explore-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/explore-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/folder.component.d.ts +13 -1
- package/lib/admin/configuration-designer/elements/folder.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/form.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/form.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/guide.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/guide.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/matrix-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/matrix-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/parallel-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/parallel-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/performance-widget.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/performance-widget.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/pivot-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/pivot-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/report.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/report.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/role.component.d.ts +3 -0
- package/lib/admin/configuration-designer/elements/role.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/rule.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/rule.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/state.component.d.ts +5 -0
- package/lib/admin/configuration-designer/elements/state.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/sum-view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/sum-view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/type.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/type.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/usage-report.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/usage-report.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/utility.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/utility.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/view.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/view.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/elements/widget.component.d.ts +1 -0
- package/lib/admin/configuration-designer/elements/widget.component.d.ts.map +1 -0
- package/lib/admin/configuration-designer/icon-picker.component.d.ts +1 -0
- package/lib/admin/configuration-designer/icon-picker.component.d.ts.map +1 -0
- package/lib/admin/core/ace.input.d.ts +1 -0
- package/lib/admin/core/ace.input.d.ts.map +1 -0
- package/lib/admin/core/color-picker.input.d.ts +1 -0
- package/lib/admin/core/color-picker.input.d.ts.map +1 -0
- package/lib/admin/core/search.input.d.ts +1 -0
- package/lib/admin/core/search.input.d.ts.map +1 -0
- package/lib/admin/diff/configuration-diff.component.d.ts +1 -0
- package/lib/admin/diff/configuration-diff.component.d.ts.map +1 -0
- package/lib/admin/document-trace/document-trace.component.d.ts +1 -0
- package/lib/admin/document-trace/document-trace.component.d.ts.map +1 -0
- package/lib/admin/document-trace/reassign.dialog.d.ts +1 -0
- package/lib/admin/document-trace/reassign.dialog.d.ts.map +1 -0
- package/lib/admin/document-trace/timeline.d.ts +1 -0
- package/lib/admin/document-trace/timeline.d.ts.map +1 -0
- package/lib/admin/document-trace/trace-element.component.d.ts +1 -0
- package/lib/admin/document-trace/trace-element.component.d.ts.map +1 -0
- package/lib/admin/form/designer/designer.component.d.ts +1 -0
- package/lib/admin/form/designer/designer.component.d.ts.map +1 -0
- package/lib/admin/form/form.resolve.service.d.ts +1 -0
- package/lib/admin/form/form.resolve.service.d.ts.map +1 -0
- package/lib/admin/form/workflow/node-ref.d.ts +1 -0
- package/lib/admin/form/workflow/node-ref.d.ts.map +1 -0
- package/lib/admin/form/workflow/node.component.d.ts +1 -0
- package/lib/admin/form/workflow/node.component.d.ts.map +1 -0
- package/lib/admin/form/workflow/role-node.component.d.ts +1 -0
- package/lib/admin/form/workflow/role-node.component.d.ts.map +1 -0
- package/lib/admin/form/workflow/workflow.component.d.ts +1 -0
- package/lib/admin/form/workflow/workflow.component.d.ts.map +1 -0
- package/lib/admin/indices/manage-cube-index.component.d.ts +1 -0
- package/lib/admin/indices/manage-cube-index.component.d.ts.map +1 -0
- package/lib/admin/patterns/patterns.component.d.ts +1 -0
- package/lib/admin/patterns/patterns.component.d.ts.map +1 -0
- package/lib/admin/permissions/permissions.component.d.ts +1 -0
- package/lib/admin/permissions/permissions.component.d.ts.map +1 -0
- package/lib/admin/positions/positions-popup.component.d.ts +1 -0
- package/lib/admin/positions/positions-popup.component.d.ts.map +1 -0
- package/lib/admin/positions/positions.component.d.ts +1 -0
- package/lib/admin/positions/positions.component.d.ts.map +1 -0
- package/lib/admin/profiler/outofoffice.component.d.ts +1 -0
- package/lib/admin/profiler/outofoffice.component.d.ts.map +1 -0
- package/lib/admin/profiler/profiler.component.d.ts +1 -0
- package/lib/admin/profiler/profiler.component.d.ts.map +1 -0
- package/lib/admin/system.service.d.ts +1 -0
- package/lib/admin/system.service.d.ts.map +1 -0
- package/lib/admin/utility-ref.d.ts +1 -0
- package/lib/admin/utility-ref.d.ts.map +1 -0
- package/lib/admin/utility-wrapper.component.d.ts +1 -0
- package/lib/admin/utility-wrapper.component.d.ts.map +1 -0
- package/lib/admin/utility.pane.component.d.ts +1 -0
- package/lib/admin/utility.pane.component.d.ts.map +1 -0
- package/lib/app.component.d.ts +1 -0
- package/lib/app.component.d.ts.map +1 -0
- package/lib/bizdoc.module.d.ts +1 -0
- package/lib/bizdoc.module.d.ts.map +1 -0
- package/lib/browse/browse-items.component.d.ts +1 -0
- package/lib/browse/browse-items.component.d.ts.map +1 -0
- package/lib/browse/browse.mobile.component.d.ts +1 -0
- package/lib/browse/browse.mobile.component.d.ts.map +1 -0
- package/lib/browse/browse.pane.component.d.ts +1 -0
- package/lib/browse/browse.pane.component.d.ts.map +1 -0
- package/lib/browse/expanded-item/expanded-item.component.d.ts +1 -0
- package/lib/browse/expanded-item/expanded-item.component.d.ts.map +1 -0
- package/lib/browse/filter/filter.component.d.ts +1 -0
- package/lib/browse/filter/filter.component.d.ts.map +1 -0
- package/lib/browse/folders-menu.component.d.ts +1 -0
- package/lib/browse/folders-menu.component.d.ts.map +1 -0
- package/lib/chat/chat-info.d.ts +1 -0
- package/lib/chat/chat-info.d.ts.map +1 -0
- package/lib/chat/chat.mobile.component.d.ts +1 -0
- package/lib/chat/chat.mobile.component.d.ts.map +1 -0
- package/lib/chat/chat.service.d.ts +1 -0
- package/lib/chat/chat.service.d.ts.map +1 -0
- package/lib/chat/contacts.component.d.ts +1 -0
- package/lib/chat/contacts.component.d.ts.map +1 -0
- package/lib/chat/contacts.pane.component.d.ts +1 -0
- package/lib/chat/contacts.pane.component.d.ts.map +1 -0
- package/lib/chat/conversation.component.d.ts +1 -0
- package/lib/chat/conversation.component.d.ts.map +1 -0
- package/lib/chat/conversation.pane.component.d.ts +1 -0
- package/lib/chat/conversation.pane.component.d.ts.map +1 -0
- package/lib/compose/action/action-picker.component.d.ts +1 -0
- package/lib/compose/action/action-picker.component.d.ts.map +1 -0
- package/lib/compose/action/action-ref.d.ts +1 -0
- package/lib/compose/action/action-ref.d.ts.map +1 -0
- package/lib/compose/action/action.base.d.ts +1 -0
- package/lib/compose/action/action.base.d.ts.map +1 -0
- package/lib/compose/action/action.dialog.d.ts +1 -0
- package/lib/compose/action/action.dialog.d.ts.map +1 -0
- package/lib/compose/action/action.pane.dialog.exp.d.ts +1 -0
- package/lib/compose/action/action.pane.dialog.exp.d.ts.map +1 -0
- package/lib/compose/action/assign-action.component.d.ts +1 -0
- package/lib/compose/action/assign-action.component.d.ts.map +1 -0
- package/lib/compose/action/moveto-action.component.d.ts +1 -0
- package/lib/compose/action/moveto-action.component.d.ts.map +1 -0
- package/lib/compose/action/return-action.component.d.ts +1 -0
- package/lib/compose/action/return-action.component.d.ts.map +1 -0
- package/lib/compose/attachments/attachments.component.d.ts +1 -0
- package/lib/compose/attachments/attachments.component.d.ts.map +1 -0
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts +1 -0
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts.map +1 -0
- package/lib/compose/attachments/progress-button.directive.d.ts +1 -0
- package/lib/compose/attachments/progress-button.directive.d.ts.map +1 -0
- package/lib/compose/box/box.component.d.ts +1 -0
- package/lib/compose/box/box.component.d.ts.map +1 -0
- package/lib/compose/can-deactivate-changes.service.d.ts +1 -0
- package/lib/compose/can-deactivate-changes.service.d.ts.map +1 -0
- package/lib/compose/comments/comment.component.d.ts +1 -0
- package/lib/compose/comments/comment.component.d.ts.map +1 -0
- package/lib/compose/comments/comments.component.d.ts +1 -0
- package/lib/compose/comments/comments.component.d.ts.map +1 -0
- package/lib/compose/comments/comments.pane.component.d.ts +1 -0
- package/lib/compose/comments/comments.pane.component.d.ts.map +1 -0
- package/lib/compose/comments/edit-comment.component.d.ts +1 -0
- package/lib/compose/comments/edit-comment.component.d.ts.map +1 -0
- package/lib/compose/comments/edits.component.d.ts +1 -0
- package/lib/compose/comments/edits.component.d.ts.map +1 -0
- package/lib/compose/comments/quick-comment.component.exp.d.ts +1 -0
- package/lib/compose/comments/quick-comment.component.exp.d.ts.map +1 -0
- package/lib/compose/comments/votes.component.d.ts +1 -0
- package/lib/compose/comments/votes.component.d.ts.map +1 -0
- package/lib/compose/compose-resolve.service.d.ts +1 -0
- package/lib/compose/compose-resolve.service.d.ts.map +1 -0
- package/lib/compose/compose.mobile.component.d.ts +1 -0
- package/lib/compose/compose.mobile.component.d.ts.map +1 -0
- package/lib/compose/compose.pane.component.d.ts +1 -0
- package/lib/compose/compose.pane.component.d.ts.map +1 -0
- package/lib/compose/copy/copy.dialog.d.ts +1 -0
- package/lib/compose/copy/copy.dialog.d.ts.map +1 -0
- package/lib/compose/dismiss.service.d.ts +1 -0
- package/lib/compose/dismiss.service.d.ts.map +1 -0
- package/lib/compose/document-resolver.service.d.ts +1 -0
- package/lib/compose/document-resolver.service.d.ts.map +1 -0
- package/lib/compose/document.component.d.ts +1 -0
- package/lib/compose/document.component.d.ts.map +1 -0
- package/lib/compose/document.mobile.component.d.ts +1 -0
- package/lib/compose/document.mobile.component.d.ts.map +1 -0
- package/lib/compose/document.pane.component.d.ts +1 -0
- package/lib/compose/document.pane.component.d.ts.map +1 -0
- package/lib/compose/events/events.component.d.ts +1 -0
- package/lib/compose/events/events.component.d.ts.map +1 -0
- package/lib/compose/form-ref.d.ts +1 -0
- package/lib/compose/form-ref.d.ts.map +1 -0
- package/lib/compose/form-selector/form-selector.sheet.d.ts +1 -0
- package/lib/compose/form-selector/form-selector.sheet.d.ts.map +1 -0
- package/lib/compose/form.component.d.ts +1 -0
- package/lib/compose/form.component.d.ts.map +1 -0
- package/lib/compose/new-menu.component.d.ts +1 -0
- package/lib/compose/new-menu.component.d.ts.map +1 -0
- package/lib/compose/privilage.directive.d.ts +1 -0
- package/lib/compose/privilage.directive.d.ts.map +1 -0
- package/lib/compose/recipient-resolver.service.d.ts +1 -0
- package/lib/compose/recipient-resolver.service.d.ts.map +1 -0
- package/lib/compose/state.component.d.ts +1 -0
- package/lib/compose/state.component.d.ts.map +1 -0
- package/lib/compose/tag/tags.component.d.ts +1 -0
- package/lib/compose/tag/tags.component.d.ts.map +1 -0
- package/lib/compose/trace/flow.component.d.ts +1 -0
- package/lib/compose/trace/flow.component.d.ts.map +1 -0
- package/lib/compose/trace/people.component.d.ts +1 -0
- package/lib/compose/trace/people.component.d.ts.map +1 -0
- package/lib/compose/trace/trace.base.d.ts +1 -0
- package/lib/compose/trace/trace.base.d.ts.map +1 -0
- package/lib/compose/trace/trace.component.d.ts +1 -0
- package/lib/compose/trace/trace.component.d.ts.map +1 -0
- package/lib/compose/trace/trace.pane.component.d.ts +1 -0
- package/lib/compose/trace/trace.pane.component.d.ts.map +1 -0
- package/lib/compose/version-compare/version-compare.component.d.ts +1 -0
- package/lib/compose/version-compare/version-compare.component.d.ts.map +1 -0
- package/lib/compose/version-compare/version-compare.directive.d.ts +1 -0
- package/lib/compose/version-compare/version-compare.directive.d.ts.map +1 -0
- package/lib/compose/version-compare/version.pane.component.d.ts +1 -0
- package/lib/compose/version-compare/version.pane.component.d.ts.map +1 -0
- package/lib/core/NgComponentOutlet.d.ts +1 -0
- package/lib/core/NgComponentOutlet.d.ts.map +1 -0
- package/lib/core/account.service.d.ts +1 -0
- package/lib/core/account.service.d.ts.map +1 -0
- package/lib/core/animated-icon/animated-icon.directive.d.ts +1 -0
- package/lib/core/animated-icon/animated-icon.directive.d.ts.map +1 -0
- package/lib/core/animations.d.ts +1 -0
- package/lib/core/animations.d.ts.map +1 -0
- package/lib/core/authentication.d.ts +1 -0
- package/lib/core/authentication.d.ts.map +1 -0
- package/lib/core/avatar/avatar.component.d.ts +1 -0
- package/lib/core/avatar/avatar.component.d.ts.map +1 -0
- package/lib/core/base.d.ts +1 -0
- package/lib/core/base.d.ts.map +1 -0
- package/lib/core/colors.d.ts +1 -0
- package/lib/core/colors.d.ts.map +1 -0
- package/lib/core/component-factory-resolver.d.ts +1 -0
- package/lib/core/component-factory-resolver.d.ts.map +1 -0
- package/lib/core/configuration.d.ts +1 -0
- package/lib/core/configuration.d.ts.map +1 -0
- package/lib/core/controls/address.input.d.ts +1 -0
- package/lib/core/controls/address.input.d.ts.map +1 -0
- package/lib/core/controls/auto-complete.input.d.ts +1 -0
- package/lib/core/controls/auto-complete.input.d.ts.map +1 -0
- package/lib/core/controls/combination-picker-body.d.ts +1 -0
- package/lib/core/controls/combination-picker-body.d.ts.map +1 -0
- package/lib/core/controls/combination-picker.d.ts +1 -0
- package/lib/core/controls/combination-picker.d.ts.map +1 -0
- package/lib/core/controls/combination-pool.d.ts +1 -0
- package/lib/core/controls/combination-pool.d.ts.map +1 -0
- package/lib/core/controls/file.input.d.ts +1 -0
- package/lib/core/controls/file.input.d.ts.map +1 -0
- package/lib/core/controls/select.input.d.ts +1 -0
- package/lib/core/controls/select.input.d.ts.map +1 -0
- package/lib/core/controls/time-picker.d.ts +1 -0
- package/lib/core/controls/time-picker.d.ts.map +1 -0
- package/lib/core/controls/timespan.input.d.ts +1 -0
- package/lib/core/controls/timespan.input.d.ts.map +1 -0
- package/lib/core/datasource.service.d.ts +1 -0
- package/lib/core/datasource.service.d.ts.map +1 -0
- package/lib/core/decorators.d.ts +1 -0
- package/lib/core/decorators.d.ts.map +1 -0
- package/lib/core/firebase.service.d.ts +1 -0
- package/lib/core/firebase.service.d.ts.map +1 -0
- package/lib/core/functions.d.ts +1 -0
- package/lib/core/functions.d.ts.map +1 -0
- package/lib/core/guide/guide.component.d.ts +1 -0
- package/lib/core/guide/guide.component.d.ts.map +1 -0
- package/lib/core/guide/guide.service.d.ts +1 -0
- package/lib/core/guide/guide.service.d.ts.map +1 -0
- package/lib/core/guide/help-tip.component.d.ts +1 -0
- package/lib/core/guide/help-tip.component.d.ts.map +1 -0
- package/lib/core/http.interceptor.d.ts +1 -0
- package/lib/core/http.interceptor.d.ts.map +1 -0
- package/lib/core/hub.service.d.ts +1 -0
- package/lib/core/hub.service.d.ts.map +1 -0
- package/lib/core/identity/identity.component.d.ts +1 -0
- package/lib/core/identity/identity.component.d.ts.map +1 -0
- package/lib/core/info/attachment-info.service.d.ts +1 -0
- package/lib/core/info/attachment-info.service.d.ts.map +1 -0
- package/lib/core/info/document-info.service.d.ts +1 -0
- package/lib/core/info/document-info.service.d.ts.map +1 -0
- package/lib/core/info/location-info.component.d.ts +1 -0
- package/lib/core/info/location-info.component.d.ts.map +1 -0
- package/lib/core/info/map-info.d.ts +1 -0
- package/lib/core/info/map-info.d.ts.map +1 -0
- package/lib/core/layout/autocomplete.field.d.ts +1 -0
- package/lib/core/layout/autocomplete.field.d.ts.map +1 -0
- package/lib/core/layout/checkbox.d.ts +1 -0
- package/lib/core/layout/checkbox.d.ts.map +1 -0
- package/lib/core/layout/checkbox.field.d.ts +1 -0
- package/lib/core/layout/checkbox.field.d.ts.map +1 -0
- package/lib/core/layout/date-range.field.d.ts +1 -0
- package/lib/core/layout/date-range.field.d.ts.map +1 -0
- package/lib/core/layout/date.field.d.ts +1 -0
- package/lib/core/layout/date.field.d.ts.map +1 -0
- package/lib/core/layout/expression.field.d.ts +1 -0
- package/lib/core/layout/expression.field.d.ts.map +1 -0
- package/lib/core/layout/file.field.d.ts +1 -0
- package/lib/core/layout/file.field.d.ts.map +1 -0
- package/lib/core/layout/html.field.d.ts +1 -0
- package/lib/core/layout/html.field.d.ts.map +1 -0
- package/lib/core/layout/input.base.d.ts +1 -0
- package/lib/core/layout/input.base.d.ts.map +1 -0
- package/lib/core/layout/input.field.d.ts +1 -0
- package/lib/core/layout/input.field.d.ts.map +1 -0
- package/lib/core/layout/layout.component.d.ts +1 -0
- package/lib/core/layout/layout.component.d.ts.map +1 -0
- package/lib/core/layout/numeric.field.d.ts +1 -0
- package/lib/core/layout/numeric.field.d.ts.map +1 -0
- package/lib/core/layout/select.field.d.ts +1 -0
- package/lib/core/layout/select.field.d.ts.map +1 -0
- package/lib/core/layout/switch.field.d.ts +1 -0
- package/lib/core/layout/switch.field.d.ts.map +1 -0
- package/lib/core/layout/textarea.field.d.ts +1 -0
- package/lib/core/layout/textarea.field.d.ts.map +1 -0
- package/lib/core/layout/timespan.field.d.ts +1 -0
- package/lib/core/layout/timespan.field.d.ts.map +1 -0
- package/lib/core/lottie-animation.d.ts +1 -0
- package/lib/core/lottie-animation.d.ts.map +1 -0
- package/lib/core/mailbox.service.d.ts +1 -0
- package/lib/core/mailbox.service.d.ts.map +1 -0
- package/lib/core/models.d.ts +6 -4
- package/lib/core/models.d.ts.map +1 -0
- package/lib/core/none.component.d.ts +1 -0
- package/lib/core/none.component.d.ts.map +1 -0
- package/lib/core/pipes/action.pipe.d.ts +1 -0
- package/lib/core/pipes/action.pipe.d.ts.map +1 -0
- package/lib/core/pipes/calendar.pipe.d.ts +1 -0
- package/lib/core/pipes/calendar.pipe.d.ts.map +1 -0
- package/lib/core/pipes/date-format.pipe.d.ts +1 -0
- package/lib/core/pipes/date-format.pipe.d.ts.map +1 -0
- package/lib/core/pipes/daterange.pipe.d.ts +1 -0
- package/lib/core/pipes/daterange.pipe.d.ts.map +1 -0
- package/lib/core/pipes/difference.pipe.d.ts +1 -0
- package/lib/core/pipes/difference.pipe.d.ts.map +1 -0
- package/lib/core/pipes/duration-format.pipe.d.ts +1 -0
- package/lib/core/pipes/duration-format.pipe.d.ts.map +1 -0
- package/lib/core/pipes/duration.pipe.d.ts +1 -0
- package/lib/core/pipes/duration.pipe.d.ts.map +1 -0
- package/lib/core/pipes/form.pipe.d.ts +1 -0
- package/lib/core/pipes/form.pipe.d.ts.map +1 -0
- package/lib/core/pipes/join.pipe.d.ts +1 -0
- package/lib/core/pipes/join.pipe.d.ts.map +1 -0
- package/lib/core/pipes/role.pipe.d.ts +1 -0
- package/lib/core/pipes/role.pipe.d.ts.map +1 -0
- package/lib/core/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/core/pipes/sort.pipe.d.ts +1 -0
- package/lib/core/pipes/sort.pipe.d.ts.map +1 -0
- package/lib/core/pipes/state.pipe.d.ts +1 -0
- package/lib/core/pipes/state.pipe.d.ts.map +1 -0
- package/lib/core/pipes/time-ago.pipe.d.ts +1 -0
- package/lib/core/pipes/time-ago.pipe.d.ts.map +1 -0
- package/lib/core/pipes/translate.pipe.d.ts.map +1 -0
- package/lib/core/pipes/type-value.pipe.d.ts +1 -0
- package/lib/core/pipes/type-value.pipe.d.ts.map +1 -0
- package/lib/core/pipes/user-name.pipe.d.ts +1 -0
- package/lib/core/pipes/user-name.pipe.d.ts.map +1 -0
- package/lib/core/popup/popup-ref.d.ts +1 -0
- package/lib/core/popup/popup-ref.d.ts.map +1 -0
- package/lib/core/popup/popup.component.d.ts +1 -0
- package/lib/core/popup/popup.component.d.ts.map +1 -0
- package/lib/core/popup/popup.service.d.ts +1 -0
- package/lib/core/popup/popup.service.d.ts.map +1 -0
- package/lib/core/popup/tooltip.directive.d.ts +1 -0
- package/lib/core/popup/tooltip.directive.d.ts.map +1 -0
- package/lib/core/prompt/ask/ask.dialog.d.ts +1 -0
- package/lib/core/prompt/ask/ask.dialog.d.ts.map +1 -0
- package/lib/core/prompt/mask/mask.component.d.ts +1 -0
- package/lib/core/prompt/mask/mask.component.d.ts.map +1 -0
- package/lib/core/prompt.service.d.ts +1 -0
- package/lib/core/prompt.service.d.ts.map +1 -0
- package/lib/core/router.d.ts +1 -0
- package/lib/core/router.d.ts.map +1 -0
- package/lib/core/save-changes.dialog.d.ts +1 -0
- package/lib/core/save-changes.dialog.d.ts.map +1 -0
- package/lib/core/session.service.d.ts +1 -0
- package/lib/core/session.service.d.ts.map +1 -0
- package/lib/core/slots/pane-ref.d.ts +1 -0
- package/lib/core/slots/pane-ref.d.ts.map +1 -0
- package/lib/core/slots/router.directive.d.ts +1 -0
- package/lib/core/slots/router.directive.d.ts.map +1 -0
- package/lib/core/slots/router.service.d.ts +1 -0
- package/lib/core/slots/router.service.d.ts.map +1 -0
- package/lib/core/slots/slots.component.d.ts +1 -0
- package/lib/core/slots/slots.component.d.ts.map +1 -0
- package/lib/core/tagging/documents.component.d.ts +1 -0
- package/lib/core/tagging/documents.component.d.ts.map +1 -0
- package/lib/core/tagging/edit-input.component.d.ts +1 -0
- package/lib/core/tagging/edit-input.component.d.ts.map +1 -0
- package/lib/core/tagging/emoji.component.d.ts +1 -0
- package/lib/core/tagging/emoji.component.d.ts.map +1 -0
- package/lib/core/tagging/tagging-item.directive.d.ts +1 -0
- package/lib/core/tagging/tagging-item.directive.d.ts.map +1 -0
- package/lib/core/tagging/tagging.component-base.d.ts +1 -0
- package/lib/core/tagging/tagging.component-base.d.ts.map +1 -0
- package/lib/core/tagging/tagging.directive.d.ts +1 -0
- package/lib/core/tagging/tagging.directive.d.ts.map +1 -0
- package/lib/core/tagging/tagging.pipe.d.ts +1 -0
- package/lib/core/tagging/tagging.pipe.d.ts.map +1 -0
- package/lib/core/tagging/users.component.d.ts +1 -0
- package/lib/core/tagging/users.component.d.ts.map +1 -0
- package/lib/core/translate.service.d.ts +1 -0
- package/lib/core/translate.service.d.ts.map +1 -0
- package/lib/core/translations.d.ts +4 -0
- package/lib/core/translations.d.ts.map +1 -0
- package/lib/core/window-title.service.d.ts +1 -0
- package/lib/core/window-title.service.d.ts.map +1 -0
- package/lib/cube/accum/accum.component.d.ts +1 -0
- package/lib/cube/accum/accum.component.d.ts.map +1 -0
- package/lib/cube/chart/chart.component.d.ts +1 -0
- package/lib/cube/chart/chart.component.d.ts.map +1 -0
- package/lib/cube/cube-info.service.d.ts +1 -0
- package/lib/cube/cube-info.service.d.ts.map +1 -0
- package/lib/cube/cube-menu.component.d.ts +1 -0
- package/lib/cube/cube-menu.component.d.ts.map +1 -0
- package/lib/cube/cube-view.component.d.ts +1 -0
- package/lib/cube/cube-view.component.d.ts.map +1 -0
- package/lib/cube/cube.service.d.ts +1 -0
- package/lib/cube/cube.service.d.ts.map +1 -0
- package/lib/cube/declarations.d.ts +1 -0
- package/lib/cube/declarations.d.ts.map +1 -0
- package/lib/cube/explore/document-item.component.d.ts +1 -0
- package/lib/cube/explore/document-item.component.d.ts.map +1 -0
- package/lib/cube/explore/explore-item.component.d.ts +1 -0
- package/lib/cube/explore/explore-item.component.d.ts.map +1 -0
- package/lib/cube/explore/explore-items.component.d.ts +1 -0
- package/lib/cube/explore/explore-items.component.d.ts.map +1 -0
- package/lib/cube/explore/explore.pane.component.d.ts +1 -0
- package/lib/cube/explore/explore.pane.component.d.ts.map +1 -0
- package/lib/cube/explore/item-resolver.service.d.ts +1 -0
- package/lib/cube/explore/item-resolver.service.d.ts.map +1 -0
- package/lib/cube/explore/item.pane.component.d.ts +1 -0
- package/lib/cube/explore/item.pane.component.d.ts.map +1 -0
- package/lib/cube/filter/filter-tags.component.exp.d.ts +1 -0
- package/lib/cube/filter/filter-tags.component.exp.d.ts.map +1 -0
- package/lib/cube/filter/filter.component.d.ts +1 -0
- package/lib/cube/filter/filter.component.d.ts.map +1 -0
- package/lib/cube/grid/grid.component.d.ts +1 -0
- package/lib/cube/grid/grid.component.d.ts.map +1 -0
- package/lib/cube/grid/spreadsheet.component.d.ts +1 -0
- package/lib/cube/grid/spreadsheet.component.d.ts.map +1 -0
- package/lib/cube/matrix/matrix.base.d.ts +1 -0
- package/lib/cube/matrix/matrix.base.d.ts.map +1 -0
- package/lib/cube/matrix/matrix.mobile.component.d.ts +1 -0
- package/lib/cube/matrix/matrix.mobile.component.d.ts.map +1 -0
- package/lib/cube/matrix/matrix.pane.component.d.ts +1 -0
- package/lib/cube/matrix/matrix.pane.component.d.ts.map +1 -0
- package/lib/cube/matrix/popup.component.d.ts +1 -0
- package/lib/cube/matrix/popup.component.d.ts.map +1 -0
- package/lib/cube/matrix/table.component.d.ts +1 -0
- package/lib/cube/matrix/table.component.d.ts.map +1 -0
- package/lib/cube/parallel/item.d.ts +1 -0
- package/lib/cube/parallel/item.d.ts.map +1 -0
- package/lib/cube/parallel/parallel.component.d.ts +1 -0
- package/lib/cube/parallel/parallel.component.d.ts.map +1 -0
- package/lib/cube/pivot/pivot.component.d.ts +1 -0
- package/lib/cube/pivot/pivot.component.d.ts.map +1 -0
- package/lib/cube/sum/sum.component.d.ts +1 -0
- package/lib/cube/sum/sum.component.d.ts.map +1 -0
- package/lib/cube/view-base.d.ts +1 -0
- package/lib/cube/view-base.d.ts.map +1 -0
- package/lib/cube/view.mobile.component.d.ts +1 -0
- package/lib/cube/view.mobile.component.d.ts.map +1 -0
- package/lib/cube/view.pane.component.d.ts +1 -0
- package/lib/cube/view.pane.component.d.ts.map +1 -0
- package/lib/dashboard/actions/actions.widget.d.ts +1 -0
- package/lib/dashboard/actions/actions.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/accum-cube.widget.d.ts +1 -0
- package/lib/dashboard/cube/accum-cube.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/compare.widget.d.ts +1 -0
- package/lib/dashboard/cube/compare.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -0
- package/lib/dashboard/cube/cube-analysis.base.d.ts.map +1 -0
- package/lib/dashboard/cube/cube-analysis.widget.d.ts +1 -0
- package/lib/dashboard/cube/cube-analysis.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/cube-chart.widget.d.ts +1 -0
- package/lib/dashboard/cube/cube-chart.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/documents.widget.d.ts +1 -0
- package/lib/dashboard/cube/documents.widget.d.ts.map +1 -0
- package/lib/dashboard/cube/filter/filter.component.d.ts +1 -0
- package/lib/dashboard/cube/filter/filter.component.d.ts.map +1 -0
- package/lib/dashboard/dashboard.component.d.ts +1 -0
- package/lib/dashboard/dashboard.component.d.ts.map +1 -0
- package/lib/dashboard/dashboard.pane.component.d.ts +1 -0
- package/lib/dashboard/dashboard.pane.component.d.ts.map +1 -0
- package/lib/dashboard/recents/recents.widget.d.ts +1 -0
- package/lib/dashboard/recents/recents.widget.d.ts.map +1 -0
- package/lib/dashboard/score/activity.widget.d.ts +1 -0
- package/lib/dashboard/score/activity.widget.d.ts.map +1 -0
- package/lib/dashboard/score/compare-groups.widget.d.ts +1 -0
- package/lib/dashboard/score/compare-groups.widget.d.ts.map +1 -0
- package/lib/dashboard/score/peers-performance.widget.d.ts +1 -0
- package/lib/dashboard/score/peers-performance.widget.d.ts.map +1 -0
- package/lib/dashboard/score/pending-results.widget.d.ts +1 -0
- package/lib/dashboard/score/pending-results.widget.d.ts.map +1 -0
- package/lib/dashboard/score/personal-score.widget.d.ts +1 -0
- package/lib/dashboard/score/personal-score.widget.d.ts.map +1 -0
- package/lib/dashboard/widget-item.component.d.ts +1 -0
- package/lib/dashboard/widget-item.component.d.ts.map +1 -0
- package/lib/dashboard/widget-ref.d.ts +1 -0
- package/lib/dashboard/widget-ref.d.ts.map +1 -0
- package/lib/desktop.module.d.ts +1 -0
- package/lib/desktop.module.d.ts.map +1 -0
- package/lib/home/about/about.dialog.d.ts +1 -0
- package/lib/home/about/about.dialog.d.ts.map +1 -0
- package/lib/home/home-base.component.d.ts +1 -0
- package/lib/home/home-base.component.d.ts.map +1 -0
- package/lib/home/home.desktop.component.d.ts +1 -0
- package/lib/home/home.desktop.component.d.ts.map +1 -0
- package/lib/home/home.mobile.component.d.ts +1 -0
- package/lib/home/home.mobile.component.d.ts.map +1 -0
- package/lib/home/notifications/notifications.component.d.ts +1 -0
- package/lib/home/notifications/notifications.component.d.ts.map +1 -0
- package/lib/home/options/options.component.d.ts +1 -0
- package/lib/home/options/options.component.d.ts.map +1 -0
- package/lib/home/outofoffice/outofoffice.component.d.ts +1 -0
- package/lib/home/outofoffice/outofoffice.component.d.ts.map +1 -0
- package/lib/home/search.service.d.ts +1 -0
- package/lib/home/search.service.d.ts.map +1 -0
- package/lib/home/sign/sign.component.d.ts +1 -0
- package/lib/home/sign/sign.component.d.ts.map +1 -0
- package/lib/home/tools.component.d.ts +1 -0
- package/lib/home/tools.component.d.ts.map +1 -0
- package/lib/impersonate/impersonate.component.d.ts +1 -0
- package/lib/impersonate/impersonate.component.d.ts.map +1 -0
- package/lib/mobile.module.d.ts +1 -0
- package/lib/mobile.module.d.ts.map +1 -0
- package/lib/modules/chart.module.d.ts +1 -0
- package/lib/modules/chart.module.d.ts.map +1 -0
- package/lib/modules/circular-gauge.module.d.ts +1 -0
- package/lib/modules/circular-gauge.module.d.ts.map +1 -0
- package/lib/modules/date.adapter.d.ts +1 -0
- package/lib/modules/date.adapter.d.ts.map +1 -0
- package/lib/modules/datepicker.intl.d.ts +1 -0
- package/lib/modules/datepicker.intl.d.ts.map +1 -0
- package/lib/modules/dayjs.module.d.ts +1 -0
- package/lib/modules/dayjs.module.d.ts.map +1 -0
- package/lib/modules/diagram.module.d.ts +1 -0
- package/lib/modules/diagram.module.d.ts.map +1 -0
- package/lib/modules/gantt.module.d.ts +1 -0
- package/lib/modules/gantt.module.d.ts.map +1 -0
- package/lib/modules/grid.module.d.ts +1 -0
- package/lib/modules/grid.module.d.ts.map +1 -0
- package/lib/modules/material.module.d.ts +1 -0
- package/lib/modules/material.module.d.ts.map +1 -0
- package/lib/modules/paginator.intl.d.ts +1 -0
- package/lib/modules/paginator.intl.d.ts.map +1 -0
- package/lib/modules/pivot.module.d.ts +1 -0
- package/lib/modules/pivot.module.d.ts.map +1 -0
- package/lib/modules/schedule.module.d.ts +1 -0
- package/lib/modules/schedule.module.d.ts.map +1 -0
- package/lib/modules/spreadsheet.module.d.ts +1 -0
- package/lib/modules/spreadsheet.module.d.ts.map +1 -0
- package/lib/modules/stepper.intl.d.ts +1 -0
- package/lib/modules/stepper.intl.d.ts.map +1 -0
- package/lib/modules/texteditor.module.d.ts +1 -0
- package/lib/modules/texteditor.module.d.ts.map +1 -0
- package/lib/notifications/filter.component.d.ts +1 -0
- package/lib/notifications/filter.component.d.ts.map +1 -0
- package/lib/notifications/notifications-table.component.d.ts +1 -0
- package/lib/notifications/notifications-table.component.d.ts.map +1 -0
- package/lib/notifications/notifications.component-base.d.ts +1 -0
- package/lib/notifications/notifications.component-base.d.ts.map +1 -0
- package/lib/notifications/notifications.mobile.component.d.ts +1 -0
- package/lib/notifications/notifications.mobile.component.d.ts.map +1 -0
- package/lib/notifications/notifications.pane.component.d.ts +1 -0
- package/lib/notifications/notifications.pane.component.d.ts.map +1 -0
- package/lib/notifications/notifications.service.d.ts +1 -0
- package/lib/notifications/notifications.service.d.ts.map +1 -0
- package/lib/notifications/types/commented.notification.d.ts +1 -0
- package/lib/notifications/types/commented.notification.d.ts.map +1 -0
- package/lib/notifications/types/cube-anomaly.notification.d.ts +1 -0
- package/lib/notifications/types/cube-anomaly.notification.d.ts.map +1 -0
- package/lib/notifications/types/escalated.notification.d.ts +1 -0
- package/lib/notifications/types/escalated.notification.d.ts.map +1 -0
- package/lib/notifications/types/liked.notification.d.ts +1 -0
- package/lib/notifications/types/liked.notification.d.ts.map +1 -0
- package/lib/notifications/types/long-running-task.notification.d.ts +1 -0
- package/lib/notifications/types/long-running-task.notification.d.ts.map +1 -0
- package/lib/notifications/types/notification-base.d.ts +1 -0
- package/lib/notifications/types/notification-base.d.ts.map +1 -0
- package/lib/notifications/types/nudge.notification.d.ts +1 -0
- package/lib/notifications/types/nudge.notification.d.ts.map +1 -0
- package/lib/notifications/types/state-changed.notification.d.ts +1 -0
- package/lib/notifications/types/state-changed.notification.d.ts.map +1 -0
- package/lib/notifications/types/tagged.notification.d.ts +1 -0
- package/lib/notifications/types/tagged.notification.d.ts.map +1 -0
- package/lib/notifications/types/text.notification.d.ts +1 -0
- package/lib/notifications/types/text.notification.d.ts.map +1 -0
- package/lib/notifications/types/upcoming-event.notification.d.ts +1 -0
- package/lib/notifications/types/upcoming-event.notification.d.ts.map +1 -0
- package/lib/options/options.component.d.ts +1 -0
- package/lib/options/options.component.d.ts.map +1 -0
- package/lib/options/options.service.d.ts +1 -0
- package/lib/options/options.service.d.ts.map +1 -0
- package/lib/reports/arguments-component.d.ts +1 -0
- package/lib/reports/arguments-component.d.ts.map +1 -0
- package/lib/reports/cube/documents.component.d.ts +1 -0
- package/lib/reports/cube/documents.component.d.ts.map +1 -0
- package/lib/reports/cube/grid-documents.component.d.ts +1 -0
- package/lib/reports/cube/grid-documents.component.d.ts.map +1 -0
- package/lib/reports/cube/table-documents.component.d.ts +1 -0
- package/lib/reports/cube/table-documents.component.d.ts.map +1 -0
- package/lib/reports/cube/usage-args.component.d.ts +1 -0
- package/lib/reports/cube/usage-args.component.d.ts.map +1 -0
- package/lib/reports/cube/usage-base.d.ts +1 -0
- package/lib/reports/cube/usage-base.d.ts.map +1 -0
- package/lib/reports/cube/usage-chart.component.d.ts +1 -0
- package/lib/reports/cube/usage-chart.component.d.ts.map +1 -0
- package/lib/reports/cube/usage-pivot.component.d.ts +1 -0
- package/lib/reports/cube/usage-pivot.component.d.ts.map +1 -0
- package/lib/reports/cube/usage.component.d.ts +1 -0
- package/lib/reports/cube/usage.component.d.ts.map +1 -0
- package/lib/reports/report-ref.d.ts +1 -0
- package/lib/reports/report-ref.d.ts.map +1 -0
- package/lib/reports/report-viewer.component.d.ts +1 -0
- package/lib/reports/report-viewer.component.d.ts.map +1 -0
- package/lib/reports/report.mobile.component.d.ts +1 -0
- package/lib/reports/report.mobile.component.d.ts.map +1 -0
- package/lib/reports/report.pane.component.d.ts +1 -0
- package/lib/reports/report.pane.component.d.ts.map +1 -0
- package/lib/reports/reports-menu.component.d.ts +1 -0
- package/lib/reports/reports-menu.component.d.ts.map +1 -0
- package/lib/reports/substitution/substitution.component.d.ts +1 -0
- package/lib/reports/substitution/substitution.component.d.ts.map +1 -0
- package/lib/reports/table/table-view.component.d.ts +1 -0
- package/lib/reports/table/table-view.component.d.ts.map +1 -0
- package/lib/reports/tasks/tasks.component.d.ts +1 -0
- package/lib/reports/tasks/tasks.component.d.ts.map +1 -0
- package/lib/routes.desktop.d.ts +1 -0
- package/lib/routes.desktop.d.ts.map +1 -0
- package/lib/routes.mobile.d.ts +1 -0
- package/lib/routes.mobile.d.ts.map +1 -0
- package/lib/scheduler/schedule.component.d.ts +1 -0
- package/lib/scheduler/schedule.component.d.ts.map +1 -0
- package/lib/scheduler/scheduler.mobile.component.d.ts +1 -0
- package/lib/scheduler/scheduler.mobile.component.d.ts.map +1 -0
- package/lib/scheduler/scheduler.pane.component.d.ts +1 -0
- package/lib/scheduler/scheduler.pane.component.d.ts.map +1 -0
- package/lib/shared.module.d.ts +1 -0
- package/lib/shared.module.d.ts.map +1 -0
- package/lib/system.module.d.ts +51 -49
- package/lib/system.module.d.ts.map +1 -0
- package/lib/views/cube/chart.component.d.ts +1 -0
- package/lib/views/cube/chart.component.d.ts.map +1 -0
- package/lib/views/cube/cube-base.d.ts +1 -0
- package/lib/views/cube/cube-base.d.ts.map +1 -0
- package/lib/views/cube/explore.component.d.ts +1 -0
- package/lib/views/cube/explore.component.d.ts.map +1 -0
- package/lib/views/cube/matrix.component.d.ts +1 -0
- package/lib/views/cube/matrix.component.d.ts.map +1 -0
- package/lib/views/cube/parallel.component.d.ts +1 -0
- package/lib/views/cube/parallel.component.d.ts.map +1 -0
- package/lib/views/cube/pivot.component.d.ts +1 -0
- package/lib/views/cube/pivot.component.d.ts.map +1 -0
- package/lib/views/cube/sum.component.d.ts +4 -3
- package/lib/views/cube/sum.component.d.ts.map +1 -0
- package/lib/views/cube/view.component.d.ts +1 -0
- package/lib/views/cube/view.component.d.ts.map +1 -0
- package/lib/views/document-view-ref.d.ts +1 -0
- package/lib/views/document-view-ref.d.ts.map +1 -0
- package/lib/views/timeline/timeline.component.exp.d.ts +1 -0
- package/lib/views/timeline/timeline.component.exp.d.ts.map +1 -0
- package/lib/views/view-item.component.d.ts +1 -0
- package/lib/views/view-item.component.d.ts.map +1 -0
- package/lib/views/views.component.d.ts +1 -0
- package/lib/views/views.component.d.ts.map +1 -0
- package/lib/views/views.mobile.component.d.ts +1 -0
- package/lib/views/views.mobile.component.d.ts.map +1 -0
- package/lib/views/views.pane.component.d.ts +1 -0
- package/lib/views/views.pane.component.d.ts.map +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -0
@@ -23,6 +23,211 @@ import * as i12 from "../NgComponentOutlet";
|
|
23
23
|
import * as i13 from "../popup/tooltip.directive";
|
24
24
|
import * as i14 from "../../home/tools.component";
|
25
25
|
import * as i15 from "../pipes/translate.pipe";
|
26
|
+
const _c0 = ["panning"];
|
27
|
+
const _c1 = ["tabing"];
|
28
|
+
function SlotsComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
29
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
30
|
+
i0.ɵɵelementStart(0, "div", 11);
|
31
|
+
i0.ɵɵlistener("click", function SlotsComponent_div_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.scrollBy(-400)); });
|
32
|
+
i0.ɵɵelementStart(1, "i", 12);
|
33
|
+
i0.ɵɵtext(2, " arrow_back_ios ");
|
34
|
+
i0.ɵɵelementEnd()();
|
35
|
+
} if (rf & 2) {
|
36
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
37
|
+
i0.ɵɵproperty("matRippleUnbounded", true)("matRippleCentered", true)("matRippleColor", ctx_r0.accent);
|
38
|
+
} }
|
39
|
+
function SlotsComponent_button_4_Template(rf, ctx) { if (rf & 1) {
|
40
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
41
|
+
i0.ɵɵelementStart(0, "button", 13);
|
42
|
+
i0.ɵɵlistener("click", function SlotsComponent_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.back()); });
|
43
|
+
i0.ɵɵpipe(1, "translate");
|
44
|
+
i0.ɵɵelementStart(2, "mat-icon", 14);
|
45
|
+
i0.ɵɵtext(3, "arrow_circle_left");
|
46
|
+
i0.ɵɵelementEnd()();
|
47
|
+
} if (rf & 2) {
|
48
|
+
i0.ɵɵproperty("bizdocTooltip", i0.ɵɵpipeBind1(1, 1, "Back"));
|
49
|
+
} }
|
50
|
+
function SlotsComponent_ng_container_5_span_1_Template(rf, ctx) { if (rf & 1) {
|
51
|
+
i0.ɵɵelementStart(0, "span", 16);
|
52
|
+
i0.ɵɵtext(1, "\\");
|
53
|
+
i0.ɵɵelementEnd();
|
54
|
+
} }
|
55
|
+
function SlotsComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
56
|
+
i0.ɵɵelementContainerStart(0);
|
57
|
+
i0.ɵɵtemplate(1, SlotsComponent_ng_container_5_span_1_Template, 2, 0, "span", 15);
|
58
|
+
i0.ɵɵtext(2);
|
59
|
+
i0.ɵɵelementContainerEnd();
|
60
|
+
} if (rf & 2) {
|
61
|
+
const p_r13 = ctx.$implicit;
|
62
|
+
const first_r14 = ctx.first;
|
63
|
+
i0.ɵɵadvance(1);
|
64
|
+
i0.ɵɵproperty("ngIf", !first_r14);
|
65
|
+
i0.ɵɵadvance(1);
|
66
|
+
i0.ɵɵtextInterpolate1(" ", p_r13.title, " ");
|
67
|
+
} }
|
68
|
+
function SlotsComponent_button_6_Template(rf, ctx) { if (rf & 1) {
|
69
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
70
|
+
i0.ɵɵelementStart(0, "button", 13);
|
71
|
+
i0.ɵɵlistener("click", function SlotsComponent_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.guide(ctx_r16.panes[0].guide)); });
|
72
|
+
i0.ɵɵpipe(1, "translate");
|
73
|
+
i0.ɵɵelementStart(2, "mat-icon");
|
74
|
+
i0.ɵɵtext(3, "help");
|
75
|
+
i0.ɵɵelementEnd()();
|
76
|
+
} if (rf & 2) {
|
77
|
+
i0.ɵɵproperty("bizdocTooltip", i0.ɵɵpipeBind1(1, 1, "Help"));
|
78
|
+
} }
|
79
|
+
function SlotsComponent_ng_container_11_div_3_Template(rf, ctx) { if (rf & 1) {
|
80
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
81
|
+
i0.ɵɵelementStart(0, "div", 20);
|
82
|
+
i0.ɵɵlistener("mousedown", function SlotsComponent_ng_container_11_div_3_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r23); const p_r18 = i0.ɵɵnextContext().$implicit; const ctx_r21 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r21.onPaneResize(p_r18, $event)); });
|
83
|
+
i0.ɵɵtext(1, "\u00A0");
|
84
|
+
i0.ɵɵelementEnd();
|
85
|
+
} }
|
86
|
+
function SlotsComponent_ng_container_11_Template(rf, ctx) { if (rf & 1) {
|
87
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
88
|
+
i0.ɵɵelementContainerStart(0);
|
89
|
+
i0.ɵɵelementStart(1, "div", 17);
|
90
|
+
i0.ɵɵlistener("mouseenter", function SlotsComponent_ng_container_11_Template_div_mouseenter_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r25); const i_r19 = restoredCtx.index; const ctx_r24 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r24.selectedIndex !== i_r19 && !ctx_r24.dragging && ctx_r24.select(i_r19)); })("click", function SlotsComponent_ng_container_11_Template_div_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r25); const i_r19 = restoredCtx.index; const ctx_r26 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r26.select(i_r19)); });
|
91
|
+
i0.ɵɵelementStart(2, "ngx-component-outlet", 18);
|
92
|
+
i0.ɵɵlistener("create", function SlotsComponent_ng_container_11_Template_ngx_component_outlet_create_2_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r25); const p_r18 = restoredCtx.$implicit; return i0.ɵɵresetView(p_r18._instance = $event); });
|
93
|
+
i0.ɵɵelementEnd()();
|
94
|
+
i0.ɵɵtemplate(3, SlotsComponent_ng_container_11_div_3_Template, 2, 0, "div", 19);
|
95
|
+
i0.ɵɵelementContainerEnd();
|
96
|
+
} if (rf & 2) {
|
97
|
+
const p_r18 = ctx.$implicit;
|
98
|
+
const i_r19 = ctx.index;
|
99
|
+
const ctx_r5 = i0.ɵɵnextContext();
|
100
|
+
i0.ɵɵadvance(1);
|
101
|
+
i0.ɵɵclassProp("active", ctx_r5.selectedIndex === i_r19);
|
102
|
+
i0.ɵɵproperty("@pane", undefined);
|
103
|
+
i0.ɵɵadvance(1);
|
104
|
+
i0.ɵɵproperty("type", p_r18.component)("injector", p_r18.injector);
|
105
|
+
i0.ɵɵadvance(1);
|
106
|
+
i0.ɵɵproperty("ngIf", i_r19 < ctx_r5.panes.length - 1);
|
107
|
+
} }
|
108
|
+
function SlotsComponent_div_12_Template(rf, ctx) { if (rf & 1) {
|
109
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
110
|
+
i0.ɵɵelementStart(0, "div", 21);
|
111
|
+
i0.ɵɵlistener("click", function SlotsComponent_div_12_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r28.closeTab(ctx_r28.selectedTabIndex)); });
|
112
|
+
i0.ɵɵelementEnd();
|
113
|
+
} }
|
114
|
+
function SlotsComponent_div_13_Template(rf, ctx) { if (rf & 1) {
|
115
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
116
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "i", 23);
|
117
|
+
i0.ɵɵlistener("click", function SlotsComponent_div_13_Template_i_click_1_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.scrollBy(400)); });
|
118
|
+
i0.ɵɵtext(2, " arrow_forward_ios ");
|
119
|
+
i0.ɵɵelementEnd()();
|
120
|
+
} if (rf & 2) {
|
121
|
+
const ctx_r7 = i0.ɵɵnextContext();
|
122
|
+
i0.ɵɵadvance(1);
|
123
|
+
i0.ɵɵproperty("matRippleUnbounded", true)("matRippleCentered", true)("matRippleRadius", 30)("matRippleColor", ctx_r7.accent);
|
124
|
+
} }
|
125
|
+
function SlotsComponent_ng_container_14_button_6_Template(rf, ctx) { if (rf & 1) {
|
126
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
127
|
+
i0.ɵɵelementStart(0, "button", 13);
|
128
|
+
i0.ɵɵlistener("click", function SlotsComponent_ng_container_14_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r37); const ctx_r36 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r36.tabBack()); });
|
129
|
+
i0.ɵɵpipe(1, "translate");
|
130
|
+
i0.ɵɵelementStart(2, "mat-icon", 14);
|
131
|
+
i0.ɵɵtext(3, "arrow_back");
|
132
|
+
i0.ɵɵelementEnd()();
|
133
|
+
} if (rf & 2) {
|
134
|
+
const ctx_r33 = i0.ɵɵnextContext(2);
|
135
|
+
i0.ɵɵproperty("bizdocTooltip", ctx_r33.prevGroup || i0.ɵɵpipeBind1(1, 1, "Back"));
|
136
|
+
} }
|
137
|
+
function SlotsComponent_ng_container_14_a_18_mat_icon_4_Template(rf, ctx) { if (rf & 1) {
|
138
|
+
const _r43 = i0.ɵɵgetCurrentView();
|
139
|
+
i0.ɵɵelementStart(0, "mat-icon", 36);
|
140
|
+
i0.ɵɵlistener("click", function SlotsComponent_ng_container_14_a_18_mat_icon_4_Template_mat_icon_click_0_listener() { i0.ɵɵrestoreView(_r43); const i_r39 = i0.ɵɵnextContext().index; const ctx_r41 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r41.closeTab(i_r39)); });
|
141
|
+
i0.ɵɵtext(1, "close");
|
142
|
+
i0.ɵɵelementEnd();
|
143
|
+
} }
|
144
|
+
function SlotsComponent_ng_container_14_a_18_Template(rf, ctx) { if (rf & 1) {
|
145
|
+
const _r45 = i0.ɵɵgetCurrentView();
|
146
|
+
i0.ɵɵelementStart(0, "a", 33);
|
147
|
+
i0.ɵɵlistener("click", function SlotsComponent_ng_container_14_a_18_Template_a_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r45); const i_r39 = restoredCtx.index; const ctx_r44 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r44.selectedTabIndex = i_r39); });
|
148
|
+
i0.ɵɵelementStart(1, "mat-icon", 34);
|
149
|
+
i0.ɵɵtext(2);
|
150
|
+
i0.ɵɵelementEnd();
|
151
|
+
i0.ɵɵtext(3);
|
152
|
+
i0.ɵɵtemplate(4, SlotsComponent_ng_container_14_a_18_mat_icon_4_Template, 2, 0, "mat-icon", 35);
|
153
|
+
i0.ɵɵelementEnd();
|
154
|
+
} if (rf & 2) {
|
155
|
+
const t_r38 = ctx.$implicit;
|
156
|
+
const i_r39 = ctx.index;
|
157
|
+
const ctx_r34 = i0.ɵɵnextContext(2);
|
158
|
+
i0.ɵɵproperty("active", ctx_r34.selectedTabIndex === i_r39);
|
159
|
+
i0.ɵɵadvance(1);
|
160
|
+
i0.ɵɵproperty("matBadge", t_r38.badge)("matBadgeHidden", !t_r38.badge);
|
161
|
+
i0.ɵɵadvance(1);
|
162
|
+
i0.ɵɵtextInterpolate(t_r38.icon);
|
163
|
+
i0.ɵɵadvance(1);
|
164
|
+
i0.ɵɵtextInterpolate1("\u00A0 ", t_r38.title, " ");
|
165
|
+
i0.ɵɵadvance(1);
|
166
|
+
i0.ɵɵproperty("ngIf", t_r38.dismissable);
|
167
|
+
} }
|
168
|
+
function SlotsComponent_ng_container_14_div_19_Template(rf, ctx) { if (rf & 1) {
|
169
|
+
const _r49 = i0.ɵɵgetCurrentView();
|
170
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "ngx-component-outlet", 18);
|
171
|
+
i0.ɵɵlistener("create", function SlotsComponent_ng_container_14_div_19_Template_ngx_component_outlet_create_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r49); const t_r46 = restoredCtx.$implicit; return i0.ɵɵresetView(t_r46._instance = $event); });
|
172
|
+
i0.ɵɵelementEnd()();
|
173
|
+
} if (rf & 2) {
|
174
|
+
const t_r46 = ctx.$implicit;
|
175
|
+
const i_r47 = ctx.index;
|
176
|
+
const ctx_r35 = i0.ɵɵnextContext(2);
|
177
|
+
i0.ɵɵstyleProp("display", ctx_r35.selectedTabIndex === i_r47 ? "" : "none");
|
178
|
+
i0.ɵɵproperty("@tab", ctx_r35.selectedTabIndex);
|
179
|
+
i0.ɵɵadvance(1);
|
180
|
+
i0.ɵɵproperty("type", t_r46.component)("injector", t_r46.injector);
|
181
|
+
} }
|
182
|
+
function SlotsComponent_ng_container_14_Template(rf, ctx) { if (rf & 1) {
|
183
|
+
const _r51 = i0.ɵɵgetCurrentView();
|
184
|
+
i0.ɵɵelementContainerStart(0);
|
185
|
+
i0.ɵɵelementStart(1, "div", 24);
|
186
|
+
i0.ɵɵlistener("mousedown", function SlotsComponent_ng_container_14_Template_div_mousedown_1_listener($event) { i0.ɵɵrestoreView(_r51); const ctx_r50 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r50.onTabResize($event)); });
|
187
|
+
i0.ɵɵtext(2, "\u00A0");
|
188
|
+
i0.ɵɵelementEnd();
|
189
|
+
i0.ɵɵelementStart(3, "div", 25, 26);
|
190
|
+
i0.ɵɵlistener("@tabs.done", function SlotsComponent_ng_container_14_Template_div_animation_tabs_done_3_listener() { i0.ɵɵrestoreView(_r51); const ctx_r52 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r52.done()); });
|
191
|
+
i0.ɵɵelementStart(5, "div", 27);
|
192
|
+
i0.ɵɵtemplate(6, SlotsComponent_ng_container_14_button_6_Template, 4, 3, "button", 3);
|
193
|
+
i0.ɵɵelementStart(7, "h2");
|
194
|
+
i0.ɵɵtext(8);
|
195
|
+
i0.ɵɵelementEnd();
|
196
|
+
i0.ɵɵelementStart(9, "button", 13);
|
197
|
+
i0.ɵɵlistener("click", function SlotsComponent_ng_container_14_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r51); const ctx_r53 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r53.expandTab()); });
|
198
|
+
i0.ɵɵpipe(10, "translate");
|
199
|
+
i0.ɵɵelementStart(11, "mat-icon", 28);
|
200
|
+
i0.ɵɵtext(12, "open_in_full");
|
201
|
+
i0.ɵɵelementEnd()();
|
202
|
+
i0.ɵɵelement(13, "span", 5);
|
203
|
+
i0.ɵɵelementStart(14, "button", 29);
|
204
|
+
i0.ɵɵlistener("click", function SlotsComponent_ng_container_14_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r51); const ctx_r54 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r54.collapse()); });
|
205
|
+
i0.ɵɵelementStart(15, "mat-icon");
|
206
|
+
i0.ɵɵtext(16, "close");
|
207
|
+
i0.ɵɵelementEnd()()();
|
208
|
+
i0.ɵɵelementStart(17, "nav", 30);
|
209
|
+
i0.ɵɵtemplate(18, SlotsComponent_ng_container_14_a_18_Template, 5, 6, "a", 31);
|
210
|
+
i0.ɵɵelementEnd();
|
211
|
+
i0.ɵɵtemplate(19, SlotsComponent_ng_container_14_div_19_Template, 2, 5, "div", 32);
|
212
|
+
i0.ɵɵelementEnd();
|
213
|
+
i0.ɵɵelementContainerEnd();
|
214
|
+
} if (rf & 2) {
|
215
|
+
const ctx_r8 = i0.ɵɵnextContext();
|
216
|
+
i0.ɵɵadvance(3);
|
217
|
+
i0.ɵɵproperty("@tabs", ctx_r8.tabsAnimation);
|
218
|
+
i0.ɵɵadvance(3);
|
219
|
+
i0.ɵɵproperty("ngIf", ctx_r8.swapTab);
|
220
|
+
i0.ɵɵadvance(2);
|
221
|
+
i0.ɵɵtextInterpolate(ctx_r8.group);
|
222
|
+
i0.ɵɵadvance(1);
|
223
|
+
i0.ɵɵproperty("bizdocTooltip", i0.ɵɵpipeBind1(10, 7, "Expand"));
|
224
|
+
i0.ɵɵadvance(8);
|
225
|
+
i0.ɵɵproperty("disablePagination", true);
|
226
|
+
i0.ɵɵadvance(1);
|
227
|
+
i0.ɵɵproperty("ngForOf", ctx_r8.tabs);
|
228
|
+
i0.ɵɵadvance(1);
|
229
|
+
i0.ɵɵproperty("ngForOf", ctx_r8.tabs);
|
230
|
+
} }
|
26
231
|
const DEFAULT_ROUTE = ['dashboard'];
|
27
232
|
export class SlotsComponent {
|
28
233
|
constructor(data, _session, _cd, _router, _title, _guide, _injector) {
|
@@ -1078,46 +1283,96 @@ export class SlotsComponent {
|
|
1078
1283
|
this._destroy.complete();
|
1079
1284
|
}
|
1080
1285
|
}
|
1081
|
-
SlotsComponent.ɵfac =
|
1082
|
-
SlotsComponent.ɵcmp = i0.ɵɵ
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
i0.ɵɵ
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1286
|
+
SlotsComponent.ɵfac = function SlotsComponent_Factory(t) { return new (t || SlotsComponent)(i0.ɵɵdirectiveInject(PANES_DATA), i0.ɵɵdirectiveInject(i1.SessionService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.PanesRouter), i0.ɵɵdirectiveInject(i3.WindowTitleService), i0.ɵɵdirectiveInject(i4.GuideService), i0.ɵɵdirectiveInject(i0.Injector)); };
|
1287
|
+
SlotsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SlotsComponent, selectors: [["bizdoc-panes-outlet"]], viewQuery: function SlotsComponent_Query(rf, ctx) { if (rf & 1) {
|
1288
|
+
i0.ɵɵviewQuery(_c0, 7, ViewContainerRef);
|
1289
|
+
i0.ɵɵviewQuery(_c1, 5);
|
1290
|
+
i0.ɵɵviewQuery(CdkScrollable, 7);
|
1291
|
+
} if (rf & 2) {
|
1292
|
+
let _t;
|
1293
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._panesContainerRef = _t.first);
|
1294
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._tabsElement = _t.first);
|
1295
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._scrollable = _t.first);
|
1296
|
+
} }, hostBindings: function SlotsComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
1297
|
+
i0.ɵɵlistener("keydown.escape", function SlotsComponent_keydown_escape_HostBindingHandler() { return ctx.collapse(); }, false, i0.ɵɵresolveDocument)("resize", function SlotsComponent_resize_HostBindingHandler() { return ctx.onResize(); }, false, i0.ɵɵresolveWindow);
|
1298
|
+
} }, outputs: { dialogChange: "dialogChange" }, decls: 15, vars: 10, consts: [[1, "panes"], ["class", "scroll-arrow", "matRipple", "", 3, "matRippleUnbounded", "matRippleCentered", "matRippleColor", "click", 4, "ngIf"], [1, "panes-title"], ["mat-icon-button", "", 3, "bizdocTooltip", "click", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "divider"], ["cdkScrollable", "", 1, "panes-container", 3, "scroll"], ["panning", ""], ["class", "backdrop", 3, "click", 4, "ngIf"], ["class", "scroll-arrow forward", 4, "ngIf"], [4, "ngIf"], ["matRipple", "", 1, "scroll-arrow", 3, "matRippleUnbounded", "matRippleCentered", "matRippleColor", "click"], [1, "material-icons", "mat-icon-rtl-mirror"], ["mat-icon-button", "", 3, "bizdocTooltip", "click"], [1, "mat-icon-rtl-mirror"], ["class", "breadcrumbs", 4, "ngIf"], [1, "breadcrumbs"], [1, "pane-content", 3, "mouseenter", "click"], [3, "type", "injector", "create"], ["class", "pane-separator", 3, "mousedown", 4, "ngIf"], [1, "pane-separator", 3, "mousedown"], [1, "backdrop", 3, "click"], [1, "scroll-arrow", "forward"], ["matRipple", "", 1, "material-icons", "mat-icon-rtl-mirror", 3, "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleColor", "click"], [1, "tabs-separator", 3, "mousedown"], [1, "mat-elevation-z18", "tabs"], ["tabing", ""], [1, "row", "tabs-title"], ["inline", "true", 1, "mat-icon-rtl-mirror"], ["mat-icon-button", "", "bizdocTooltip", "Esc", 3, "click"], ["mat-tab-nav-bar", "", "color", "accent", 3, "disablePagination"], ["mat-tab-link", "", "class", "mat-tab-link", 3, "active", "click", 4, "ngFor", "ngForOf"], ["class", "tab", 3, "display", 4, "ngFor", "ngForOf"], ["mat-tab-link", "", 1, "mat-tab-link", 3, "active", "click"], ["matBadgeSize", "small", "matBadgeColor", "accent", 3, "matBadge", "matBadgeHidden"], ["class", "tool", 3, "click", 4, "ngIf"], [1, "tool", 3, "click"], [1, "tab"]], template: function SlotsComponent_Template(rf, ctx) { if (rf & 1) {
|
1299
|
+
i0.ɵɵelementStart(0, "div", 0);
|
1300
|
+
i0.ɵɵtemplate(1, SlotsComponent_div_1_Template, 3, 3, "div", 1);
|
1301
|
+
i0.ɵɵelementStart(2, "div", 2)(3, "h1");
|
1302
|
+
i0.ɵɵtemplate(4, SlotsComponent_button_4_Template, 4, 3, "button", 3);
|
1303
|
+
i0.ɵɵtemplate(5, SlotsComponent_ng_container_5_Template, 3, 2, "ng-container", 4);
|
1304
|
+
i0.ɵɵtemplate(6, SlotsComponent_button_6_Template, 4, 3, "button", 3);
|
1305
|
+
i0.ɵɵelementEnd();
|
1306
|
+
i0.ɵɵelement(7, "span", 5)(8, "bizdoc-quicktools");
|
1307
|
+
i0.ɵɵelementEnd();
|
1308
|
+
i0.ɵɵelementStart(9, "div", 6, 7);
|
1309
|
+
i0.ɵɵlistener("scroll", function SlotsComponent_Template_div_scroll_9_listener($event) { return ctx.enableNavigationArrows($event); });
|
1310
|
+
i0.ɵɵtemplate(11, SlotsComponent_ng_container_11_Template, 4, 6, "ng-container", 4);
|
1311
|
+
i0.ɵɵelementEnd();
|
1312
|
+
i0.ɵɵtemplate(12, SlotsComponent_div_12_Template, 1, 0, "div", 8);
|
1313
|
+
i0.ɵɵtemplate(13, SlotsComponent_div_13_Template, 3, 4, "div", 9);
|
1314
|
+
i0.ɵɵelementEnd();
|
1315
|
+
i0.ɵɵtemplate(14, SlotsComponent_ng_container_14_Template, 20, 9, "ng-container", 10);
|
1316
|
+
} if (rf & 2) {
|
1317
|
+
i0.ɵɵadvance(1);
|
1318
|
+
i0.ɵɵproperty("ngIf", ctx.prev);
|
1319
|
+
i0.ɵɵadvance(1);
|
1320
|
+
i0.ɵɵproperty("@title", ctx.titleAnimation);
|
1321
|
+
i0.ɵɵadvance(2);
|
1322
|
+
i0.ɵɵproperty("ngIf", ctx.swap);
|
1323
|
+
i0.ɵɵadvance(1);
|
1324
|
+
i0.ɵɵproperty("ngForOf", ctx.panes);
|
1325
|
+
i0.ɵɵadvance(1);
|
1326
|
+
i0.ɵɵproperty("ngIf", ctx.panes[0] == null ? null : ctx.panes[0].guide);
|
1327
|
+
i0.ɵɵadvance(3);
|
1328
|
+
i0.ɵɵproperty("@panes", undefined);
|
1329
|
+
i0.ɵɵadvance(2);
|
1330
|
+
i0.ɵɵproperty("ngForOf", ctx.panes);
|
1331
|
+
i0.ɵɵadvance(1);
|
1332
|
+
i0.ɵɵproperty("ngIf", ctx.dialog);
|
1333
|
+
i0.ɵɵadvance(1);
|
1334
|
+
i0.ɵɵproperty("ngIf", ctx.next);
|
1335
|
+
i0.ɵɵadvance(1);
|
1336
|
+
i0.ɵɵproperty("ngIf", ctx.tabs.length);
|
1337
|
+
} }, dependencies: [i5.NgForOf, i5.NgIf, i6.CdkScrollable, i7.MatRipple, i8.MatTabNav, i8.MatTabLink, i9.MatBadge, i10.MatButton, i11.MatIcon, i12.NgxComponentOutlet, i13.TooltipDirective, i14.QuickToolsComponent, i15.TranslatePipe], styles: ["[_nghost-%COMP%]{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes[_ngcontent-%COMP%]{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes[_ngcontent-%COMP%] .panes-title[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes[_ngcontent-%COMP%] .panes-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:xx-large;margin:12px;font-weight:100}.panes[_ngcontent-%COMP%] .panes-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{vertical-align:middle}.panes[_ngcontent-%COMP%] .panes-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] .breadcrumbs[_ngcontent-%COMP%]{font-size:smaller}.panes[_ngcontent-%COMP%] .scroll-arrow[_ngcontent-%COMP%]{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes[_ngcontent-%COMP%] .scroll-arrow[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:50px;opacity:.2}.panes[_ngcontent-%COMP%] .scroll-arrow[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:hover{opacity:.9}.panes[_ngcontent-%COMP%] .scroll-arrow[_ngcontent-%COMP%]:last-child{right:0}.panes[_ngcontent-%COMP%] .panes-container[_ngcontent-%COMP%]{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes[_ngcontent-%COMP%] .panes-container[_ngcontent-%COMP%] .pane-content[_ngcontent-%COMP%]{display:block;border-right:1px solid rgba(0,0,0,.0784313725);height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes[_ngcontent-%COMP%] .panes-container[_ngcontent-%COMP%] .pane-content[_ngcontent-%COMP%] .pane[_ngcontent-%COMP%]{flex-grow:1}.panes[_ngcontent-%COMP%] .panes-container[_ngcontent-%COMP%] .pane-separator[_ngcontent-%COMP%]{width:8px}.pane-separator[_ngcontent-%COMP%], .tabs-separator[_ngcontent-%COMP%]{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator[_ngcontent-%COMP%]{width:12px} [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs[_ngcontent-%COMP%]{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs[_ngcontent-%COMP%] .tabs-title[_ngcontent-%COMP%]{align-items:center}.tabs[_ngcontent-%COMP%] .tabs-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:x-large;margin:9px;font-weight:100}.tabs[_ngcontent-%COMP%] .tabs-title[_ngcontent-%COMP%]:hover{opacity:1}.tabs[_ngcontent-%COMP%] .mat-tab-link[_ngcontent-%COMP%] .tool[_ngcontent-%COMP%]{opacity:0}.tabs[_ngcontent-%COMP%] .mat-tab-link[_ngcontent-%COMP%]:hover .tool[_ngcontent-%COMP%]{opacity:1}.tabs[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}"], data: { animation: [panesAnimation,
|
1338
|
+
panesTitleAnimation,
|
1339
|
+
paneAnimation,
|
1340
|
+
paramAnimation,
|
1341
|
+
queryAnimation,
|
1342
|
+
tabsAnimation,
|
1343
|
+
tabAnimation
|
1344
|
+
] } });
|
1345
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SlotsComponent, [{
|
1346
|
+
type: Component,
|
1347
|
+
args: [{ selector: 'bizdoc-panes-outlet', animations: [panesAnimation,
|
1348
|
+
panesTitleAnimation,
|
1349
|
+
paneAnimation,
|
1350
|
+
paramAnimation,
|
1351
|
+
queryAnimation,
|
1352
|
+
tabsAnimation,
|
1353
|
+
tabAnimation
|
1354
|
+
], template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"enableNavigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid rgba(0,0,0,.0784313725);height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"] }]
|
1355
|
+
}], function () { return [{ type: undefined, decorators: [{
|
1356
|
+
type: Inject,
|
1357
|
+
args: [PANES_DATA]
|
1358
|
+
}] }, { type: i1.SessionService }, { type: i0.ChangeDetectorRef }, { type: i2.PanesRouter }, { type: i3.WindowTitleService }, { type: i4.GuideService }, { type: i0.Injector }]; }, { dialogChange: [{
|
1359
|
+
type: Output
|
1360
|
+
}], _panesContainerRef: [{
|
1361
|
+
type: ViewChild,
|
1362
|
+
args: ['panning', { read: ViewContainerRef, static: true }]
|
1363
|
+
}], _tabsElement: [{
|
1364
|
+
type: ViewChild,
|
1365
|
+
args: ['tabing']
|
1366
|
+
}], _scrollable: [{
|
1367
|
+
type: ViewChild,
|
1368
|
+
args: [CdkScrollable, { static: true }]
|
1369
|
+
}], collapse: [{
|
1370
|
+
type: HostListener,
|
1371
|
+
args: ['document:keydown.escape']
|
1372
|
+
}], onResize: [{
|
1373
|
+
type: HostListener,
|
1374
|
+
args: ['window:resize']
|
1375
|
+
}] }); })();
|
1121
1376
|
const PANE_PARAMS_REGEX = /(:[\w\-]+)/g;
|
1122
1377
|
function prepareRoutes(routes, treePath) {
|
1123
1378
|
for (let i = 0; i < routes.length; i++) {
|
@@ -1138,4 +1393,4 @@ function prepareRoutes(routes, treePath) {
|
|
1138
1393
|
}
|
1139
1394
|
return routes;
|
1140
1395
|
}
|
1141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUE0QixvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFZLGdCQUFnQixHQUFHLE1BQU0sWUFBWSxDQUFDO0FBR25VLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBZ0QsY0FBYyxF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RXhDLFNBQVMsYUFBYSxDQUFDLE1BQW1CLEVBQUUsUUFBaUI7SUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbkIsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUTtnQkFDOUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUMsQ0FBQztTQUNOO0tBQ0Y7SUFDRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNQcm9taXNlLCBpc1N0cmluZyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFBBTkVTX0RBVEEsIFBhbmVSZWYsIFBhbmVPcHRpb25zLCBQYW5lQ29tbWFuZCwgUXVlcnlQYXJhbU5hdmlnYXRpb24sIFBhcmFtTmF2aWdhdGlvbiwgTmF2aWdhdGlvbk1vZGUsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkNsb3NlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRm9jdXMsIFBBVEhfQ0hBUiwgUVVFUllfQ0hBUiwgQVJHX0NIQVIsIFBBTkVfQ0hBUiwgQ29sbGFwc2VOYXZpZ2F0aW9uLCBCYWNrTmF2aWdhdGlvbiwgTmF2aWdhdGlvbkV4cGFuZCwgUGFuZU1vZGUsIE5hdmlnYXRpb25SZXNpemUsIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmlwcGxlQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhuYW1lPzogc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfUk9VVEUgPSBbJ2Rhc2hib2FyZCddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wYW5lcy1vdXRsZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpYWxvZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAVmlld0NoaWxkKCdwYW5uaW5nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgX3BhbmVzQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmluZycpIF90YWJzRWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKENka1Njcm9sbGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIF9zY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlO1xyXG4gIHRpdGxlQW5pbWF0aW9uID0gMDtcclxuICBncm91cDogc3RyaW5nO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcblxyXG4gIHJlYWRvbmx5IHBhbmVzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IHRhYnM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gIGRpYWxvZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWUpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID4gLTEgJiYgdGhpcy50YWJzLmF0KHRoaXMuX3NlbGVjdGVkVGFiSW5kZXgpLmRpYWxvZykge1xyXG4gICAgICB0aGlzLmRpYWxvZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlhbG9nQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5kaWFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NldFRhYkFuaW1hdGlvbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRUYWJBbmltYXRpb24oKSB7XHJcbiAgICB0aGlzLnRhYnNBbmltYXRpb24gPSB7XHJcbiAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuX3RhYnNFbGVtZW50ID8gdGhpcy5fdGFic0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA6IDBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gIG5leHQ6IGJvb2xlYW47XHJcbiAgcHJldjogYm9vbGVhbjtcclxuICBkcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRhYnNBbmltYXRpb246IHtcclxuICAgIHZhbHVlOiBudW1iZXIsXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgc3RhcnRXaWR0aDogbnVtYmVyXHJcbiAgICB9XHJcbiAgfTtcclxuICByZWFkb25seSByaXBwbGU6IFJpcHBsZUNvbmZpZyA9IHtcclxuICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICByYWRpdXM6IDI1XHJcbiAgfVxyXG4gIGFjY2VudDogc3RyaW5nID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5Qcm9jZXNzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3JlcG9zaXRvcnk6IEV4dGVuZGVkUm91dGVbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nID0gW10gYXMgc3RyaW5nW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRsID0gdGhpcy5fc2Vzc2lvbi5pbnZlcnNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6aW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUEFORVNfREFUQSkgZGF0YTogRXh0ZW5kZWRSb3V0ZVtdLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdGl0bGU6IFdpbmRvd1RpdGxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHRoaXMuYWNjZW50ID0gX3Nlc3Npb24uZ2V0QWNjZW50KCkpO1xyXG4gICAgX3JvdXRlci5fY29tbSQuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgICAgIGNhc2UgJ2NvbGxhcHNlJzpcclxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBwcmVwYXJlUm91dGVzKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5cclxuICAgICAgc3Vic2NyaWJlKGFzeW5jIG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29tbWFuZHMsIGNvbXBvbmVudCwgcGF0aE1vZGUsIHJlbGF0aXZlVG8gfSA9IG47XHJcbiAgICAgICAgbGV0IHtcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgaGVscCxcclxuICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICB9ID0gbjtcclxuICAgICAgICBsZXRcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsXHJcbiAgICAgICAgICBwYXJhbXM6IFBhcmFtTWFwLFxyXG4gICAgICAgICAgcGFyZW50OiBQYW5lUmVmLFxyXG4gICAgICAgICAgcGF0aDogc3RyaW5nLFxyXG4gICAgICAgICAgcm91dGU6IEV4dGVuZGVkUm91dGU7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcyAmJiBjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHBhdGggPSBuLmNvbW1hbmRzLmpvaW4oJy8nKTtcclxuICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YoUVVFUllfQ0hBUikgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBzZWdzWzFdO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcgfHwgJycpO1xyXG4gICAgICAgICAgICBwYXRoID0gc2Vnc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IG4ucXVlcnlQYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBhdGhNb2RlID09PSAncmVsYXRpdmUnIHx8IHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gcmVsYXRpdmVUbyB8fCB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRwYXRoID0gcGFyZW50LnBhdGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50cGF0aCA9IHBhcmVudHBhdGguc3Vic3RyKDAsIHBhcmVudHBhdGgubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXJlbnRwYXRoICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgICAgICAgaWYgKCFyb3V0ZSlcclxuICAgICAgICAgICAgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG4gICAgICAgICAgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSByb3V0ZS5wb2xpY3kgfHwgREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBlbHNlIGlmIChyb3V0ZS5wb2xpY3kpIHBvbGljeSB8PSByb3V0ZS5wb2xpY3k7XHJcbiAgICAgICAgICBpZiAoIWljb24pIGljb24gPSByb3V0ZS5pY29uO1xyXG4gICAgICAgICAgaWYgKCFoZWxwKSBoZWxwID0gcm91dGUuaGVscDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zKSBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LkNsZWFyKSA9PSBPcGVuUG9saWN5LkNsZWFyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKCEocG9saWN5ICYgT3BlblBvbGljeS5UYWIpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclBhbmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tYW5kcykge1xyXG4gICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgdGFiLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodGFiLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCB8fCByb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvdXRlICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFuZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIgP1xyXG4gICAgICAgICAgICAgIHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdIDogdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxzZSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICBwb2xpY3ksIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmJpemRvYykge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBCYWNrTmF2aWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgYXMgSGlzdG9yeVN0YXRlO1xyXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSwgc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmxlbmd0aCA+IDEpXHJcbiAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSxcclxuICAgICAgICBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gaGlzdG9yeS5zdGF0ZSA6IHVuZGVmaW5lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX3JvdXRlci5fbmF2aWdhdGUkLm5leHQoe1xyXG4gICAgICAgIGNvbW1hbmRzOiBERUZBVUxUX1JPVVRFLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpLnN1YnNjcmliZSh0aGlzLl9yZXNpemUuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2Rlc2VyaWFsaXplKHVybDogc3RyaW5nLCBzdGF0ZT86IEhpc3RvcnlTdGF0ZSkge1xyXG5cclxuICAgIGNvbnN0IHNlY3Rpb25zID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCkuc3BsaXQoUEFORV9DSEFSKSxcclxuICAgICAgcGFuZXMgPSBkZXNlcmlhbGl6ZShzZWN0aW9uc1swXSksXHJcbiAgICAgIHRhYnMgPSBzZWN0aW9ucy5sZW5ndGggPiAxID8gZGVzZXJpYWxpemUoc2VjdGlvbnNbMV0pIDogW107XHJcblxyXG4gICAgZnVuY3Rpb24gZGVzZXJpYWxpemUocGF0aDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLlxyXG4gICAgICAgIHNwbGl0KFBBVEhfQ0hBUikubWFwKHMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgW3BhdGgsIHF1ZXJ5U3RyaW5nXSA9IHMuc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICByZXR1cm4geyBwYXRoLCBxdWVyeVN0cmluZyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSBwYW5lc1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVQYW5lKGksIHBhbmUucGF0aCwgcGFuZS5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS5wYW5lc1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gcGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICBpZiAocGFuZXMubGVuZ3RoIC0gMSA8IGkgfHwgcGFuZS5wYXRoICE9PSBwYW5lc1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA8IDApXHJcbiAgICAgIHRoaXMuc2VsZWN0KDApO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0YWJzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVRhYihpLCB0YWIucGF0aCwgdGFiLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnRhYnNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gdGFicy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCAtIDEgPCBpIHx8IHRhYi5wYXRoICE9PSB0YWJzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgIGlmIChwYW5lLmV4cGFuZGVkICE9PSAobiA9PT0gMSkpIHtcclxuICAgICAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZChwYW5lLl9leHBhbmRlZCA9IG4gPT09IDEsIHBhbmUpO1xyXG4gICAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX25hdlF1ZXJ5UGFyYW1zKHBhbmU6IFBhbmVSZWY8YW55PiwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdlBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8YW55PiwgcGFyYW1zOiBQYXJhbU1hcCwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIGlmIChwYW5lLnJvdXRlLmNhbkRpc21pc3MpXHJcbiAgICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3BhdGggPSBwYXRoO1xyXG4gICAgcGFuZS5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMpIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dCh7fSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUGFyYW1OYXZpZ2F0aW9uKHBhcmFtcywgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcblxyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgaWYgKGNoaWxkLnJvdXRlICYmIChjaGlsZC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgPT09IHBhbmUucm91dGUpIHtcclxuICAgICAgICBjaGlsZC5fZGF0YSQubmV4dChPYmplY3QuYXNzaWduKGNoaWxkLmRhdGEsIHN0YXRlKSk7XHJcbiAgICAgICAgY2hpbGQuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgICAgIGNoaWxkLl9wYXRoID0gcGFuZS5wYXRoICsgJy8nICsgY2hpbGQucm91dGUucGF0aDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID4gLTEgJiYgY2hpbGQgPT09IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwID0gY2hpbGQuZ3JvdXA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChwYW5lLm1vZGUgPT09ICdwYW5lJykgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9zeW5jQnJvd3Nlckhpc3RvcnkoKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFicy5maWx0ZXIocCA9PiBwLnJvdXRlKTtcclxuICAgICAgaWYgKHRhYnMubGVuZ3RoKVxyXG4gICAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGFicy5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpO1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IHRydWU7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgJycsICcvJyArIHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gZmFsc2UsIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXA6IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMSxcclxuICAgICAgc2VsZWN0ZWRUYWJJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYW5lczogdGhpcy5wYW5lcy5tYXAocCA9PiBwLmRhdGEpLFxyXG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHQgPT4gdC5kYXRhKSxcclxuICAgICAgc3dhcDogdGhpcy5zd2FwLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZTtcclxuICB9XHJcblxyXG4gIGRyb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW2V2dC5wcmV2aW91c0luZGV4XTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5wcmV2aW91c0luZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5jdXJyZW50SW5kZXgsIDAsIHBhbmUpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQaW5uZWQocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBwYW5lLnBpbm5lZCA9ICFwYW5lLnBpbm5lZDtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgaWYgKHMuZGVjZW5kZW50T2YocGFuZSkpIHMucGlubmVkID0gcGFuZS5waW5uZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcyk7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHZhbCA9IHF1ZXJ5UGFyYW1zW25hbWVzW2ldXTtcclxuXHJcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoIXF1ZXJ5U3RyaW5nKSBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIGVsc2UgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArIEFSR19DSEFSO1xyXG5cclxuICAgICAgICBpZiAoaXNTdHJpbmcodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWwpfWA7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gdmFsLm1hcCh2ID0+IGAke25hbWVzW2ldfT0ke3Z9YCkuam9pbihBUkdfQ0hBUik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWwudG9KU09OKCl9YDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWx9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBQYXJhbU1hcCB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgcXVlcnlTdHJpbmcgJiYgcXVlcnlTdHJpbmcuXHJcbiAgICAgIHNwbGl0KEFSR19DSEFSKS5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgaWYgKCFxdWVyeVBhcmFtc1tuYW1lXSlcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2YWxzID0gcXVlcnlQYXJhbXNbbmFtZV07XHJcbiAgICAgICAgICBxdWVyeVBhcmFtc1tuYW1lXSA9IGlzQXJyYXkodmFscykgPyBbLi4udmFscywgdmFsdWVdIDogW3ZhbHMsIHZhbHVlXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3BhcmFtcyhyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBleCA9IHJvdXRlLnJlZ0V4LmV4ZWMocGF0aCksXHJcbiAgICAgIHBhcmFtcyA9IGV4Lmdyb3VwcztcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zIHx8IHt9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXJsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbWF0Y2godXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCByb3V0ZSA9IHRoaXMuX3JlcG9zaXRvcnkuZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgIGlmIChyb3V0ZSlcclxuICAgICAgd2hpbGUgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkID0gcm91dGUuY2hpbGRyZW4uZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgICAgICBpZiAoY2hpbGQpXHJcbiAgICAgICAgICByb3V0ZSA9IGNoaWxkO1xyXG4gICAgICAgIGVsc2UgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIHJldHVybiByb3V0ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcuaW5kZXhPZihwYXRoKSA+IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5fcHMudG9hc3QoJ1dvcmtpbmcnKTtcclxuICAgICAgdGhyb3cgJ2FscmVhZHkgcHJvY2Vzc2luZyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnB1c2gocGF0aCk7XHJcblxyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG4gICAgaWYgKHBhcmVudClcclxuICAgICAgYXdhaXQgdGhpcy5fcGFyZW50c3RhdGUocGFyZW50LCBwYXRoLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgaWYgKHJlc29sdmUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZShyZXNvbHZlLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5yZW1vdmUocGF0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGFyZW50c3RhdGUocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IHsgcGFyZW50LCByZXNvbHZlIH0gPSByb3V0ZTtcclxuXHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXMuZmluZChzID0+IHMucm91dGUgJiYgcy5yb3V0ZSA9PT0gcm91dGVcclxuICAgICAgJiYgcGF0aC5zdGFydHNXaXRoKHMucGF0aCkpO1xyXG5cclxuICAgIHBhbmUgJiYgT2JqZWN0LmFzc2lnbihkYXRhLCBwYW5lLmRhdGEpO1xyXG5cclxuICAgIGlmIChyZXNvbHZlKVxyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9yZXNvbHZlKHJlc29sdmU6IHsgW2tleTogc3RyaW5nXTogQ29tcG9uZW50VHlwZTxQYW5lUmVzb2x2ZTxhbnk+PiB9LCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlc29sdmUpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICBpZiAoIWRhdGFba2V5XSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KHJlc29sdmVba2V5XSkgYXMgUGFuZVJlc29sdmU8YW55PjtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlLm9uUmVzb2x2ZShwYXJhbXMpO1xyXG4gICAgICAgIGlmIChpc1Byb21pc2UodmFsdWUpKVxyXG4gICAgICAgICAgYXdhaXQgdmFsdWUudGhlbihyID0+IGRhdGFba2V5XSA9IHIpO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS5waXBlKHRhcChyID0+IGRhdGFba2V5XSA9IHIpKS50b1Byb21pc2UoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkPFQ+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnNlcnQodGhpcy5wYW5lcy5sZW5ndGgsIGNvbXBvbmVudCwgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIGluc2VydDxUPihwb3NpdGlvbjogbnVtYmVyLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmU8VD4oY29tcG9uZW50LCBvcHRpb25zIHx8IHt9LCBwb3NpdGlvbik7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGZvY3VzPzogYm9vbGVhblxyXG4gIH0sIHBvc2l0aW9uPzogbnVtYmVyKSB7XHJcblxyXG4gICAgY29uc3Qgc3RyZXRjaGFibGUgPSAob3B0aW9ucy5wb2xpY3kgJiBPcGVuUG9saWN5LlN0cmV0Y2gpID09IE9wZW5Qb2xpY3kuU3RyZXRjaDtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCwge1xyXG4gICAgICBtb2RlOiAncGFuZScsXHJcbiAgICAgIGV4cGFuZGVkOiAhdGhpcy5wYW5lcy5sZW5ndGgsXHJcbiAgICAgIHN0cmV0Y2hhYmxlLFxyXG4gICAgICAuLi5vcHRpb25zXHJcbiAgICB9KTtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5wYW5lcy5wdXNoKHBhbmUpO1xyXG4gICAgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25TdGFydChwYW5lKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAob3B0aW9ucy5mb2N1cyAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSkgdGhpcy5zY3JvbGxUbyhwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9jb25zdHJhY3Q8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBtb2RlOiBQYW5lTW9kZSxcclxuICAgICAgZXhwYW5kZWQ/OiBib29sZWFuO1xyXG4gICAgICBkaWFsb2c/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICAgIHJvdXRlPzogUGFuZVJvdXRlO1xyXG4gICAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgICB0aXRsZT86IHN0cmluZztcclxuICAgICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICAgIGRpc21pc3NhYmxlPzogYm9vbGVhbjtcclxuICAgICAgZXhwYW5kYWJsZT86IGJvb2xlYW5cclxuICAgIH0pIHtcclxuICAgIGNvbnN0IHBhbmUgPSBuZXcgUGFuZVJlZjxUPihjb21wb25lbnQsIHRoaXMuX2luamVjdG9yLCBvcHRpb25zKTtcclxuICAgIHBhbmUuX2NvbW0kLnN1YnNjcmliZShlID0+IHRoaXMuX3BhbmVDb21tYW5kPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBzd2FwPzogYm9vbGVhbjtcclxuICAgIGZvY3VzPzogYm9vbGVhbjtcclxuICB9KSB7XHJcbiAgICBjb25zdCB7IHBvbGljeSB9ID0gb3B0aW9ucyxcclxuICAgICAgZGlhbG9nID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlhbG9nKSA9PSBPcGVuUG9saWN5LkRpYWxvZyxcclxuICAgICAgZXhwYW5kYWJsZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkV4cGFuZGFibGUpID09IE9wZW5Qb2xpY3kuRXhwYW5kYWJsZSxcclxuICAgICAgZGlzbWlzc2FibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5EaXNtaXNzYWJsZSkgPT0gT3BlblBvbGljeS5EaXNtaXNzYWJsZTtcclxuXHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgbW9kZTogJ3RhYicsXHJcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgZGlhbG9nLFxyXG4gICAgICAgIGRpc21pc3NhYmxlLFxyXG4gICAgICAgIGV4cGFuZGFibGVcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydCh0YWIpKTtcclxuICAgIGlmICh0YWIuZ3JvdXAgJiYgdGhpcy5ncm91cCAhPT0gdGFiLmdyb3VwICYmIG9wdGlvbnMuc3dhcCAhPT0gZmFsc2UpIHtcclxuICAgICAgbGV0IGkgPSAwLCBzd2FwID0gZmFsc2U7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzW2ldLmdyb3VwICE9PSB0YWIuZ3JvdXApIHtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMudGFic1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgc3dhcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrK1xyXG4gICAgICB9IHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICAgIGlmIChzd2FwKSB7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fbmF2QmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHN0ZXBzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2QmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX25hdkJhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYW5lQ29tbWFuZDxUID0gYW55Pihjb21tYW5kOiBQYW5lQ29tbWFuZCwgcGFuZTogUGFuZVJlZjxUPikge1xyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cyhpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKERFRkFVTFRfUk9VVEUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwYW5kJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJylcclxuICAgICAgICAgIHRoaXMuZXhwYW5kVGFiKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRQYW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlY3ljbGUnOiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKTtcclxuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGVzY2FwZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcclxuICBhc3luYyBjb2xsYXBzZSgpIHtcclxuICAgIGlmICghdGhpcy50YWJzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IENvbGxhcHNlTmF2aWdhdGlvbigpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgdGhpcy5fcmVzaXppbmcubmV4dCgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9yZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiAxICYmICF0aGlzLnBhbmVzW3RoaXMucGFuZXMubGVuZ3RoIC0gMV0uc3RyZXRjaGFibGUpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgY2hpbGQgPSBlbC5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgICBjaGlsZC5zdHlsZS5taW5XaWR0aCA9XHJcbiAgICAgICAgKGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIGVsLnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdCAtIGNoaWxkLm9mZnNldExlZnQgLSAyKSArICdweCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYnMuY29uY2F0KHRoaXMucGFuZXMpLmZvckVhY2gocCA9PiBwLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25SZXNpemUoe1xyXG4gICAgfSBhcyBhbnksIHApKSk7XHJcbiAgfVxyXG4gIGNsb3NlVGFiKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1twb3NpdGlvbl07XHJcbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcodGFiKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZShwb3NpdGlvbiwgMSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZSh0YWIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IHBvc2l0aW9uID4gMCA/IHBvc2l0aW9uIC0gMSA6IDAgOiAtMTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Nsb3NpbmcocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBsZXQgZXZ0ID0gbmV3IE5hdmlnYXRpb25DbG9zZShwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgcmV0dXJuICFldnQuX3ByZXZlbnREZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kUGFuZSgpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZChwYW5lLl9leHBhbmRlZCA9IHRydWUsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBkbyB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzW2ldICE9PSBwYW5lKSB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy5wYW5lc1tpXSk7XHJcbiAgICAgICAgdGhpcy5wYW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZXRIaXN0b3J5U3RlcCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgOiAwO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVGFiKCkge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF07XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZCh0YWIuX2V4cGFuZGVkID0gdHJ1ZSwgdGFiKVxyXG4gICAgdGFiLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAoZXZ0Ll9wcmV2ZW50RGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PlxyXG4gICAgICB0aGlzLl9kZXN0cm95UGFuZShwKVxyXG4gICAgKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UodGhpcy5zZWxlY3RlZFRhYkluZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoLCB0YWIpO1xyXG5cclxuICAgIHRhYi5fbW9kZSA9ICdwYW5lJztcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBwb3NpdGlvbikgcmV0dXJuO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICBlbHNlIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25Gb2N1cyhwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG5cclxuICAgIGlmICghdGhpcy5fY2xvc2luZyhwYW5lKSkgcmV0dXJuO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgdGhpcy5fZGlzY2FyZFBhbmUocGFuZSk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgdGhpcy5zZWxlY3QoLTEpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGlzbWlzcyhwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHBhbmVzID0gdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5kZWNlbmRlbnRPZihwYW5lKSAmJiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcykuXHJcbiAgICAgIHJldmVyc2UoKTtcclxuXHJcbiAgICBwYW5lLnJvdXRlICYmIHBhbmUucm91dGUuY2FuRGlzbWlzcyAmJlxyXG4gICAgICBwYW5lcy5wdXNoKHBhbmUpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG9rID0gYXdhaXQgdGhpcy5fZGlzbWlzc2FibGUocGFuZXNbaV0pO1xyXG4gICAgICBpZiAoIW9rKSB0aHJvdyAnJztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNjYXJkUGFuZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkpLlxyXG4gICAgICByZXZlcnNlKCkuXHJcbiAgICAgIGZvckVhY2gocyA9PiB0aGlzLl9kaXNjYXJkUGFuZShzKSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGVhclBlbmRpbmcoKSB7XHJcbiAgICB0aGlzLl9wZW5kaW5nLnNwbGljZSgwLCB0aGlzLl9wZW5kaW5nLmxlbmd0aCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyUGFuZXMoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMucGFuZXMpO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT4gdGhpcy5fZGVzdHJveVBhbmUocCkpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclRhYnMoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFicy5sZW5ndGgpIHJldHVybjtcclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3NBbGwodGhpcy50YWJzKTtcclxuICAgIHRoaXMudGFicy5mb3JFYWNoKHQgPT4gdGhpcy5fZGVzdHJveVBhbmUodCkpO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSgwLCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGlzbWlzc0FsbChwYW5lczogUGFuZVJlZltdKSB7XHJcbiAgICBmb3IgKGxldCBwYW5lIG9mIHBhbmVzLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcykpIHtcclxuICAgICAgbGV0IG9rID0gYXdhaXQgdGhpcy5fZGlzbWlzc2FibGUocGFuZSk7XHJcbiAgICAgIGlmICghb2spXHJcbiAgICAgICAgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc21pc3NhYmxlKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSwgcm91dGU6IHsgY2FuRGlzbWlzcyB9IH0gPSBwYW5lO1xyXG4gICAgY29uc3QgZGlzbWlzc2FibGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoY2FuRGlzbWlzcykgYXMgQ2FuRGlzbWlzczxhbnk+O1xyXG4gICAgY29uc3Qgb2sgPSBkaXNtaXNzYWJsZS5vbkRpc21pc3MoaW5zdGFuY2UpO1xyXG4gICAgaWYgKGlzQm9vbGVhbihvaykpXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob2spO1xyXG4gICAgZWxzZSBpZiAoaXNQcm9taXNlKG9rKSlcclxuICAgICAgcmV0dXJuIG9rO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gb2sudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIHNjcm9sbFRvKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGl0ZW0gJiYgaXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgaW5saW5lOiAnZW5kJywgYmxvY2s6ICdlbmQnIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgX2NoaWxkcmVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFuZS1jb250ZW50Jyk7XHJcbiAgfVxyXG4gIGRvbmUoKSB7XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gIH1cclxuICBlbmFibGVOYXZpZ2F0aW9uQXJyb3dzKF8/OiBFdmVudCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5yb3VuZChjb250YWluZXIuc2Nyb2xsTGVmdCk7XHJcbiAgICB0aGlzLm5leHQgPSB0aGlzLl9ydGwgPyBjb250YWluZXIuY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0IDwgY29udGFpbmVyLnNjcm9sbFdpZHRoIDpcclxuICAgICAgc2Nyb2xsTGVmdCArIGNvbnRhaW5lci5jbGllbnRXaWR0aCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aDtcclxuICAgIHRoaXMucHJldiA9IHRoaXMuX3J0bCA/IHNjcm9sbExlZnQgPCAwIDogc2Nyb2xsTGVmdCA+IDA7XHJcbiAgfVxyXG4gIHNjcm9sbEJ5KG46IG51bWJlcikge1xyXG4gICAgY29uc3QgbGVmdCA9IG4gKiAodGhpcy5fcnRsID8gLTEgOiAxKTtcclxuICAgIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxCeSh7IGJlaGF2aW9yOiAnc21vb3RoJywgbGVmdCB9KTtcclxuICB9XHJcbiAgZm9jdXMoaW5kZXgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBlbC5mb2N1cygpO1xyXG4gIH1cclxuICBvblBhbmVSZXNpemUocGFuZTogUGFuZVJlZjxhbnk+LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucHJldmlvdXNFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdCAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IC0xIDogMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgY29uc3QgZGVsdGEgPSAoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoXHJcbiAgICAgICAgPSBNYXRoLm1heCh3aWR0aCArIGRlbHRhLCAzNTApICsgJ3B4JztcclxuICAgICAgcGFuZS5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uUmVzaXplKHt9IGFzIGFueSwgcGFuZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblRhYlJlc2l6ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkubmV4dEVsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0XHJcbiAgICAgIG1lID0gdGhpcyxcclxuICAgICAgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAxIDogLTE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICBtZS5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIC8vIHByZXZlbnQgbmVnYXRpdmUtc2l6ZWQgZWxlbWVudHNcclxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLm1heCgoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkLCAtd2lkdGgpO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoID0gKHdpZHRoICsgZGVsdGEpICsgJ3B4JztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RhYnMnLCBlbC5zdHlsZS53aWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lQYW5lKHBhbmU6IFBhbmVSZWYpIHtcclxuICAgIHBhbmUuX2Rlc3Ryb3koKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRW5kKHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgUEFORV9QQVJBTVNfUkVHRVggPSAvKDpbXFx3XFwtXSspL2c7XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlUm91dGVzKHJvdXRlczogUGFuZVJvdXRlW10sIHRyZWVQYXRoPzogc3RyaW5nKTogRXh0ZW5kZWRSb3V0ZVtdIHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IHJvdXRlID0gcm91dGVzW2ldLCBmdWxsUGF0aCA9ICh0cmVlUGF0aCA/ICh0cmVlUGF0aCArICcvJykgOiAnJykgKyByb3V0ZS5wYXRoO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24ocm91dGUsIHtcclxuICAgICAgZnVsbFBhdGgsXHJcbiAgICAgIHJlZ0V4OiBuZXcgUmVnRXhwKCdeJyArIGZ1bGxQYXRoLlxyXG4gICAgICAgIHJlcGxhY2UoJy8nLCAnXFxcXC8nKS5cclxuICAgICAgICByZXBsYWNlKFBBTkVfUEFSQU1TX1JFR0VYLCBlID0+IGAoPzwke2Uuc3Vic3RyKDEpfT5bXFxcXHdAXFxcXC1dKilgKSlcclxuICAgIH0pO1xyXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZHJlbiA9IHByZXBhcmVSb3V0ZXMocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKylcclxuICAgICAgICBPYmplY3QuYXNzaWduKGNoaWxkcmVuW2pdLCB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3V0ZXMgYXMgRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXh0ZW5kZWRSb3V0ZSBleHRlbmRzIFBhbmVSb3V0ZSB7XHJcbiAgZnVsbFBhdGg6IHN0cmluZztcclxuICByZWdFeDogUmVnRXhwO1xyXG4gIHBhcmVudD86IEV4dGVuZGVkUm91dGU7XHJcbiAgY2hpbGRyZW4/OiBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XHJcbiAgYml6ZG9jOiB0cnVlO1xyXG4gIHN0ZXA6IG51bWJlcjtcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG4gIHBhbmVzOiBhbnlbXTtcclxuICB0YWJzOiBhbnlbXTtcclxuICBzZWxlY3RlZFRhYkluZGV4PzogbnVtYmVyO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYW5lc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsQnkoLTQwMClcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgICpuZ0lmPVwicHJldlwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgIGFycm93X2JhY2tfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVzLXRpdGxlXCIgW0B0aXRsZV09XCJ0aXRsZUFuaW1hdGlvblwiPlxyXG4gICAgPGgxPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgKm5nSWY9XCJzd2FwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19jaXJjbGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhZGNydW1ic1wiICpuZ0lmPVwiIWZpcnN0XCI+XFw8L3NwYW4+XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZShwYW5lc1swXS5ndWlkZSlcIiAqbmdJZj1cInBhbmVzWzBdPy5ndWlkZVwiIFtiaXpkb2NUb29sdGlwXT1cIidIZWxwJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+aGVscDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8Yml6ZG9jLXF1aWNrdG9vbHM+PC9iaXpkb2MtcXVpY2t0b29scz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNwYW5uaW5nIGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCJcclxuICAgICAgIGNka1Njcm9sbGFibGVcclxuICAgICAgIEBwYW5lc1xyXG4gICAgICAgKHNjcm9sbCk9XCJlbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPGRpdiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ICE9PSBpICYmICFkcmFnZ2luZyAmJiBzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUGFuZVJlc2l6ZShwLCAkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiAqbmdJZj1cImRpYWxvZ1wiIChjbGljayk9XCJjbG9zZVRhYihzZWxlY3RlZFRhYkluZGV4KVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCIgI3RhYmluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gaW5saW5lPVwidHJ1ZVwiIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwhLS0qbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPD08IC0xICYmIHRhYnNbc2VsZWN0ZWRUYWJJbmRleF0uZXhwYW5kYWJsZVwiLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJ0LmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiF0LmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3t0Lmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3t0LnRpdGxlfX1cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0LmRpc21pc3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgY2xhc3M9XCJ0b29sXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwhLS1pbmxpbmU9XCJ0cnVlXCItLT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwidC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwidC5pbmplY3RvclwiIChjcmVhdGUpPVwidC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
1396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUE0QixvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFZLGdCQUFnQixHQUFHLE1BQU0sWUFBWSxDQUFDO0FBR25VLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBZ0QsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ1psQywrQkFDa0I7SUFEUSx5SkFBUyxlQUFBLGlCQUFVLEdBQUcsQ0FBQyxDQUFBLElBQUM7SUFFaEQsNkJBQThDO0lBQzVDLGdDQUNGO0lBQUEsaUJBQUksRUFBQTs7O0lBSnVELHlDQUEyQiwyQkFBQSxpQ0FBQTs7OztJQVFwRixrQ0FBeUY7SUFBakUsZ0tBQVMsZUFBQSxjQUFNLENBQUEsSUFBQzs7SUFBaUQsb0NBQXNDO0lBQUEsaUNBQWlCO0lBQUEsaUJBQVcsRUFBQTs7SUFBckcsNERBQWtDOzs7SUFFdEYsZ0NBQXlDO0lBQUEsa0JBQUM7SUFBQSxpQkFBTzs7O0lBRG5ELDZCQUF5RDtJQUN2RCxpRkFBaUQ7SUFDakQsWUFDRjtJQUFBLDBCQUFlOzs7O0lBRmMsZUFBWTtJQUFaLGlDQUFZO0lBQ3ZDLGVBQ0Y7SUFERSw0Q0FDRjs7OztJQUNBLGtDQUFtSDtJQUEzRixnS0FBUyxlQUFBLDRCQUFZLENBQUMsUUFBUSxDQUFBLElBQUM7O0lBQTRELGdDQUFVO0lBQUEsb0JBQUk7SUFBQSxpQkFBVyxFQUFBOztJQUE1RCw0REFBa0M7Ozs7SUFnQmxILCtCQUErRjtJQUF0QyxvT0FBYSxlQUFBLG1DQUF1QixDQUFBLElBQUM7SUFBQyxzQkFBTTtJQUFBLGlCQUFNOzs7O0lBTjdHLDZCQUFxRDtJQUNuRCwrQkFFcUU7SUFGaEUsbU9BQWMsdUVBQW9DLHFCQUFTLENBQUEsSUFBQyw0TUFDbkQsZUFBQSxxQkFBUyxDQUFBLElBRDBDO0lBRy9ELGdEQUFtRztJQUFoQyxrTkFBVSx3Q0FBb0IsSUFBQztJQUFDLGlCQUF1QixFQUFBO0lBRTVILGdGQUEyRztJQUM3RywwQkFBZTs7Ozs7SUFKUixlQUFvQztJQUFwQyx3REFBb0M7SUFBc0IsaUNBQUs7SUFDNUMsZUFBb0I7SUFBcEIsc0NBQW9CLDRCQUFBO0lBRWYsZUFBMEI7SUFBMUIsc0RBQTBCOzs7O0lBRzNELCtCQUEwRTtJQUFyQywySkFBUyxlQUFBLDBDQUEwQixDQUFBLElBQUM7SUFBQyxpQkFBTTs7OztJQUNoRiwrQkFDa0IsWUFBQTtJQUViLHlKQUFTLGVBQUEsaUJBQVMsR0FBRyxDQUFDLENBQUEsSUFBQztJQUN4QixtQ0FDRjtJQUFBLGlCQUFJLEVBQUE7OztJQUhvRCxlQUEyQjtJQUEzQix5Q0FBMkIsMkJBQUEsdUJBQUEsaUNBQUE7Ozs7SUFVakYsa0NBQThHO0lBQXRGLGlMQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDOztJQUFtRSxvQ0FBc0M7SUFBQSwwQkFBVTtJQUFBLGlCQUFXLEVBQUE7OztJQUE3RyxpRkFBaUQ7Ozs7SUFhM0csb0NBQW1FO0lBQW5DLGtPQUFTLGVBQUEsdUJBQVcsQ0FBQSxJQUFDO0lBQWMscUJBQUs7SUFBQSxpQkFBVzs7OztJQUxyRiw2QkFFcUM7SUFEbEMsaVJBQThCO0lBRS9CLG9DQUF1RztJQUFBLFlBQVU7SUFBQSxpQkFBVztJQUFBLFlBRTVIO0lBQUEsK0ZBQW1GO0lBRXJGLGlCQUFJOzs7OztJQUxELDJEQUFpQztJQUN4QixlQUFvQjtJQUFwQixzQ0FBb0IsZ0NBQUE7SUFBeUUsZUFBVTtJQUFWLGdDQUFVO0lBQVcsZUFFNUg7SUFGNEgsa0RBRTVIO0lBQVcsZUFBbUI7SUFBbkIsd0NBQW1COzs7O0lBSWxDLCtCQUF1SSwrQkFBQTtJQUNsRSx5TkFBVSx3Q0FBb0IsSUFBQztJQUFDLGlCQUF1QixFQUFBOzs7OztJQURqRiwyRUFBcUQ7SUFBYSwrQ0FBeUI7SUFDOUcsZUFBb0I7SUFBcEIsc0NBQW9CLDRCQUFBOzs7O0lBdEJoRCw2QkFBa0M7SUFDaEMsK0JBQThEO0lBQWxDLGtMQUFhLGVBQUEsMkJBQW1CLENBQUEsSUFBQztJQUFDLHNCQUFNO0lBQUEsaUJBQU07SUFDMUUsbUNBQTBGO0lBQTlCLHVMQUFjLGVBQUEsY0FBTSxDQUFBLElBQUM7SUFDL0UsK0JBQTRCO0lBQzFCLHFGQUFrTDtJQUNsTCwwQkFBSTtJQUFBLFlBQVM7SUFBQSxpQkFBSztJQUNsQixrQ0FBb0Y7SUFBNUQsdUtBQVMsZUFBQSxtQkFBVyxDQUFBLElBQUM7O0lBQXVDLHFDQUFvRDtJQUFBLDZCQUFZO0lBQUEsaUJBQVcsRUFBQTtJQUUvSiwyQkFBNkI7SUFDN0IsbUNBQWlFO0lBQXpDLHdLQUFTLGVBQUEsa0JBQVUsQ0FBQSxJQUFDO0lBQXFCLGlDQUFVO0lBQUEsc0JBQUs7SUFBQSxpQkFBVyxFQUFBLEVBQUE7SUFFN0YsZ0NBQStEO0lBQzdELDhFQU9JO0lBQ04saUJBQU07SUFDTixrRkFFTTtJQUNSLGlCQUFNO0lBQ1IsMEJBQWU7OztJQXZCdUIsZUFBdUI7SUFBdkIsNENBQXVCO0lBRVYsZUFBYTtJQUFiLHFDQUFhO0lBQ3RELGVBQVM7SUFBVCxrQ0FBUztJQUNpQyxlQUFxQztJQUFyQywrREFBcUM7SUFLakQsZUFBMEI7SUFBMUIsd0NBQTBCO0lBQzlCLGVBQVM7SUFBVCxxQ0FBUztJQVN0QixlQUFTO0lBQVQscUNBQVM7O0FEMUNoQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBY3BDLE1BQU0sT0FBTyxjQUFjO0lBMkR6QixZQUNzQixJQUFxQixFQUNqQyxRQUF3QixFQUN4QixHQUFzQixFQUN0QixPQUFvQixFQUNwQixNQUEwQixFQUMxQixNQUFvQixFQUNwQixTQUFtQjtRQUxuQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQWpFVixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFJOUQsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFNVixVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUMzQixTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUMzQixzQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBdUJmLGtCQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFHbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU9qQixXQUFNLEdBQWlCO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNoQyxRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQTtRQUNELFdBQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRzFCLGFBQVEsR0FBRyxFQUFjLENBQUM7UUFDMUIsU0FBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzdCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUzlDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLE1BQU07WUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWixRQUFRLENBQUMsRUFBRTtnQkFDVCxLQUFLLFVBQVU7b0JBQ2IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQixNQUFNO2dCQUNSLFFBQVE7YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQWhFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0IsQ0FBQyxLQUFLO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxFQUFFO1lBQzlFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM1QixNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBNkNELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDckIsU0FBUyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtZQUNsQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksRUFDRixJQUFJLEVBQ0osS0FBSyxFQUNMLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLFdBQVcsRUFDWCxLQUFLLEVBQ04sR0FBRyxDQUFDLENBQUM7WUFDTixJQUNFLFdBQW1CLEVBQ25CLE1BQWdCLEVBQ2hCLE1BQWUsRUFDZixJQUFZLEVBQ1osS0FBb0IsQ0FBQztZQUV2QixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDcEMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3hELElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hCO3FCQUNJO29CQUNILFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzlDO2dCQUNELElBQUksUUFBUSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNyRCxNQUFNLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQzdCLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQy9ELElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN2QjtvQkFDRCxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7aUJBQ2hDO2dCQUNELEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUxQixJQUFJLENBQUMsS0FBSztvQkFDUixNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU07b0JBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDO3FCQUNoRCxJQUFJLEtBQUssQ0FBQyxNQUFNO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsSUFBSTtvQkFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLElBQUk7b0JBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDOUI7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE1BQU07b0JBQUUsTUFBTSxHQUFHLGNBQWMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVc7b0JBQUUsV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUNwQztZQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO29CQUM1QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUM1QjtZQUNELElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRztvQkFDN0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7NEJBQ3JCLElBQUksV0FBVyxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0NBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7b0NBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQ0FDOUM7cUNBQ0k7b0NBQ0gsS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0NBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7b0NBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUNBQzFCO2dDQUNELE9BQU87NkJBQ1I7aUNBQ0k7Z0NBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0NBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0NBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0NBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dDQUMzQixPQUFPOzZCQUNSO3lCQUNGOzZCQUNJLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7NEJBQzVCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQzs0QkFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7NEJBQzNCLE9BQU87eUJBQ1I7d0JBQ0QsQ0FBQyxFQUFFLENBQUM7cUJBQ0w7O29CQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO3dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUN0QixJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO2dDQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTTtvQ0FDbkQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUNwQjtvQ0FDSCxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0NBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7b0NBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ2xCO2dDQUNELE9BQU87NkJBQ1I7aUNBQ0k7Z0NBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQ0FDM0IsT0FBTzs2QkFDUjt5QkFDRjs2QkFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUM3QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUM5RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzs0QkFDM0IsT0FBTzt5QkFDUjt3QkFDRCxDQUFDLEVBQUUsQ0FBQztxQkFDTDtnQkFDSCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxLQUFLO3dCQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUc7d0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQzFDOzRCQUNFLFdBQVc7NEJBQ1gsSUFBSTs0QkFDSixLQUFLOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxLQUFLOzRCQUNMLElBQUk7NEJBQ0osSUFBSSxFQUFFLEtBQUs7NEJBQ1gsTUFBTTs0QkFDTixNQUFNOzRCQUNOLFdBQVc7NEJBQ1gsTUFBTTt5QkFDUCxDQUFDLENBQUM7O3dCQUVMLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQzNDOzRCQUNFLFdBQVc7NEJBQ1gsSUFBSTs0QkFDSixLQUFLOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxJQUFJOzRCQUNKLElBQUksRUFBRSxLQUFLOzRCQUNYLE1BQU07NEJBQ04sTUFBTTs0QkFDTixXQUFXOzRCQUNYLE1BQU07eUJBQ1AsQ0FBQyxDQUFDO29CQUNQLEtBQUs7d0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7aUJBQzlCO3FCQUNJO29CQUNILE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRzt3QkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDbEY7YUFDRjtpQkFDSTtnQkFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRztvQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQ3ZCO3dCQUNFLElBQUksRUFBRSxLQUFLO3dCQUNYLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSTt3QkFDakIsTUFBTTt3QkFDTixXQUFXO3dCQUNYLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxLQUFLO3dCQUNMLE1BQU07d0JBQ04sV0FBVzt3QkFDWCxNQUFNO3FCQUNQLENBQUMsQ0FBQzs7b0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQzdCO3dCQUNFLElBQUksRUFBRSxLQUFLO3dCQUNYLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSTt3QkFDakIsTUFBTTt3QkFDTixXQUFXO3dCQUNYLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxNQUFNO3dCQUNOLE1BQU0sRUFBRSxXQUFXO3FCQUNwQixDQUFDLENBQUM7YUFDTjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxHQUFHLENBQUMsZUFBZTtvQkFBRSxPQUFPO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFxQixDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7YUFDaEQ7O2dCQUVDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUM5QyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs7WUFFckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUMzQixRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ08sS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFXLEVBQUUsS0FBb0I7UUFFMUQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUN2RCxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRTdELFNBQVMsV0FBVyxDQUFDLElBQVk7WUFDL0IsT0FBTyxJQUFJO2dCQUNULEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6RjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUN2RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3pCOztvQkFFQyxDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JGO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3BELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQy9CO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEI7O29CQUVDLENBQUMsRUFBRSxDQUFDO2FBQ1A7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLFdBQW1CLEVBQUUsS0FBVztRQUN2RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUV2QixPQUFPLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ3BDLE9BQU87aUJBQ1I7cUJBQ0k7b0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9DLE9BQU87aUJBQ1I7YUFDRjtpQkFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlELE9BQU87YUFDUjtZQUNELEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNoQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXO1lBQ3JELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBYSxFQUFFLElBQVksRUFBRSxXQUFtQixFQUFFLEtBQVc7UUFDdEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUVyQyxJQUFJLENBQUMsS0FBSztZQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFdkIsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNyQixJQUFJLFdBQVcsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFO29CQUNuQyxPQUFPO2lCQUNSO3FCQUNJO29CQUNILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM5QyxPQUFPO2lCQUNSO2FBQ0Y7aUJBQ0ksSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3RCxPQUFPO2FBQ1I7WUFDRCxLQUFLLEVBQUUsQ0FBQztTQUNUO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXhELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRS9DLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRztZQUNyQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxNQUFNLEVBQUUsV0FBVztZQUNuQixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLGFBQWEsQ0FBQyxLQUFvQixFQUFFLElBQVk7UUFDdEQsSUFBSyxLQUF1QixDQUFDLE1BQU07WUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxLQUF1QjtnQkFDbkQsS0FBdUIsQ0FBQyxNQUFNO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUFDLElBQWtCLEVBQUUsV0FBcUIsRUFBRSxLQUFlO1FBQ2hGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFZLEVBQUUsSUFBa0IsRUFBRSxNQUFnQixFQUFFLFdBQXFCLEVBQUUsS0FBZTtRQUNqSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUN2QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBc0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3RDO2FBQ0k7WUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM3QjtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUssS0FBSyxDQUFDLEtBQXVCLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQzVFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0JBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07WUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsTUFBTTtJQUNFLG1CQUFtQjtRQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFDYixJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxLQUFzQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDVixDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBZ0M7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQWtCO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxXQUFxQjtRQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksV0FBbUIsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxXQUFXO29CQUFFLFdBQVcsR0FBRyxFQUFFLENBQUM7O29CQUM5QixXQUFXLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztnQkFFMUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUNmLFdBQVcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3FCQUNyRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ25CLFdBQVcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzVELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFDbEIsV0FBVyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDOztvQkFFN0MsV0FBVyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQ3ZDO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ08saUJBQWlCLENBQUMsV0FBbUI7UUFDM0MsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLFdBQVcsSUFBSSxXQUFXO1lBQ3hCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN2QjtnQkFDSCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3RFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNLLE9BQU8sQ0FBQyxLQUFvQixFQUFFLElBQVk7UUFDaEQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQy9CLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBRXJCLE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLEdBQVc7UUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSztZQUNQLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDckIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLEtBQUs7b0JBQ1AsS0FBSyxHQUFHLEtBQUssQ0FBQzs7b0JBQ1gsTUFBTTthQUNaO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFvQixFQUFFLElBQVksRUFBRSxNQUFnQixFQUFFLElBQWM7UUFDdkYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNwQyw0QkFBNEI7WUFDNUIsTUFBTSxvQkFBb0IsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksTUFBTTtZQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBb0IsRUFBRSxJQUFZLEVBQUUsTUFBZ0IsRUFBRSxJQUFjO1FBQzdGLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUksTUFBTTtZQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLO2VBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFOUIsSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLE9BQU87WUFDVCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUEyRCxFQUFFLE1BQWdCLEVBQUUsSUFBYztRQUNsSCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBcUIsQ0FBQztnQkFDdEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDO29CQUNsQixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDMUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztvQkFFdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBSSxTQUEyQixFQUFFLE9BQXFCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELE1BQU0sQ0FBSSxRQUFnQixFQUFFLFNBQTJCLEVBQUUsT0FBcUI7UUFDNUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBSSxTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDTyxXQUFXLENBQVUsU0FBMkIsRUFBRSxPQWN6RCxFQUFFLFFBQWlCO1FBRWxCLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUVoRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFJLFNBQVMsRUFBRTtZQUN6QyxJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM1QixXQUFXO1lBQ1gsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLEtBQUssU0FBUztZQUN4QixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNLLFVBQVUsQ0FBVSxTQUEyQixFQUNyRCxPQWtCQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssVUFBVSxDQUFVLFNBQTJCLEVBQUUsT0FleEQ7UUFDQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUN4QixNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQzFELFVBQVUsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsRUFDdEUsV0FBVyxHQUFHLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDO1FBRTVFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUksU0FBUyxFQUN0QztZQUNFLElBQUksRUFBRSxLQUFLO1lBQ1gsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLE9BQU87WUFDVixNQUFNO1lBQ04sV0FBVztZQUNYLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUM7WUFDeEIsR0FBRztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ2I7O29CQUVDLENBQUMsRUFBRSxDQUFBO2FBQ04sUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUN4Qjs7WUFFQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUNsQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBSSxPQUFPLENBQUMsS0FBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBVSxPQUFvQixFQUFFLElBQWdCO1FBQ3hFLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxPQUFPO2dCQUNWO29CQUNFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDakQ7eUJBQ0k7d0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25CO29CQUNELE1BQU07aUJBQ1A7WUFDSCxLQUFLLE9BQU87Z0JBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtvQkFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3RCO3FCQUNJO29CQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO3dCQUNuQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzs7d0JBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLO29CQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O29CQUVqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEMsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBRUgsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksR0FBRyxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELE1BQU07SUFDRSxPQUFPO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGFBQStCLEVBQ3hFLEtBQUssR0FBRyxFQUFFLENBQUMsZ0JBQWtDLENBQUM7WUFDaEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUNsQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUM1RztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEVBQ3ZFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssUUFBUSxDQUFDLElBQWtCO1FBQ2pDLElBQUksR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxHQUFHLENBQUMsZUFBZTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsR0FBRztZQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekI7O2dCQUVDLENBQUMsRUFBRSxDQUFDO1NBQ1AsUUFDTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNPLGVBQWU7UUFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsS0FBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUMzRCxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxHQUFHLENBQUMsZUFBZTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFN0MsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O2dCQUNuRCxPQUFPO1NBQ2I7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBZ0I7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRWpDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFrQjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRSxPQUFPLEVBQUUsQ0FBQztRQUVaLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFO2dCQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFrQjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNO0lBQ0UsS0FBSyxDQUFDLFdBQVc7UUFDdkIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDTyxLQUFLLENBQUMsVUFBVTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM5QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFnQjtRQUN4QyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUs7WUFDcEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsRUFBRTtnQkFDTCxNQUFNLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFrQjtRQUNyQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBb0IsQ0FBQztRQUN0RSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN4QixJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7O1lBRVYsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBbUIsQ0FBQztRQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELHNCQUFzQixDQUFDLENBQVM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzdELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixVQUFVLEdBQUcsU0FBUyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsUUFBUSxDQUFDLENBQVM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQW1CLENBQUM7UUFDeEQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFrQixFQUFFLEtBQWlCO1FBQ2hELE1BQU0sRUFBRSxHQUFJLEtBQUssQ0FBQyxVQUE2QixDQUFDLHNCQUF3QyxDQUFDO1FBRXpGLE1BQU0sMkJBQTJCO1FBQy9CLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxFQUN0QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsVUFBNkIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxVQUE2QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRixTQUFTLFdBQVcsQ0FBQyxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUTtrQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEVBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sRUFBRSxHQUFJLEtBQUssQ0FBQyxVQUE2QixDQUFDLGtCQUFvQyxDQUFDO1FBRXJGLE1BQ0UsRUFBRSxHQUFHLElBQUk7UUFDVCwyQkFBMkI7UUFDM0IsS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQ3RCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhCLEtBQUssQ0FBQyxVQUE2QixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsUUFBUSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDbkMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxDQUFDLFVBQTZCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRSxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixTQUFTLFdBQVcsQ0FBQyxDQUFDO1lBRXBCLGtDQUFrQztZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVELFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFDTyxZQUFZLENBQUMsSUFBYTtRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OzRFQTlwQ1UsY0FBYyx1QkE0RGYsVUFBVTtpRUE1RFQsY0FBYzsrQkFFSyxnQkFBZ0I7O3VCQUVuQyxhQUFhOzs7Ozs7OzZHQUpiLGNBQVUseUdBQVYsY0FBVTs7UUNuQ3ZCLDhCQUFtQjtRQUNqQiwrREFLTTtRQUNOLDhCQUFtRCxTQUFBO1FBRS9DLHFFQUFvSztRQUNwSyxpRkFHZTtRQUNmLHFFQUFxSjtRQUN2SixpQkFBSztRQUNMLDBCQUNPLHdCQUFBO1FBRVQsaUJBQU07UUFDTixpQ0FHK0M7UUFBMUMsZ0dBQVUsa0NBQThCLElBQUM7UUFDNUMsbUZBT2U7UUFDakIsaUJBQU07UUFDTixpRUFBZ0Y7UUFDaEYsaUVBTU07UUFDUixpQkFBTTtRQUNOLHFGQXlCZTs7UUFqRVAsZUFBVTtRQUFWLCtCQUFVO1FBS1MsZUFBeUI7UUFBekIsMkNBQXlCO1FBRUosZUFBVTtRQUFWLCtCQUFVO1FBQ3hCLGVBQVU7UUFBVixtQ0FBVTtRQUltQixlQUFxQjtRQUFyQix1RUFBcUI7UUFRN0UsZUFBTTtRQUFOLGtDQUFNO1FBRW1CLGVBQVU7UUFBVixtQ0FBVTtRQVNqQixlQUFZO1FBQVosaUNBQVk7UUFFN0IsZUFBVTtRQUFWLCtCQUFVO1FBT0gsZUFBaUI7UUFBakIsc0NBQWlCO3FpR0RoQmxCLENBQUMsY0FBYztZQUN6QixtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLFlBQVk7U0FDYjt1RkFFVSxjQUFjO2NBYjFCLFNBQVM7MkJBQ0UscUJBQXFCLGNBR25CLENBQUMsY0FBYztvQkFDekIsbUJBQW1CO29CQUNuQixhQUFhO29CQUNiLGNBQWM7b0JBQ2QsY0FBYztvQkFDZCxhQUFhO29CQUNiLFlBQVk7aUJBQ2I7O3NCQThERSxNQUFNO3VCQUFDLFVBQVU7a01BM0RELFlBQVk7a0JBQTlCLE1BQU07WUFDeUQsa0JBQWtCO2tCQUFqRixTQUFTO21CQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ3pDLFlBQVk7a0JBQWhDLFNBQVM7bUJBQUMsUUFBUTtZQUN5QixXQUFXO2tCQUF0RCxTQUFTO21CQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFvNEJwQyxRQUFRO2tCQURiLFlBQVk7bUJBQUMseUJBQXlCO1lBV3ZDLFFBQVE7a0JBRFAsWUFBWTttQkFBQyxlQUFlOztBQWdSL0IsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUM7QUFFeEMsU0FBUyxhQUFhLENBQUMsTUFBbUIsRUFBRSxRQUFpQjtJQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUVsRixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNuQixRQUFRO1lBQ1IsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRO2dCQUM5QixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDbkIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNwRSxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7aUJBQ2QsQ0FBQyxDQUFDO1NBQ047S0FDRjtJQUNELE9BQU8sTUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzQm9vbGVhbiwgaXNEYXRlLCBpc1Byb21pc2UsIGlzU3RyaW5nIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgUEFORVNfREFUQSwgUGFuZVJlZiwgUGFuZU9wdGlvbnMsIFBhbmVDb21tYW5kLCBRdWVyeVBhcmFtTmF2aWdhdGlvbiwgUGFyYW1OYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uTW9kZSwgTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uQ2xvc2UsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25Gb2N1cywgUEFUSF9DSEFSLCBRVUVSWV9DSEFSLCBBUkdfQ0hBUiwgUEFORV9DSEFSLCBDb2xsYXBzZU5hdmlnYXRpb24sIEJhY2tOYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uRXhwYW5kLCBQYW5lTW9kZSwgTmF2aWdhdGlvblJlc2l6ZSwgfSBmcm9tICcuL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlLCBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBXaW5kb3dUaXRsZVNlcnZpY2UgfSBmcm9tICcuLi93aW5kb3ctdGl0bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhbmVzQW5pbWF0aW9uLCBwYW5lQW5pbWF0aW9uLCBwYW5lc1RpdGxlQW5pbWF0aW9uLCBwYXJhbUFuaW1hdGlvbiwgcXVlcnlBbmltYXRpb24sIHRhYkFuaW1hdGlvbiwgdGFic0FuaW1hdGlvbiB9IGZyb20gJy4uL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBQYW5lUmVzb2x2ZSwgUGFuZVJvdXRlLCBQYXJhbU1hcCwgQ2FuRGlzbWlzcywgREVGQVVMVF9QT0xJQ1ksIE9wZW5Qb2xpY3kgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgR3VpZGVTZXJ2aWNlIH0gZnJvbSAnLi4vZ3VpZGUvZ3VpZGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSaXBwbGVDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKG5hbWU/OiBzdHJpbmcpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9ST1VURSA9IFsnZGFzaGJvYXJkJ107XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLXBhbmVzLW91dGxldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Nsb3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbG90cy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtwYW5lc0FuaW1hdGlvbixcclxuICAgIHBhbmVzVGl0bGVBbmltYXRpb24sXHJcbiAgICBwYW5lQW5pbWF0aW9uLFxyXG4gICAgcGFyYW1BbmltYXRpb24sXHJcbiAgICBxdWVyeUFuaW1hdGlvbixcclxuICAgIHRhYnNBbmltYXRpb24sXHJcbiAgICB0YWJBbmltYXRpb25cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbG90c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZGlhbG9nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ3Bhbm5pbmcnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBfcGFuZXNDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFiaW5nJykgX3RhYnNFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoQ2RrU2Nyb2xsYWJsZSwgeyBzdGF0aWM6IHRydWUgfSkgX3Njcm9sbGFibGU6IENka1Njcm9sbGFibGU7XHJcbiAgdGl0bGVBbmltYXRpb24gPSAwO1xyXG4gIGdyb3VwOiBzdHJpbmc7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuXHJcbiAgcmVhZG9ubHkgcGFuZXM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcmVhZG9ubHkgdGFiczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICBwcml2YXRlIF9zZWxlY3RlZFRhYkluZGV4ID0gLTE7XHJcbiAgZGlhbG9nID0gZmFsc2U7XHJcbiAgcHVibGljIGdldCBzZWxlY3RlZFRhYkluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRUYWJJbmRleCh2YWx1ZSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJJbmRleCA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiB0aGlzLnRhYnMuYXQodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCkuZGlhbG9nKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kaWFsb2dDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmRpYWxvZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2V0VGFiQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldFRhYkFuaW1hdGlvbigpIHtcclxuICAgIHRoaXMudGFic0FuaW1hdGlvbiA9IHtcclxuICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgc3RhcnRXaWR0aDogdGhpcy5fdGFic0VsZW1lbnQgPyB0aGlzLl90YWJzRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDogMFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgbmV4dDogYm9vbGVhbjtcclxuICBwcmV2OiBib29sZWFuO1xyXG4gIGRyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGFic0FuaW1hdGlvbjoge1xyXG4gICAgdmFsdWU6IG51bWJlcixcclxuICAgIHBhcmFtczoge1xyXG4gICAgICBzdGFydFdpZHRoOiBudW1iZXJcclxuICAgIH1cclxuICB9O1xyXG4gIHJlYWRvbmx5IHJpcHBsZTogUmlwcGxlQ29uZmlnID0ge1xyXG4gICAgY29sb3I6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCksXHJcbiAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIHJhZGl1czogMjVcclxuICB9XHJcbiAgYWNjZW50OiBzdHJpbmcgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIHByaXZhdGUgX25hdmlnYXRpb25JblByb2Nlc3M6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfcmVwb3NpdG9yeTogRXh0ZW5kZWRSb3V0ZVtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmcgPSBbXSBhcyBzdHJpbmdbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9ydGwgPSB0aGlzLl9zZXNzaW9uLmludmVyc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXppbmcgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQQU5FU19EQVRBKSBkYXRhOiBFeHRlbmRlZFJvdXRlW10sXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF90aXRsZTogV2luZG93VGl0bGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ3VpZGU6IEd1aWRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4gdGhpcy5hY2NlbnQgPSBfc2Vzc2lvbi5nZXRBY2NlbnQoKSk7XHJcbiAgICBfcm91dGVyLl9jb21tJC5cclxuICAgICAgc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoZSkge1xyXG4gICAgICAgICAgY2FzZSAnY29sbGFwc2UnOlxyXG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5fcmVwb3NpdG9yeSA9IHByZXBhcmVSb3V0ZXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JvdXRlci5fbmF2aWdhdGUkLlxyXG4gICAgICBzdWJzY3JpYmUoYXN5bmMgbiA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBjb21tYW5kcywgY29tcG9uZW50LCBwYXRoTW9kZSwgcmVsYXRpdmVUbyB9ID0gbjtcclxuICAgICAgICBsZXQge1xyXG4gICAgICAgICAgaWNvbixcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgIH0gPSBuO1xyXG4gICAgICAgIGxldFxyXG4gICAgICAgICAgcXVlcnlTdHJpbmc6IHN0cmluZyxcclxuICAgICAgICAgIHBhcmFtczogUGFyYW1NYXAsXHJcbiAgICAgICAgICBwYXJlbnQ6IFBhbmVSZWYsXHJcbiAgICAgICAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgICByb3V0ZTogRXh0ZW5kZWRSb3V0ZTtcclxuXHJcbiAgICAgICAgaWYgKGNvbW1hbmRzICYmIGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcGF0aCA9IG4uY29tbWFuZHMuam9pbignLycpO1xyXG4gICAgICAgICAgaWYgKHBhdGguaW5kZXhPZihRVUVSWV9DSEFSKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlZ3MgPSBwYXRoLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHNlZ3NbMV07XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyB8fCAnJyk7XHJcbiAgICAgICAgICAgIHBhdGggPSBzZWdzWzBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gbi5xdWVyeVBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGF0aE1vZGUgPT09ICdyZWxhdGl2ZScgfHwgcGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICBwYXJlbnQgPSByZWxhdGl2ZVRvIHx8IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHBhdGggPSBwYXJlbnQucGF0aDtcclxuICAgICAgICAgICAgd2hpbGUgKHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgICBwYXJlbnRwYXRoID0gcGFyZW50cGF0aC5zdWJzdHIoMCwgcGFyZW50cGF0aC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aCA9IHBhcmVudHBhdGggKyAnLycgKyBwYXRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIXJvdXRlKVxyXG4gICAgICAgICAgICB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcbiAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IHJvdXRlLnBvbGljeSB8fCBERUZBVUxUX1BPTElDWTtcclxuICAgICAgICAgIGVsc2UgaWYgKHJvdXRlLnBvbGljeSkgcG9saWN5IHw9IHJvdXRlLnBvbGljeTtcclxuICAgICAgICAgIGlmICghaWNvbikgaWNvbiA9IHJvdXRlLmljb247XHJcbiAgICAgICAgICBpZiAoIWhlbHApIGhlbHAgPSByb3V0ZS5oZWxwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSBERUZBVUxUX1BPTElDWTtcclxuICAgICAgICAgIGlmICghcXVlcnlQYXJhbXMpIHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuQ2xlYXIpID09IE9wZW5Qb2xpY3kuQ2xlYXIpIHtcclxuICAgICAgICAgIHRoaXMuX2NsZWFyUGVuZGluZygpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJUYWJzKCk7XHJcbiAgICAgICAgICBpZiAoIShwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikpXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyUGFuZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbW1hbmRzKSB7XHJcbiAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gdGFiLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSAmJiB0YWIuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHRhYiwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgdGFiLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHBhbmUucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHBhbmUucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgcGFuZSwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcm91dGUgJiZcclxuICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYiA/XHJcbiAgICAgICAgICAgICAgdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gOiB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSAhPSBPcGVuUG9saWN5LlRhYikgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZEluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgaWNvbiwgdGl0bGUsIGhlbHAsXHJcbiAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgIHBvbGljeSwgcXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHdpbmRvdy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3BvcHN0YXRlJyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBlID0+IHtcclxuICAgICAgaWYgKHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MpIHtcclxuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUuYml6ZG9jKSB7XHJcbiAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEJhY2tOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gZS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGU7XHJcbiAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zd2FwID0gc3RhdGUuc3dhcDtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSBzdGF0ZS5zd2FwVGFiO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gc3RhdGUucHJldkdyb3VwO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAgPSBzdGF0ZS5ncm91cDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBzdGF0ZS5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZShsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5fcmVzaXppbmcucGlwZShkZWJvdW5jZVRpbWUoMTUwKSkuc3Vic2NyaWJlKHRoaXMuX3Jlc2l6ZS5iaW5kKHRoaXMpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfZGVzZXJpYWxpemUodXJsOiBzdHJpbmcsIHN0YXRlPzogSGlzdG9yeVN0YXRlKSB7XHJcblxyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBkZWNvZGVVUklDb21wb25lbnQodXJsKS5zcGxpdChQQU5FX0NIQVIpLFxyXG4gICAgICBwYW5lcyA9IGRlc2VyaWFsaXplKHNlY3Rpb25zWzBdKSxcclxuICAgICAgdGFicyA9IHNlY3Rpb25zLmxlbmd0aCA+IDEgPyBkZXNlcmlhbGl6ZShzZWN0aW9uc1sxXSkgOiBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiBkZXNlcmlhbGl6ZShwYXRoOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIHBhdGguXHJcbiAgICAgICAgc3BsaXQoUEFUSF9DSEFSKS5tYXAocyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBbcGF0aCwgcXVlcnlTdHJpbmddID0gcy5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgIHJldHVybiB7IHBhdGgsIHF1ZXJ5U3RyaW5nIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHBhbmVzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVBhbmUoaSwgcGFuZS5wYXRoLCBwYW5lLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnBhbmVzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiBwYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICAgIGlmIChwYW5lcy5sZW5ndGggLSAxIDwgaSB8fCBwYW5lLnBhdGggIT09IHBhbmVzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IGkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgdGhpcy5wYW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4IDwgMClcclxuICAgICAgdGhpcy5zZWxlY3QoMCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRhYiA9IHRhYnNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlVGFiKGksIHRhYi5wYXRoLCB0YWIucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUudGFic1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggPiB0YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoIC0gMSA8IGkgfHwgdGFiLnBhdGggIT09IHRhYnNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0YWIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IG4gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgaWYgKHBhbmUuZXhwYW5kZWQgIT09IChuID09PSAxKSkge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRXhwYW5kKHBhbmUuX2V4cGFuZGVkID0gbiA9PT0gMSwgcGFuZSk7XHJcbiAgICAgICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcXVlcnlTdHJpbmdcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZVBhbmUoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBhbmUucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgcGFuZSwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZEFuY2VzdG9yKHJvdXRlLCBwYXRoKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFBhbmUocm91dGUuY29tcG9uZW50LCB7XHJcbiAgICAgIHBhdGgsIHBhcmVudCwgcm91dGUsIGRhdGE6IHN0YXRlLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSxcclxuICAgICAgZm9jdXM6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVUYWIoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyh0YWIucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgdGhpcy5faW5zZXJ0VGFiKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSB8IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLFxyXG4gICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgZm9jdXM6IGZhbHNlLFxyXG4gICAgICBzd2FwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbmRBbmNlc3Rvcihyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBpZiAoKHJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudClcclxuICAgICAgcmV0dXJuIHRoaXMucGFuZXMuZmluZChwID0+IChwLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpID09PVxyXG4gICAgICAgIChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgJiZcclxuICAgICAgICBwYXRoLnN0YXJ0c1dpdGgocC5wYXRoKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmF2UXVlcnlQYXJhbXMocGFuZTogUGFuZVJlZjxhbnk+LCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIHN0YXRlOiBQYXJhbU1hcCkge1xyXG4gICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICBzdGF0ZSAmJiBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBRdWVyeVBhcmFtTmF2aWdhdGlvbihxdWVyeVBhcmFtcywgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2UGFyYW1zKHBhdGg6IHN0cmluZywgcGFuZTogUGFuZVJlZjxhbnk+LCBwYXJhbXM6IFBhcmFtTWFwLCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIHN0YXRlOiBQYXJhbU1hcCkge1xyXG4gICAgaWYgKHBhbmUucm91dGUuY2FuRGlzbWlzcylcclxuICAgICAgYXdhaXQgdGhpcy5fZGlzbWlzcyhwYW5lKTtcclxuXHJcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgcGFuZS5fcGF0aCA9IHBhdGg7XHJcbiAgICBwYW5lLl9wYXJhbXMkLm5leHQocGFyYW1zKTtcclxuICAgIGlmIChxdWVyeVBhcmFtcykge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQocXVlcnlQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHt9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGV2dCA9IG5ldyBQYXJhbU5hdmlnYXRpb24ocGFyYW1zLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuXHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQucm91dGUgJiYgKGNoaWxkLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCA9PT0gcGFuZS5yb3V0ZSkge1xyXG4gICAgICAgIGNoaWxkLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24oY2hpbGQuZGF0YSwgc3RhdGUpKTtcclxuICAgICAgICBjaGlsZC5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgY2hpbGQuX3BhdGggPSBwYW5lLnBhdGggKyAnLycgKyBjaGlsZC5yb3V0ZS5wYXRoO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiBjaGlsZCA9PT0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBjaGlsZC5ncm91cDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHBhbmUubW9kZSA9PT0gJ3BhbmUnKSB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3N5bmNCcm93c2VySGlzdG9yeSgpIHtcclxuICAgIGxldCBwYXRoID0gdGhpcy5wYW5lcy5maWx0ZXIocCA9PiBwLnJvdXRlKS5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpO1xyXG4gICAgICBpZiAodGFicy5sZW5ndGgpXHJcbiAgICAgICAgcGF0aCArPSBQQU5FX0NIQVIgKyB0YWJzLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fY29uc3RydWN0SGlzdG9yeVN0YXRlKCk7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gdHJ1ZTtcclxuICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCAnJywgJy8nICsgcGF0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MgPSBmYWxzZSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJpemRvYzogdHJ1ZSxcclxuICAgICAgc3RlcDogaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IChoaXN0b3J5LnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSkuc3RlcCArIDEgOiAxLFxyXG4gICAgICBzZWxlY3RlZFRhYkluZGV4OiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhbmVzOiB0aGlzLnBhbmVzLm1hcChwID0+IHAuZGF0YSksXHJcbiAgICAgIHRhYnM6IHRoaXMudGFicy5tYXAodCA9PiB0LmRhdGEpLFxyXG4gICAgICBzd2FwOiB0aGlzLnN3YXAsXHJcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxyXG4gICAgICBzd2FwVGFiOiB0aGlzLnN3YXBUYWIsXHJcbiAgICAgIHByZXZHcm91cDogdGhpcy5wcmV2R3JvdXBcclxuICAgIH0gYXMgSGlzdG9yeVN0YXRlO1xyXG4gIH1cclxuXHJcbiAgZHJvcChldnQ6IENka0RyYWdEcm9wPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbZXZ0LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoZXZ0LnByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoZXZ0LmN1cnJlbnRJbmRleCwgMCwgcGFuZSk7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGQ8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmluc2VydCh0aGlzLnBhbmVzLmxlbmd0aCwgY29tcG9uZW50LCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5zZXJ0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZTxUPihjb21wb25lbnQsIG9wdGlvbnMgfHwge30sIHBvc2l0aW9uKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICBwcml2YXRlIF9pbnNlcnRQYW5lPFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczoge1xyXG4gICAgcGF0aD86IHN0cmluZztcclxuICAgIHJvdXRlPzogUGFuZVJvdXRlO1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgaW5wdXRzPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgcGFyZW50PzogUGFuZVJlZjxhbnk+O1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgZm9jdXM/OiBib29sZWFuXHJcbiAgfSwgcG9zaXRpb24/OiBudW1iZXIpIHtcclxuXHJcbiAgICBjb25zdCBzdHJldGNoYWJsZSA9IChvcHRpb25zLnBvbGljeSAmIE9wZW5Qb2xpY3kuU3RyZXRjaCkgPT0gT3BlblBvbGljeS5TdHJldGNoO1xyXG5cclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LCB7XHJcbiAgICAgIG1vZGU6ICdwYW5lJyxcclxuICAgICAgZXhwYW5kZWQ6ICF0aGlzLnBhbmVzLmxlbmd0aCxcclxuICAgICAgc3RyZXRjaGFibGUsXHJcbiAgICAgIC4uLm9wdGlvbnNcclxuICAgIH0pO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICB0aGlzLnBhbmVzLnB1c2gocGFuZSk7XHJcbiAgICB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvblN0YXJ0KHBhbmUpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgICAgdGhpcy5fdGl0bGUuc2V0KHBhbmUudGl0bGUpO1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiAxKSB0aGlzLnNjcm9sbFRvKHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NvbnN0cmFjdDxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sXHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIG1vZGU6IFBhbmVNb2RlLFxyXG4gICAgICBleHBhbmRlZD86IGJvb2xlYW47XHJcbiAgICAgIGRpYWxvZz86IGJvb2xlYW47XHJcbiAgICAgIHN0cmV0Y2hhYmxlPzogYm9vbGVhbjtcclxuICAgICAgcGF0aD86IHN0cmluZztcclxuICAgICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICBncm91cD86IHN0cmluZztcclxuICAgICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgICAgaGVscD86IHN0cmluZztcclxuICAgICAgcGFyZW50PzogUGFuZVJlZjxhbnk+O1xyXG4gICAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgICAgZGlzbWlzc2FibGU/OiBib29sZWFuO1xyXG4gICAgICBleHBhbmRhYmxlPzogYm9vbGVhblxyXG4gICAgfSkge1xyXG4gICAgY29uc3QgcGFuZSA9IG5ldyBQYW5lUmVmPFQ+KGNvbXBvbmVudCwgdGhpcy5faW5qZWN0b3IsIG9wdGlvbnMpO1xyXG4gICAgcGFuZS5fY29tbSQuc3Vic2NyaWJlKGUgPT4gdGhpcy5fcGFuZUNvbW1hbmQ8VD4oZSwgcGFuZSkpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luc2VydFRhYjxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgIHJvdXRlPzogUGFuZVJvdXRlO1xyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcGFyZW50PzogUGFuZVJlZjxhbnk+O1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIHN3YXA/OiBib29sZWFuO1xyXG4gICAgZm9jdXM/OiBib29sZWFuO1xyXG4gIH0pIHtcclxuICAgIGNvbnN0IHsgcG9saWN5IH0gPSBvcHRpb25zLFxyXG4gICAgICBkaWFsb2cgPSAocG9saWN5ICYgT3BlblBvbGljeS5EaWFsb2cpID09IE9wZW5Qb2xpY3kuRGlhbG9nLFxyXG4gICAgICBleHBhbmRhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRXhwYW5kYWJsZSkgPT0gT3BlblBvbGljeS5FeHBhbmRhYmxlLFxyXG4gICAgICBkaXNtaXNzYWJsZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpc21pc3NhYmxlKSA9PSBPcGVuUG9saWN5LkRpc21pc3NhYmxlO1xyXG5cclxuICAgIGNvbnN0IHRhYiA9IHRoaXMuX2NvbnN0cmFjdDxUPihjb21wb25lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICBtb2RlOiAndGFiJyxcclxuICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICBkaWFsb2csXHJcbiAgICAgICAgZGlzbWlzc2FibGUsXHJcbiAgICAgICAgZXhwYW5kYWJsZVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHRhYikpO1xyXG4gICAgaWYgKHRhYi5ncm91cCAmJiB0aGlzLmdyb3VwICE9PSB0YWIuZ3JvdXAgJiYgb3B0aW9ucy5zd2FwICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgaSA9IDAsIHN3YXAgPSBmYWxzZTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYnNbaV0uZ3JvdXAgIT09IHRhYi5ncm91cCkge1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy50YWJzW2ldKTtcclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBzd2FwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrXHJcbiAgICAgIH0gd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gdGhpcy5ncm91cDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIHRhYjtcclxuICB9XHJcblxyXG4gIGd1aWRlKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZ3VpZGUuc3RhcnQobmFtZSk7XHJcbiAgfVxyXG4gIGJhY2soKSB7XHJcbiAgICB0aGlzLl9uYXZCYWNrKHRoaXMuc3dhcCk7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gc3RlcHNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZCYWNrKHN0ZXBzOiBudW1iZXIpIHtcclxuICAgIGhpc3RvcnkuZ28oc3RlcHMgLSAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXApO1xyXG4gIH1cclxuICB0YWJCYWNrKCkge1xyXG4gICAgdGhpcy5fbmF2QmFjayh0aGlzLnN3YXBUYWIpO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3BhbmVDb21tYW5kPFQgPSBhbnk+KGNvbW1hbmQ6IFBhbmVDb21tYW5kLCBwYW5lOiBQYW5lUmVmPFQ+KSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcclxuICAgICAgY2FzZSAnZm9jdXMnOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKGluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSAnY2xvc2UnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVRhYihpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgIHRoaXMuX2NsZWFyUGVuZGluZygpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJUYWJzKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoREVGQVVMVF9ST1VURSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBhbmQnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRUYWIoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFBhbmUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVjeWNsZSc6IHtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpO1xyXG4gICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCAnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogZXNjYXBlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIGFzeW5jIGNvbGxhcHNlKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCBldnQgPSBuZXcgQ29sbGFwc2VOYXZpZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuX2NsZWFyUGVuZGluZygpO1xyXG4gICAgYXdhaXQgdGhpcy5fY2xlYXJUYWJzKCk7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLl9yZXNpemluZy5uZXh0KCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3Jlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEgJiYgIXRoaXMucGFuZXNbdGhpcy5wYW5lcy5sZW5ndGggLSAxXS5zdHJldGNoYWJsZSkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICBjaGlsZCA9IGVsLmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgIGNoaWxkLnN0eWxlLm1pbldpZHRoID1cclxuICAgICAgICAoZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gZWwucGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IC0gY2hpbGQub2Zmc2V0TGVmdCAtIDIpICsgJ3B4JztcclxuICAgIH1cclxuICAgIHRoaXMudGFicy5jb25jYXQodGhpcy5wYW5lcykuZm9yRWFjaChwID0+IHAuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblJlc2l6ZSh7XHJcbiAgICB9IGFzIGFueSwgcCkpKTtcclxuICB9XHJcbiAgY2xvc2VUYWIocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3Bvc2l0aW9uXTtcclxuICAgIGlmICghdGhpcy5fY2xvc2luZyh0YWIpKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gcG9zaXRpb24gPiAwID8gcG9zaXRpb24gLSAxIDogMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY2xvc2luZyhwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGxldCBldnQgPSBuZXcgTmF2aWdhdGlvbkNsb3NlKHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICByZXR1cm4gIWV2dC5fcHJldmVudERlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICBleHBhbmRQYW5lKCkge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRXhwYW5kKHBhbmUuX2V4cGFuZGVkID0gdHJ1ZSwgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAoZXZ0Ll9wcmV2ZW50RGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXNbaV0gIT09IHBhbmUpIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0aGlzLnBhbmVzW2ldKTtcclxuICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2dldEhpc3RvcnlTdGVwKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IChoaXN0b3J5LnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSkuc3RlcCA6IDA7XHJcbiAgfVxyXG5cclxuICBleHBhbmRUYWIoKSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRXhwYW5kKHRhYi5fZXhwYW5kZWQgPSB0cnVlLCB0YWIpXHJcbiAgICB0YWIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+XHJcbiAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHApXHJcbiAgICApO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSh0aGlzLnNlbGVjdGVkVGFiSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgsIHRhYik7XHJcblxyXG4gICAgdGFiLl9tb2RlID0gJ3BhbmUnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IDAgOiAtMTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IHBvc2l0aW9uKSByZXR1cm47XHJcbiAgICBpZiAocG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGVsc2UgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1twb3NpdGlvbl07XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkZvY3VzKHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fdGl0bGUuc2V0KHBhbmUudGl0bGUpO1xyXG4gIH1cclxuICBhc3luYyByZW1vdmVBdChwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1twb3NpdGlvbl07XHJcblxyXG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nKHBhbmUpKSByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzcyhwYW5lKTtcclxuXHJcbiAgICB0aGlzLl9kaXNjYXJkUGFuZShwYW5lKTtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPj0gdGhpcy5zZWxlY3RlZEluZGV4KVxyXG4gICAgICB0aGlzLnNlbGVjdCgtMSk7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgcGFuZXMgPSB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpICYmIHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKS5cclxuICAgICAgcmV2ZXJzZSgpO1xyXG5cclxuICAgIHBhbmUucm91dGUgJiYgcGFuZS5yb3V0ZS5jYW5EaXNtaXNzICYmXHJcbiAgICAgIHBhbmVzLnB1c2gocGFuZSk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lc1tpXSk7XHJcbiAgICAgIGlmICghb2spIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc2NhcmRQYW5lKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5kZWNlbmRlbnRPZihwYW5lKSkuXHJcbiAgICAgIHJldmVyc2UoKS5cclxuICAgICAgZm9yRWFjaChzID0+IHRoaXMuX2Rpc2NhcmRQYW5lKHMpKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsZWFyUGVuZGluZygpIHtcclxuICAgIHRoaXMuX3BlbmRpbmcuc3BsaWNlKDAsIHRoaXMuX3BlbmRpbmcubGVuZ3RoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJQYW5lcygpIHtcclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3NBbGwodGhpcy5wYW5lcyk7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PiB0aGlzLl9kZXN0cm95UGFuZShwKSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcCA9IG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyVGFicygpIHtcclxuICAgIGlmICghdGhpcy50YWJzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnRhYnMpO1xyXG4gICAgdGhpcy50YWJzLmZvckVhY2godCA9PiB0aGlzLl9kZXN0cm95UGFuZSh0KSk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKDAsIHRoaXMudGFicy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZXNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzQWxsKHBhbmVzOiBQYW5lUmVmW10pIHtcclxuICAgIGZvciAobGV0IHBhbmUgb2YgcGFuZXMuXHJcbiAgICAgIGZpbHRlcihzID0+IHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKSkge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lKTtcclxuICAgICAgaWYgKCFvaylcclxuICAgICAgICB0aHJvdyAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzbWlzc2FibGUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCB7IGluc3RhbmNlLCByb3V0ZTogeyBjYW5EaXNtaXNzIH0gfSA9IHBhbmU7XHJcbiAgICBjb25zdCBkaXNtaXNzYWJsZSA9IHRoaXMuX2luamVjdG9yLmdldChjYW5EaXNtaXNzKSBhcyBDYW5EaXNtaXNzPGFueT47XHJcbiAgICBjb25zdCBvayA9IGRpc21pc3NhYmxlLm9uRGlzbWlzcyhpbnN0YW5jZSk7XHJcbiAgICBpZiAoaXNCb29sZWFuKG9rKSlcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvayk7XHJcbiAgICBlbHNlIGlmIChpc1Byb21pc2Uob2spKVxyXG4gICAgICByZXR1cm4gb2s7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBvay50b1Byb21pc2UoKTtcclxuICB9XHJcbiAgc2Nyb2xsVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaXRlbSAmJiBpdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBpbmxpbmU6ICdlbmQnLCBibG9jazogJ2VuZCcgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBfY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYW5lLWNvbnRlbnQnKTtcclxuICB9XHJcbiAgZG9uZSgpIHtcclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgfVxyXG4gIGVuYWJsZU5hdmlnYXRpb25BcnJvd3MoXz86IEV2ZW50KSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHNjcm9sbExlZnQgPSBNYXRoLnJvdW5kKGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuICAgIHRoaXMubmV4dCA9IHRoaXMuX3J0bCA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIHNjcm9sbExlZnQgPCBjb250YWluZXIuc2Nyb2xsV2lkdGggOlxyXG4gICAgICBzY3JvbGxMZWZ0ICsgY29udGFpbmVyLmNsaWVudFdpZHRoIDwgY29udGFpbmVyLnNjcm9sbFdpZHRoO1xyXG4gICAgdGhpcy5wcmV2ID0gdGhpcy5fcnRsID8gc2Nyb2xsTGVmdCA8IDAgOiBzY3JvbGxMZWZ0ID4gMDtcclxuICB9XHJcbiAgc2Nyb2xsQnkobjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsZWZ0ID0gbiAqICh0aGlzLl9ydGwgPyAtMSA6IDEpO1xyXG4gICAgdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBsZWZ0IH0pO1xyXG4gIH1cclxuICBmb2N1cyhpbmRleCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGVsLmZvY3VzKCk7XHJcbiAgfVxyXG4gIG9uUGFuZVJlc2l6ZShwYW5lOiBQYW5lUmVmPGFueT4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gLTEgOiAxO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQ7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGhcclxuICAgICAgICA9IE1hdGgubWF4KHdpZHRoICsgZGVsdGEsIDM1MCkgKyAncHgnO1xyXG4gICAgICBwYW5lLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25SZXNpemUoe30gYXMgYW55LCBwYW5lKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uVGFiUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3RcclxuICAgICAgbWUgPSB0aGlzLFxyXG4gICAgICAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IDEgOiAtMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1lLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgLy8gcHJldmVudCBuZWdhdGl2ZS1zaXplZCBlbGVtZW50c1xyXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWF4KChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQsIC13aWR0aCk7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGggPSAod2lkdGggKyBkZWx0YSkgKyAncHgnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGFicycsIGVsLnN0eWxlLndpZHRoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVzdHJveVBhbmUocGFuZTogUGFuZVJlZikge1xyXG4gICAgcGFuZS5fZGVzdHJveSgpO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FbmQocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBQQU5FX1BBUkFNU19SRUdFWCA9IC8oOltcXHdcXC1dKykvZztcclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVSb3V0ZXMocm91dGVzOiBQYW5lUm91dGVbXSwgdHJlZVBhdGg/OiBzdHJpbmcpOiBFeHRlbmRlZFJvdXRlW10ge1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgcm91dGUgPSByb3V0ZXNbaV0sIGZ1bGxQYXRoID0gKHRyZWVQYXRoID8gKHRyZWVQYXRoICsgJy8nKSA6ICcnKSArIHJvdXRlLnBhdGg7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihyb3V0ZSwge1xyXG4gICAgICBmdWxsUGF0aCxcclxuICAgICAgcmVnRXg6IG5ldyBSZWdFeHAoJ14nICsgZnVsbFBhdGguXHJcbiAgICAgICAgcmVwbGFjZSgnLycsICdcXFxcLycpLlxyXG4gICAgICAgIHJlcGxhY2UoUEFORV9QQVJBTVNfUkVHRVgsIGUgPT4gYCg/PCR7ZS5zdWJzdHIoMSl9PltcXFxcd0BcXFxcLV0qKWApKVxyXG4gICAgfSk7XHJcbiAgICBpZiAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgbGV0IGNoaWxkcmVuID0gcHJlcGFyZVJvdXRlcyhyb3V0ZS5jaGlsZHJlbiwgZnVsbFBhdGgpO1xyXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oY2hpbGRyZW5bal0sIHtcclxuICAgICAgICAgIHBhcmVudDogcm91dGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJvdXRlcyBhcyBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHRlbmRlZFJvdXRlIGV4dGVuZHMgUGFuZVJvdXRlIHtcclxuICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIHJlZ0V4OiBSZWdFeHA7XHJcbiAgcGFyZW50PzogRXh0ZW5kZWRSb3V0ZTtcclxuICBjaGlsZHJlbj86IEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5pbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcclxuICBiaXpkb2M6IHRydWU7XHJcbiAgc3RlcDogbnVtYmVyO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBncm91cD86IHN0cmluZztcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcbiAgcGFuZXM6IGFueVtdO1xyXG4gIHRhYnM6IGFueVtdO1xyXG4gIHNlbGVjdGVkVGFiSW5kZXg/OiBudW1iZXI7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInBhbmVzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxCeSgtNDAwKVwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDb2xvcl09XCJhY2NlbnRcIlxyXG4gICAgICAgKm5nSWY9XCJwcmV2XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIj5cclxuICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgIDwvaT5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZXMtdGl0bGVcIiBbQHRpdGxlXT1cInRpdGxlQW5pbWF0aW9uXCI+XHJcbiAgICA8aDE+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJiYWNrKClcIiAqbmdJZj1cInN3YXBcIiBbYml6ZG9jVG9vbHRpcF09XCInQmFjayd8dHJhbnNsYXRlXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2NpcmNsZV9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFkY3J1bWJzXCIgKm5nSWY9XCIhZmlyc3RcIj5cXDwvc3Bhbj5cclxuICAgICAgICB7e3AudGl0bGV9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImd1aWRlKHBhbmVzWzBdLmd1aWRlKVwiICpuZ0lmPVwicGFuZXNbMF0/Lmd1aWRlXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0hlbHAnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5oZWxwPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDE+XHJcbiAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxiaXpkb2MtcXVpY2t0b29scz48L2JpemRvYy1xdWlja3Rvb2xzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgI3Bhbm5pbmcgY2xhc3M9XCJwYW5lcy1jb250YWluZXJcIlxyXG4gICAgICAgY2RrU2Nyb2xsYWJsZVxyXG4gICAgICAgQHBhbmVzXHJcbiAgICAgICAoc2Nyb2xsKT1cImVuYWJsZU5hdmlnYXRpb25BcnJvd3MoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8ZGl2IChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXggIT09IGkgJiYgIWRyYWdnaW5nICYmIHNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEluZGV4ID09PSBpXCIgY2xhc3M9XCJwYW5lLWNvbnRlbnRcIiBAcGFuZT5cclxuICAgICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwicC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwicC5pbmplY3RvclwiIChjcmVhdGUpPVwicC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmUtc2VwYXJhdG9yXCIgKm5nSWY9XCJpIDwgcGFuZXMubGVuZ3RoIC0gMVwiIChtb3VzZWRvd24pPVwib25QYW5lUmVzaXplKHAsICRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiICpuZ0lmPVwiZGlhbG9nXCIgKGNsaWNrKT1cImNsb3NlVGFiKHNlbGVjdGVkVGFiSW5kZXgpXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1hcnJvdyBmb3J3YXJkXCJcclxuICAgICAgICpuZ0lmPVwibmV4dFwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCIgbWF0UmlwcGxlIFttYXRSaXBwbGVVbmJvdW5kZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCIgW21hdFJpcHBsZVJhZGl1c109XCIzMFwiIFttYXRSaXBwbGVDb2xvcl09XCJhY2NlbnRcIlxyXG4gICAgICAgKGNsaWNrKT1cInNjcm9sbEJ5KDQwMClcIj5cclxuICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgIDwvaT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJzLmxlbmd0aFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJzLXNlcGFyYXRvclwiIChtb3VzZWRvd24pPVwib25UYWJSZXNpemUoJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoxOCB0YWJzXCIgW0B0YWJzXT1cInRhYnNBbmltYXRpb25cIiAoQHRhYnMuZG9uZSk9XCJkb25lKClcIiAjdGFiaW5nPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyB0YWJzLXRpdGxlXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0YWJCYWNrKClcIiAqbmdJZj1cInN3YXBUYWJcIiBbYml6ZG9jVG9vbHRpcF09XCJwcmV2R3JvdXAgfHwgKCdCYWNrJ3x0cmFuc2xhdGUpXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2JhY2s8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8aDI+e3tncm91cH19PC9oMj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImV4cGFuZFRhYigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0V4cGFuZCd8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBpbmxpbmU9XCJ0cnVlXCIgY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+b3Blbl9pbl9mdWxsPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPCEtLSpuZ0lmPVwic2VsZWN0ZWRUYWJJbmRleCA8PTwgLTEgJiYgdGFic1tzZWxlY3RlZFRhYkluZGV4XS5leHBhbmRhYmxlXCItLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIGJpemRvY1Rvb2x0aXA9XCJFc2NcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmF2IG1hdC10YWItbmF2LWJhciBjb2xvcj1cImFjY2VudFwiIFtkaXNhYmxlUGFnaW5hdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDxhIG1hdC10YWItbGluayAqbmdGb3I9XCJsZXQgdCBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJtYXQtdGFiLWxpbmtcIlxyXG4gICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRUYWJJbmRleCA9IGlcIlxyXG4gICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGlcIj5cclxuICAgICAgICA8bWF0LWljb24gW21hdEJhZGdlXT1cInQuYmFkZ2VcIiBbbWF0QmFkZ2VIaWRkZW5dPVwiIXQuYmFkZ2VcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj57e3QuaWNvbn19PC9tYXQtaWNvbj4mbmJzcDtcclxuICAgICAgICB7e3QudGl0bGV9fVxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInQuZGlzbWlzc2FibGVcIiAoY2xpY2spPVwiY2xvc2VUYWIoaSlcIiBjbGFzcz1cInRvb2xcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPCEtLWlubGluZT1cInRydWVcIi0tPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25hdj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIFtzdHlsZS5kaXNwbGF5XT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGkgPyAnJzogJ25vbmUnXCIgY2xhc3M9XCJ0YWJcIiBbQHRhYl09XCJzZWxlY3RlZFRhYkluZGV4XCI+XHJcbiAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJ0LmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJ0LmluamVjdG9yXCIgKGNyZWF0ZSk9XCJ0Ll9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|