@gravitee/ui-components 3.25.3 → 3.25.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/package.json +10 -7
- package/src/atoms/gv-autocomplete.d.ts +104 -0
- package/src/atoms/gv-autocomplete.js +339 -353
- package/src/atoms/gv-autocomplete.js.map +1 -0
- package/src/atoms/gv-button.d.ts +109 -0
- package/src/atoms/gv-button.js +315 -152
- package/src/atoms/gv-button.js.map +1 -0
- package/src/atoms/gv-checkbox.d.ts +114 -0
- package/src/atoms/gv-checkbox.js +128 -78
- package/src/atoms/gv-checkbox.js.map +1 -0
- package/src/atoms/gv-date-picker-calendar.d.ts +190 -0
- package/src/atoms/gv-date-picker-calendar.js +699 -699
- package/src/atoms/gv-date-picker-calendar.js.map +1 -0
- package/src/atoms/gv-date-picker-cell.d.ts +80 -0
- package/src/atoms/gv-date-picker-cell.js +117 -108
- package/src/atoms/gv-date-picker-cell.js.map +1 -0
- package/src/atoms/gv-date-picker.d.ts +194 -0
- package/src/atoms/gv-date-picker.js +549 -442
- package/src/atoms/gv-date-picker.js.map +1 -0
- package/src/atoms/gv-file-upload.d.ts +64 -0
- package/src/atoms/gv-file-upload.js +288 -196
- package/src/atoms/gv-file-upload.js.map +1 -0
- package/src/atoms/gv-icon.d.ts +26 -0
- package/src/atoms/gv-icon.js +59 -47
- package/src/atoms/gv-icon.js.map +1 -0
- package/src/atoms/gv-image.d.ts +45 -0
- package/src/atoms/gv-image.js +93 -66
- package/src/atoms/gv-image.js.map +1 -0
- package/src/atoms/gv-input-message.d.ts +20 -0
- package/src/atoms/gv-input-message.js +49 -29
- package/src/atoms/gv-input-message.js.map +1 -0
- package/src/atoms/gv-input.d.ts +246 -0
- package/src/atoms/gv-input.js +400 -421
- package/src/atoms/gv-input.js.map +1 -0
- package/src/atoms/gv-link.d.ts +67 -0
- package/src/atoms/gv-link.js +143 -70
- package/src/atoms/gv-link.js.map +1 -0
- package/src/atoms/gv-message.d.ts +23 -0
- package/src/atoms/gv-message.js +98 -41
- package/src/atoms/gv-message.js.map +1 -0
- package/src/atoms/gv-metric.d.ts +32 -0
- package/src/atoms/gv-metric.js +74 -29
- package/src/atoms/gv-metric.js.map +1 -0
- package/src/atoms/gv-relative-time.d.ts +45 -0
- package/src/atoms/gv-relative-time.js +107 -148
- package/src/atoms/gv-relative-time.js.map +1 -0
- package/src/atoms/gv-select-native.d.ts +174 -0
- package/src/atoms/gv-select-native.js +289 -194
- package/src/atoms/gv-select-native.js.map +1 -0
- package/src/atoms/gv-select.d.ts +71 -0
- package/src/atoms/gv-select.js +323 -226
- package/src/atoms/gv-select.js.map +1 -0
- package/src/atoms/gv-spinner.d.ts +10 -0
- package/src/atoms/gv-spinner.js +29 -10
- package/src/atoms/gv-spinner.js.map +1 -0
- package/src/atoms/gv-state.d.ts +50 -0
- package/src/atoms/gv-state.js +76 -39
- package/src/atoms/gv-state.js.map +1 -0
- package/src/atoms/gv-switch.d.ts +60 -0
- package/src/atoms/gv-switch.js +187 -74
- package/src/atoms/gv-switch.js.map +1 -0
- package/src/atoms/gv-tag.d.ts +69 -0
- package/src/atoms/gv-tag.js +92 -45
- package/src/atoms/gv-tag.js.map +1 -0
- package/src/atoms/gv-text.d.ts +110 -0
- package/src/atoms/gv-text.js +105 -51
- package/src/atoms/gv-text.js.map +1 -0
- package/src/charts/gv-chart-bar.d.ts +50 -0
- package/src/charts/gv-chart-bar.js +64 -69
- package/src/charts/gv-chart-bar.js.map +1 -0
- package/src/charts/gv-chart-gauge.d.ts +58 -0
- package/src/charts/gv-chart-gauge.js +58 -62
- package/src/charts/gv-chart-gauge.js.map +1 -0
- package/src/charts/gv-chart-histogram.d.ts +48 -0
- package/src/charts/gv-chart-histogram.js +46 -58
- package/src/charts/gv-chart-histogram.js.map +1 -0
- package/src/charts/gv-chart-line.d.ts +52 -0
- package/src/charts/gv-chart-line.js +173 -189
- package/src/charts/gv-chart-line.js.map +1 -0
- package/src/charts/gv-chart-map.d.ts +50 -0
- package/src/charts/gv-chart-map.js +73 -75
- package/src/charts/gv-chart-map.js.map +1 -0
- package/src/charts/gv-chart-pie.d.ts +50 -0
- package/src/charts/gv-chart-pie.js +52 -57
- package/src/charts/gv-chart-pie.js.map +1 -0
- package/src/index.d.ts +77 -0
- package/src/index.js +1 -1
- package/src/index.js.map +1 -0
- package/src/lib/cron-expression.d.ts +1 -0
- package/src/lib/cron-expression.js +143 -176
- package/src/lib/cron-expression.js.map +1 -0
- package/src/lib/date.d.ts +1 -0
- package/src/lib/date.js +26 -35
- package/src/lib/date.js.map +1 -0
- package/src/lib/events.d.ts +1 -0
- package/src/lib/events.js +10 -11
- package/src/lib/events.js.map +1 -0
- package/src/lib/http-client-schema-form.d.ts +68 -0
- package/src/lib/http-client-schema-form.js +50 -50
- package/src/lib/http-client-schema-form.js.map +1 -0
- package/src/lib/http.d.ts +222 -0
- package/src/lib/http.js +221 -221
- package/src/lib/http.js.map +1 -0
- package/src/lib/i18n.d.ts +30 -0
- package/src/lib/i18n.js +40 -57
- package/src/lib/i18n.js.map +1 -0
- package/src/lib/item.d.ts +12 -0
- package/src/lib/item.js +66 -74
- package/src/lib/item.js.map +1 -0
- package/src/lib/properties.d.ts +42 -0
- package/src/lib/properties.js +110 -162
- package/src/lib/properties.js.map +1 -0
- package/src/lib/schema-form.d.ts +5 -0
- package/src/lib/schema-form.js +13 -16
- package/src/lib/schema-form.js.map +1 -0
- package/src/lib/studio.d.ts +2 -0
- package/src/lib/studio.js +116 -65
- package/src/lib/studio.js.map +1 -0
- package/src/lib/style.d.ts +6 -0
- package/src/lib/style.js +18 -19
- package/src/lib/style.js.map +1 -0
- package/src/lib/text-format.d.ts +6 -0
- package/src/lib/text-format.js +45 -55
- package/src/lib/text-format.js.map +1 -0
- package/src/lib/theme.d.ts +4 -0
- package/src/lib/theme.js +38 -43
- package/src/lib/theme.js.map +1 -0
- package/src/lib/utils.d.ts +9 -0
- package/src/lib/utils.js +72 -75
- package/src/lib/utils.js.map +1 -0
- package/src/mixins/chart-element.d.ts +39 -0
- package/src/mixins/chart-element.js +118 -106
- package/src/mixins/chart-element.js.map +1 -0
- package/src/mixins/input-element.d.ts +64 -0
- package/src/mixins/input-element.js +111 -131
- package/src/mixins/input-element.js.map +1 -0
- package/src/mixins/item-resource.d.ts +56 -0
- package/src/mixins/item-resource.js +76 -95
- package/src/mixins/item-resource.js.map +1 -0
- package/src/mixins/keyboard-element.d.ts +25 -0
- package/src/mixins/keyboard-element.js +44 -51
- package/src/mixins/keyboard-element.js.map +1 -0
- package/src/mixins/update-after-browser.d.ts +11 -0
- package/src/mixins/update-after-browser.js +10 -12
- package/src/mixins/update-after-browser.js.map +1 -0
- package/src/mixins/with-resize-observer.d.ts +12 -0
- package/src/mixins/with-resize-observer.js +46 -61
- package/src/mixins/with-resize-observer.js.map +1 -0
- package/src/mixins/with-skeleton-attribute.d.ts +35 -0
- package/src/mixins/with-skeleton-attribute.js +80 -88
- package/src/mixins/with-skeleton-attribute.js.map +1 -0
- package/src/molecules/gv-card-full.d.ts +78 -0
- package/src/molecules/gv-card-full.js +160 -47
- package/src/molecules/gv-card-full.js.map +1 -0
- package/src/molecules/gv-card-list.d.ts +33 -0
- package/src/molecules/gv-card-list.js +65 -47
- package/src/molecules/gv-card-list.js.map +1 -0
- package/src/molecules/gv-card.d.ts +65 -0
- package/src/molecules/gv-card.js +94 -22
- package/src/molecules/gv-card.js.map +1 -0
- package/src/molecules/gv-category-list.d.ts +17 -0
- package/src/molecules/gv-category-list.js +23 -15
- package/src/molecules/gv-category-list.js.map +1 -0
- package/src/molecules/gv-category.d.ts +64 -0
- package/src/molecules/gv-category.js +117 -43
- package/src/molecules/gv-category.js.map +1 -0
- package/src/molecules/gv-code.d.ts +192 -0
- package/src/molecules/gv-code.js +258 -220
- package/src/molecules/gv-code.js.map +1 -0
- package/src/molecules/gv-confirm.d.ts +60 -0
- package/src/molecules/gv-confirm.js +131 -113
- package/src/molecules/gv-confirm.js.map +1 -0
- package/src/molecules/gv-cron-editor.d.ts +115 -0
- package/src/molecules/gv-cron-editor.js +597 -375
- package/src/molecules/gv-cron-editor.js.map +1 -0
- package/src/molecules/gv-dropdown-menu.d.ts +28 -0
- package/src/molecules/gv-dropdown-menu.js +77 -52
- package/src/molecules/gv-dropdown-menu.js.map +1 -0
- package/src/molecules/gv-expandable.d.ts +37 -0
- package/src/molecules/gv-expandable.js +77 -54
- package/src/molecules/gv-expandable.js.map +1 -0
- package/src/molecules/gv-expression-language.d.ts +150 -0
- package/src/molecules/gv-expression-language.js +212 -256
- package/src/molecules/gv-expression-language.js.map +1 -0
- package/src/molecules/gv-identity-picture.d.ts +44 -0
- package/src/molecules/gv-identity-picture.js +102 -87
- package/src/molecules/gv-identity-picture.js.map +1 -0
- package/src/molecules/gv-list.d.ts +123 -0
- package/src/molecules/gv-list.js +167 -87
- package/src/molecules/gv-list.js.map +1 -0
- package/src/molecules/gv-metrics.d.ts +65 -0
- package/src/molecules/gv-metrics.js +103 -105
- package/src/molecules/gv-metrics.js.map +1 -0
- package/src/molecules/gv-modal.d.ts +64 -0
- package/src/molecules/gv-modal.js +157 -99
- package/src/molecules/gv-modal.js.map +1 -0
- package/src/molecules/gv-nav.d.ts +41 -0
- package/src/molecules/gv-nav.js +134 -123
- package/src/molecules/gv-nav.js.map +1 -0
- package/src/molecules/gv-option.d.ts +65 -0
- package/src/molecules/gv-option.js +177 -115
- package/src/molecules/gv-option.js.map +1 -0
- package/src/molecules/gv-plans.d.ts +73 -0
- package/src/molecules/gv-plans.js +327 -232
- package/src/molecules/gv-plans.js.map +1 -0
- package/src/molecules/gv-popover.d.ts +91 -0
- package/src/molecules/gv-popover.js +265 -172
- package/src/molecules/gv-popover.js.map +1 -0
- package/src/molecules/gv-promote.d.ts +108 -0
- package/src/molecules/gv-promote.js +152 -39
- package/src/molecules/gv-promote.js.map +1 -0
- package/src/molecules/gv-rating-list.d.ts +77 -0
- package/src/molecules/gv-rating-list.js +287 -184
- package/src/molecules/gv-rating-list.js.map +1 -0
- package/src/molecules/gv-rating.d.ts +55 -0
- package/src/molecules/gv-rating.js +187 -152
- package/src/molecules/gv-rating.js.map +1 -0
- package/src/molecules/gv-row-expandable.d.ts +8 -0
- package/src/molecules/gv-row-expandable.js +18 -14
- package/src/molecules/gv-row-expandable.js.map +1 -0
- package/src/molecules/gv-row.d.ts +37 -0
- package/src/molecules/gv-row.js +164 -42
- package/src/molecules/gv-row.js.map +1 -0
- package/src/molecules/gv-stats.d.ts +53 -0
- package/src/molecules/gv-stats.js +70 -55
- package/src/molecules/gv-stats.js.map +1 -0
- package/src/molecules/gv-stepper.d.ts +46 -0
- package/src/molecules/gv-stepper.js +225 -94
- package/src/molecules/gv-stepper.js.map +1 -0
- package/src/molecules/gv-table.d.ts +159 -0
- package/src/molecules/gv-table.js +530 -460
- package/src/molecules/gv-table.js.map +1 -0
- package/src/molecules/gv-tree.d.ts +44 -0
- package/src/molecules/gv-tree.js +189 -77
- package/src/molecules/gv-tree.js.map +1 -0
- package/src/organisms/gv-documentation.d.ts +52 -0
- package/src/organisms/gv-documentation.js +155 -81
- package/src/organisms/gv-documentation.js.map +1 -0
- package/src/organisms/gv-header.d.ts +60 -0
- package/src/organisms/gv-header.js +227 -80
- package/src/organisms/gv-header.js.map +1 -0
- package/src/organisms/gv-http-client.d.ts +57 -0
- package/src/organisms/gv-http-client.js +203 -83
- package/src/organisms/gv-http-client.js.map +1 -0
- package/src/organisms/gv-menu.d.ts +74 -0
- package/src/organisms/gv-menu.js +206 -89
- package/src/organisms/gv-menu.js.map +1 -0
- package/src/organisms/gv-newsletter-subscription.d.ts +82 -0
- package/src/organisms/gv-newsletter-subscription.js +212 -83
- package/src/organisms/gv-newsletter-subscription.js.map +1 -0
- package/src/organisms/gv-pagination.d.ts +63 -0
- package/src/organisms/gv-pagination.js +134 -124
- package/src/organisms/gv-pagination.js.map +1 -0
- package/src/organisms/gv-properties.d.ts +229 -0
- package/src/organisms/gv-properties.js +778 -616
- package/src/organisms/gv-properties.js.map +1 -0
- package/src/organisms/gv-resizable-views.d.ts +33 -0
- package/src/organisms/gv-resizable-views.js +334 -140
- package/src/organisms/gv-resizable-views.js.map +1 -0
- package/src/organisms/gv-resources.d.ts +125 -0
- package/src/organisms/gv-resources.js +434 -365
- package/src/organisms/gv-resources.js.map +1 -0
- package/src/organisms/gv-schema-form-array.d.ts +55 -0
- package/src/organisms/gv-schema-form-array.js +196 -98
- package/src/organisms/gv-schema-form-array.js.map +1 -0
- package/src/organisms/gv-schema-form-control-object.d.ts +64 -0
- package/src/organisms/gv-schema-form-control-object.js +110 -108
- package/src/organisms/gv-schema-form-control-object.js.map +1 -0
- package/src/organisms/gv-schema-form-control.d.ts +90 -0
- package/src/organisms/gv-schema-form-control.js +353 -349
- package/src/organisms/gv-schema-form-control.js.map +1 -0
- package/src/organisms/gv-schema-form.d.ts +156 -0
- package/src/organisms/gv-schema-form.js +611 -556
- package/src/organisms/gv-schema-form.js.map +1 -0
- package/src/organisms/gv-tabs.d.ts +56 -0
- package/src/organisms/gv-tabs.js +149 -125
- package/src/organisms/gv-tabs.js.map +1 -0
- package/src/organisms/gv-user-menu.d.ts +56 -0
- package/src/organisms/gv-user-menu.js +244 -94
- package/src/organisms/gv-user-menu.js.map +1 -0
- package/src/organisms/gv-vertical-menu.d.ts +28 -0
- package/src/organisms/gv-vertical-menu.js +84 -46
- package/src/organisms/gv-vertical-menu.js.map +1 -0
- package/src/policy-studio/gv-flow-step.d.ts +142 -0
- package/src/policy-studio/gv-flow-step.js +390 -250
- package/src/policy-studio/gv-flow-step.js.map +1 -0
- package/src/policy-studio/gv-flow.d.ts +89 -0
- package/src/policy-studio/gv-flow.js +512 -358
- package/src/policy-studio/gv-flow.js.map +1 -0
- package/src/policy-studio/gv-policy-studio-menu.d.ts +94 -0
- package/src/policy-studio/gv-policy-studio-menu.js +657 -403
- package/src/policy-studio/gv-policy-studio-menu.js.map +1 -0
- package/src/policy-studio/gv-policy-studio.d.ts +464 -0
- package/src/policy-studio/gv-policy-studio.js +1531 -1599
- package/src/policy-studio/gv-policy-studio.js.map +1 -0
- package/src/styles/empty.d.ts +1 -0
- package/src/styles/empty.js +21 -4
- package/src/styles/empty.js.map +1 -0
- package/src/styles/input.d.ts +1 -0
- package/src/styles/input.js +247 -3
- package/src/styles/input.js.map +1 -0
- package/src/styles/link.d.ts +1 -0
- package/src/styles/link.js +16 -3
- package/src/styles/link.js.map +1 -0
- package/src/styles/shapes.d.ts +2 -0
- package/src/styles/shapes.js +1 -1
- package/src/styles/shapes.js.map +1 -0
- package/src/styles/skeleton.d.ts +1 -0
- package/src/styles/skeleton.js +37 -3
- package/src/styles/skeleton.js.map +1 -0
- package/src/styles/zoom.d.ts +1 -0
- package/src/styles/zoom.js +24 -3
- package/src/styles/zoom.js.map +1 -0
- package/src/theme/gv-theme.d.ts +81 -0
- package/src/theme/gv-theme.js +115 -81
- package/src/theme/gv-theme.js.map +1 -0
- package/wc/gv-autocomplete.d.ts +1 -0
- package/wc/gv-autocomplete.js +2 -1
- package/wc/gv-autocomplete.js.map +1 -0
- package/wc/gv-button.d.ts +1 -0
- package/wc/gv-button.js +2 -1
- package/wc/gv-button.js.map +1 -0
- package/wc/gv-card-full.d.ts +1 -0
- package/wc/gv-card-full.js +2 -1
- package/wc/gv-card-full.js.map +1 -0
- package/wc/gv-card-list.d.ts +1 -0
- package/wc/gv-card-list.js +2 -1
- package/wc/gv-card-list.js.map +1 -0
- package/wc/gv-card.d.ts +1 -0
- package/wc/gv-card.js +2 -1
- package/wc/gv-card.js.map +1 -0
- package/wc/gv-category-list.d.ts +1 -0
- package/wc/gv-category-list.js +2 -1
- package/wc/gv-category-list.js.map +1 -0
- package/wc/gv-category.d.ts +1 -0
- package/wc/gv-category.js +2 -1
- package/wc/gv-category.js.map +1 -0
- package/wc/gv-chart-bar.d.ts +1 -0
- package/wc/gv-chart-bar.js +2 -1
- package/wc/gv-chart-bar.js.map +1 -0
- package/wc/gv-chart-gauge.d.ts +1 -0
- package/wc/gv-chart-gauge.js +2 -1
- package/wc/gv-chart-gauge.js.map +1 -0
- package/wc/gv-chart-histogram.d.ts +1 -0
- package/wc/gv-chart-histogram.js +2 -1
- package/wc/gv-chart-histogram.js.map +1 -0
- package/wc/gv-chart-line.d.ts +1 -0
- package/wc/gv-chart-line.js +2 -1
- package/wc/gv-chart-line.js.map +1 -0
- package/wc/gv-chart-map.d.ts +1 -0
- package/wc/gv-chart-map.js +2 -1
- package/wc/gv-chart-map.js.map +1 -0
- package/wc/gv-chart-pie.d.ts +1 -0
- package/wc/gv-chart-pie.js +2 -1
- package/wc/gv-chart-pie.js.map +1 -0
- package/wc/gv-checkbox.d.ts +1 -0
- package/wc/gv-checkbox.js +2 -1
- package/wc/gv-checkbox.js.map +1 -0
- package/wc/gv-code.d.ts +1 -0
- package/wc/gv-code.js +2 -1
- package/wc/gv-code.js.map +1 -0
- package/wc/gv-confirm.d.ts +1 -0
- package/wc/gv-confirm.js +2 -1
- package/wc/gv-confirm.js.map +1 -0
- package/wc/gv-cron-editor.d.ts +1 -0
- package/wc/gv-cron-editor.js +2 -1
- package/wc/gv-cron-editor.js.map +1 -0
- package/wc/gv-date-picker-calendar.d.ts +1 -0
- package/wc/gv-date-picker-calendar.js +2 -1
- package/wc/gv-date-picker-calendar.js.map +1 -0
- package/wc/gv-date-picker-cell.d.ts +1 -0
- package/wc/gv-date-picker-cell.js +2 -1
- package/wc/gv-date-picker-cell.js.map +1 -0
- package/wc/gv-date-picker.d.ts +1 -0
- package/wc/gv-date-picker.js +2 -1
- package/wc/gv-date-picker.js.map +1 -0
- package/wc/gv-documentation.d.ts +1 -0
- package/wc/gv-documentation.js +2 -1
- package/wc/gv-documentation.js.map +1 -0
- package/wc/gv-dropdown-menu.d.ts +1 -0
- package/wc/gv-dropdown-menu.js +2 -1
- package/wc/gv-dropdown-menu.js.map +1 -0
- package/wc/gv-expandable.d.ts +1 -0
- package/wc/gv-expandable.js +2 -1
- package/wc/gv-expandable.js.map +1 -0
- package/wc/gv-expression-language.d.ts +1 -0
- package/wc/gv-expression-language.js +2 -1
- package/wc/gv-expression-language.js.map +1 -0
- package/wc/gv-file-upload.d.ts +1 -0
- package/wc/gv-file-upload.js +2 -1
- package/wc/gv-file-upload.js.map +1 -0
- package/wc/gv-flow-step.d.ts +1 -0
- package/wc/gv-flow-step.js +2 -1
- package/wc/gv-flow-step.js.map +1 -0
- package/wc/gv-flow.d.ts +1 -0
- package/wc/gv-flow.js +2 -1
- package/wc/gv-flow.js.map +1 -0
- package/wc/gv-header.d.ts +1 -0
- package/wc/gv-header.js +2 -1
- package/wc/gv-header.js.map +1 -0
- package/wc/gv-http-client.d.ts +1 -0
- package/wc/gv-http-client.js +2 -1
- package/wc/gv-http-client.js.map +1 -0
- package/wc/gv-icon.d.ts +1 -0
- package/wc/gv-icon.js +2 -1
- package/wc/gv-icon.js.map +1 -0
- package/wc/gv-identity-picture.d.ts +1 -0
- package/wc/gv-identity-picture.js +2 -1
- package/wc/gv-identity-picture.js.map +1 -0
- package/wc/gv-image.d.ts +1 -0
- package/wc/gv-image.js +2 -1
- package/wc/gv-image.js.map +1 -0
- package/wc/gv-input-message.d.ts +1 -0
- package/wc/gv-input-message.js +2 -1
- package/wc/gv-input-message.js.map +1 -0
- package/wc/gv-input.d.ts +1 -0
- package/wc/gv-input.js +2 -1
- package/wc/gv-input.js.map +1 -0
- package/wc/gv-link.d.ts +1 -0
- package/wc/gv-link.js +2 -1
- package/wc/gv-link.js.map +1 -0
- package/wc/gv-list.d.ts +1 -0
- package/wc/gv-list.js +2 -1
- package/wc/gv-list.js.map +1 -0
- package/wc/gv-menu.d.ts +1 -0
- package/wc/gv-menu.js +2 -1
- package/wc/gv-menu.js.map +1 -0
- package/wc/gv-message.d.ts +1 -0
- package/wc/gv-message.js +2 -1
- package/wc/gv-message.js.map +1 -0
- package/wc/gv-metric.d.ts +1 -0
- package/wc/gv-metric.js +2 -1
- package/wc/gv-metric.js.map +1 -0
- package/wc/gv-metrics.d.ts +1 -0
- package/wc/gv-metrics.js +2 -1
- package/wc/gv-metrics.js.map +1 -0
- package/wc/gv-modal.d.ts +1 -0
- package/wc/gv-modal.js +2 -1
- package/wc/gv-modal.js.map +1 -0
- package/wc/gv-nav.d.ts +1 -0
- package/wc/gv-nav.js +2 -1
- package/wc/gv-nav.js.map +1 -0
- package/wc/gv-newsletter-subscription.d.ts +1 -0
- package/wc/gv-newsletter-subscription.js +2 -1
- package/wc/gv-newsletter-subscription.js.map +1 -0
- package/wc/gv-option.d.ts +1 -0
- package/wc/gv-option.js +2 -1
- package/wc/gv-option.js.map +1 -0
- package/wc/gv-pagination.d.ts +1 -0
- package/wc/gv-pagination.js +2 -1
- package/wc/gv-pagination.js.map +1 -0
- package/wc/gv-plans.d.ts +1 -0
- package/wc/gv-plans.js +2 -1
- package/wc/gv-plans.js.map +1 -0
- package/wc/gv-policy-studio-menu.d.ts +1 -0
- package/wc/gv-policy-studio-menu.js +2 -1
- package/wc/gv-policy-studio-menu.js.map +1 -0
- package/wc/gv-policy-studio.d.ts +1 -0
- package/wc/gv-policy-studio.js +2 -1
- package/wc/gv-policy-studio.js.map +1 -0
- package/wc/gv-popover.d.ts +1 -0
- package/wc/gv-popover.js +2 -1
- package/wc/gv-popover.js.map +1 -0
- package/wc/gv-promote.d.ts +1 -0
- package/wc/gv-promote.js +2 -1
- package/wc/gv-promote.js.map +1 -0
- package/wc/gv-properties.d.ts +1 -0
- package/wc/gv-properties.js +2 -1
- package/wc/gv-properties.js.map +1 -0
- package/wc/gv-rating-list.d.ts +1 -0
- package/wc/gv-rating-list.js +2 -1
- package/wc/gv-rating-list.js.map +1 -0
- package/wc/gv-rating.d.ts +1 -0
- package/wc/gv-rating.js +2 -1
- package/wc/gv-rating.js.map +1 -0
- package/wc/gv-relative-time.d.ts +1 -0
- package/wc/gv-relative-time.js +2 -1
- package/wc/gv-relative-time.js.map +1 -0
- package/wc/gv-resizable-views.d.ts +1 -0
- package/wc/gv-resizable-views.js +2 -1
- package/wc/gv-resizable-views.js.map +1 -0
- package/wc/gv-resources.d.ts +1 -0
- package/wc/gv-resources.js +2 -1
- package/wc/gv-resources.js.map +1 -0
- package/wc/gv-row-expandable.d.ts +1 -0
- package/wc/gv-row-expandable.js +2 -1
- package/wc/gv-row-expandable.js.map +1 -0
- package/wc/gv-row.d.ts +1 -0
- package/wc/gv-row.js +2 -1
- package/wc/gv-row.js.map +1 -0
- package/wc/gv-schema-form-array.d.ts +1 -0
- package/wc/gv-schema-form-array.js +2 -1
- package/wc/gv-schema-form-array.js.map +1 -0
- package/wc/gv-schema-form-control-object.d.ts +1 -0
- package/wc/gv-schema-form-control-object.js +2 -1
- package/wc/gv-schema-form-control-object.js.map +1 -0
- package/wc/gv-schema-form-control.d.ts +1 -0
- package/wc/gv-schema-form-control.js +2 -1
- package/wc/gv-schema-form-control.js.map +1 -0
- package/wc/gv-schema-form.d.ts +1 -0
- package/wc/gv-schema-form.js +2 -1
- package/wc/gv-schema-form.js.map +1 -0
- package/wc/gv-select-native.d.ts +1 -0
- package/wc/gv-select-native.js +2 -1
- package/wc/gv-select-native.js.map +1 -0
- package/wc/gv-select.d.ts +1 -0
- package/wc/gv-select.js +2 -1
- package/wc/gv-select.js.map +1 -0
- package/wc/gv-spinner.d.ts +1 -0
- package/wc/gv-spinner.js +2 -1
- package/wc/gv-spinner.js.map +1 -0
- package/wc/gv-state.d.ts +1 -0
- package/wc/gv-state.js +2 -1
- package/wc/gv-state.js.map +1 -0
- package/wc/gv-stats.d.ts +1 -0
- package/wc/gv-stats.js +2 -1
- package/wc/gv-stats.js.map +1 -0
- package/wc/gv-stepper.d.ts +1 -0
- package/wc/gv-stepper.js +2 -1
- package/wc/gv-stepper.js.map +1 -0
- package/wc/gv-switch.d.ts +1 -0
- package/wc/gv-switch.js +2 -1
- package/wc/gv-switch.js.map +1 -0
- package/wc/gv-table.d.ts +1 -0
- package/wc/gv-table.js +2 -1
- package/wc/gv-table.js.map +1 -0
- package/wc/gv-tabs.d.ts +1 -0
- package/wc/gv-tabs.js +2 -1
- package/wc/gv-tabs.js.map +1 -0
- package/wc/gv-tag.d.ts +1 -0
- package/wc/gv-tag.js +2 -1
- package/wc/gv-tag.js.map +1 -0
- package/wc/gv-text.d.ts +1 -0
- package/wc/gv-text.js +2 -1
- package/wc/gv-text.js.map +1 -0
- package/wc/gv-theme.d.ts +1 -0
- package/wc/gv-theme.js +2 -1
- package/wc/gv-theme.js.map +1 -0
- package/wc/gv-tree.d.ts +1 -0
- package/wc/gv-tree.js +2 -1
- package/wc/gv-tree.js.map +1 -0
- package/wc/gv-user-menu.d.ts +1 -0
- package/wc/gv-user-menu.js +2 -1
- package/wc/gv-user-menu.js.map +1 -0
- package/wc/gv-vertical-menu.d.ts +1 -0
- package/wc/gv-vertical-menu.js +2 -1
- package/wc/gv-vertical-menu.js.map +1 -0
|
@@ -44,656 +44,818 @@ import { empty } from '../styles/empty';
|
|
|
44
44
|
*
|
|
45
45
|
* @cssprop {Length} [--gv-properties-table--colmg=0.2rem] - Table cells margin
|
|
46
46
|
*/
|
|
47
|
-
|
|
48
47
|
export class GvProperties extends KeyboardElement(LitElement) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
},
|
|
93
|
-
_providerDocumentation: {
|
|
94
|
-
type: Boolean,
|
|
95
|
-
attribute: false
|
|
96
|
-
},
|
|
97
|
-
_showDocumentation: {
|
|
98
|
-
type: Boolean,
|
|
99
|
-
attribute: false
|
|
100
|
-
},
|
|
101
|
-
_textRows: {
|
|
102
|
-
type: Number,
|
|
103
|
-
attribute: false
|
|
104
|
-
},
|
|
105
|
-
readonly: {
|
|
106
|
-
type: Boolean,
|
|
107
|
-
reflect: true
|
|
108
|
-
},
|
|
109
|
-
encryptable: {
|
|
110
|
-
type: Boolean,
|
|
111
|
-
reflect: true
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
constructor() {
|
|
117
|
-
super();
|
|
118
|
-
this.properties = [];
|
|
119
|
-
this.types = [];
|
|
120
|
-
this.provider = {};
|
|
121
|
-
this._currentResource = null;
|
|
122
|
-
this._formattedErrors = [];
|
|
123
|
-
this._showDocumentation = true;
|
|
124
|
-
this._newItem = {
|
|
125
|
-
key: '',
|
|
126
|
-
value: '',
|
|
127
|
-
_new: true
|
|
128
|
-
};
|
|
129
|
-
this._pageSize = 10;
|
|
130
|
-
this._textRows = 10;
|
|
131
|
-
this._pageSizes = [5, 10, 25, 50, 100];
|
|
132
|
-
this._errors = [];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
onKeyboard() {
|
|
136
|
-
if (this.isPressed(KEYS.Esc)) {
|
|
137
|
-
this._onClosePropertySchemaForm();
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (this.isPressed(KEYS.Shift, KEYS.Ctrl, KEYS.Space)) {
|
|
141
|
-
const search = this.shadowRoot.querySelector('#search-property');
|
|
142
|
-
|
|
143
|
-
if (search) {
|
|
144
|
-
search.focus();
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
set properties(properties) {
|
|
150
|
-
this._properties = properties.sort((a, b) => a.key.localeCompare(b.key)).map(property => {
|
|
151
|
-
if (property.encrypted) {
|
|
152
|
-
property.encryptable = true;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return property;
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
get properties() {
|
|
160
|
-
return this._properties;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
_getResizableViews() {
|
|
164
|
-
return this.shadowRoot.querySelector('gv-resizable-views');
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
_maximizeTopView() {
|
|
168
|
-
const views = this._getResizableViews();
|
|
169
|
-
|
|
170
|
-
if (views) {
|
|
171
|
-
views.maximizeTop(95, 5);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
_maximizeBottomView() {
|
|
176
|
-
const views = this._getResizableViews();
|
|
177
|
-
|
|
178
|
-
if (views) {
|
|
179
|
-
views.resize(30, 70);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
_splitMainViews() {
|
|
184
|
-
const views = this._getResizableViews();
|
|
185
|
-
|
|
186
|
-
if (views) {
|
|
187
|
-
views.split();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
_isNewLineTable(line) {
|
|
192
|
-
return line._new === true;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
_onInputNew(name, event) {
|
|
196
|
-
const target = event.target;
|
|
197
|
-
this._newItem[name] = event.detail;
|
|
198
|
-
const {
|
|
199
|
-
errors
|
|
200
|
-
} = parseRaw(toNameEqualsValueString([...this.properties, this._newItem]));
|
|
201
|
-
this._errors = errors;
|
|
202
|
-
setTimeout(() => {
|
|
203
|
-
const btn = this.shadowRoot.querySelector('gv-button#add-property');
|
|
204
|
-
|
|
205
|
-
if (errors.length > 0 || this._disabledNewLine(this._newItem)) {
|
|
206
|
-
btn.setAttribute('disabled', true);
|
|
207
|
-
} else {
|
|
208
|
-
btn.removeAttribute('disabled');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
if (name === 'key') {
|
|
212
|
-
if (errors.length === 0) {
|
|
213
|
-
target.removeAttribute('invalid');
|
|
214
|
-
target.setAttribute('valid', true);
|
|
215
|
-
} else {
|
|
216
|
-
target.removeAttribute('valid');
|
|
217
|
-
target.setAttribute('invalid', true);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}, 0);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
_onInput() {
|
|
224
|
-
dispatchCustomEvent(this, 'change', {
|
|
225
|
-
properties: this.properties
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
_onSwitchEncrypted(item) {
|
|
230
|
-
if (item.encrypted === true) {
|
|
231
|
-
item.value = '';
|
|
232
|
-
item.encrypted = false;
|
|
233
|
-
item.encryptionWarning = i18n('gv-properties.infos.overwrite-encryption');
|
|
234
|
-
this.requestUpdate();
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
dispatchCustomEvent(this, 'switch-encrypted', {
|
|
238
|
-
properties: this.properties
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
_addProperty(item) {
|
|
243
|
-
delete item._new;
|
|
244
|
-
this.properties = [item, ...this._properties];
|
|
245
|
-
this._newItem = {
|
|
246
|
-
key: '',
|
|
247
|
-
value: '',
|
|
248
|
-
_new: true,
|
|
249
|
-
encryptable: false,
|
|
250
|
-
encrypted: false
|
|
251
|
-
};
|
|
252
|
-
dispatchCustomEvent(this, 'change', {
|
|
253
|
-
properties: this.properties
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
_removeProperty(item) {
|
|
258
|
-
this._properties = this._properties.filter(property => property.key !== item.key);
|
|
259
|
-
dispatchCustomEvent(this, 'change', {
|
|
260
|
-
properties: this.properties
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
_disabledNewLine(item) {
|
|
265
|
-
return item.key == null || item.value == null || item.key.trim() === '' || item.value.trim() === '';
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
_submitExpertMode() {
|
|
269
|
-
if (this.expert) {
|
|
270
|
-
this.properties = this._handleExpertModeInput(this.shadowRoot.querySelector('#expert-input').value);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
_onExpertModeTextInput({
|
|
275
|
-
detail
|
|
276
|
-
}) {
|
|
277
|
-
this._handleExpertModeInput(detail);
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
_handleExpertModeInput(expertModeInputString) {
|
|
281
|
-
let allProperties = this._properties;
|
|
282
|
-
const providerEnabled = this.provider && this.provider.enabled;
|
|
283
|
-
const dynamicProperties = allProperties.filter(prop => providerEnabled && prop.dynamic);
|
|
284
|
-
const encryptedProperties = allProperties.filter(prop => prop.encrypted);
|
|
285
|
-
const allPropertiesString = `${expertModeInputString}\n${toNameEqualsValueString(dynamicProperties)}\n${toNameEqualsValueString(encryptedProperties)}`;
|
|
286
|
-
const {
|
|
287
|
-
errors
|
|
288
|
-
} = parseRaw(allPropertiesString);
|
|
289
|
-
this._errors = errors;
|
|
290
|
-
|
|
291
|
-
if (errors.length === 0) {
|
|
292
|
-
const {
|
|
293
|
-
variables
|
|
294
|
-
} = parseRaw(expertModeInputString);
|
|
295
|
-
allProperties = [...variables, ...dynamicProperties, ...encryptedProperties];
|
|
296
|
-
dispatchCustomEvent(this, 'change', {
|
|
297
|
-
properties: allProperties
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
return allProperties;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
_onSubmitPropertyForm({
|
|
305
|
-
detail
|
|
306
|
-
}) {
|
|
307
|
-
const provider = detail.values;
|
|
308
|
-
dispatchCustomEvent(this, 'save-provider', {
|
|
309
|
-
provider
|
|
310
|
-
});
|
|
311
|
-
this.requestUpdate();
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
submit() {
|
|
315
|
-
if (this.expert) {
|
|
316
|
-
this._submitExpertMode();
|
|
317
|
-
} else {
|
|
318
|
-
this._onSubmit();
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
_onSubmit() {
|
|
323
|
-
const invalidControls = [...this.shadowRoot.querySelectorAll('form .control')].find(control => control.invalid);
|
|
324
|
-
|
|
325
|
-
if (invalidControls == null) {
|
|
326
|
-
this._addProperty(this._newItem);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
_onConfigureDynamicProperties() {
|
|
331
|
-
if (this.dynamicPropertySchema == null) {
|
|
332
|
-
// dynamicPropertySchema has been introduced to ensure backward compatibility with old versions. If no schema is provided a default schema will be used.
|
|
333
|
-
const providersTitleMap = this.providers.reduce((map, provider) => {
|
|
334
|
-
map[provider.id] = provider.key;
|
|
335
|
-
return map;
|
|
336
|
-
}, {});
|
|
337
|
-
const providersEnum = Object.keys(providersTitleMap);
|
|
338
|
-
this.dynamicPropertySchema = {
|
|
339
|
-
properties: {
|
|
340
|
-
enabled: {
|
|
341
|
-
type: 'boolean',
|
|
342
|
-
title: 'Enabled',
|
|
343
|
-
description: ' This service is requiring an API deployment. Do not forget to deploy API to start dynamic-properties service.'
|
|
344
|
-
},
|
|
345
|
-
schedule: {
|
|
346
|
-
type: 'string',
|
|
347
|
-
title: 'Schedule',
|
|
348
|
-
'x-schema-form': {
|
|
349
|
-
'cron-expression': true
|
|
48
|
+
static get properties() {
|
|
49
|
+
return {
|
|
50
|
+
dynamicPropertySchema: { type: Object },
|
|
51
|
+
properties: { type: Array },
|
|
52
|
+
_properties: { type: Array, attribute: false },
|
|
53
|
+
provider: { type: Object },
|
|
54
|
+
providers: { type: Array },
|
|
55
|
+
_propertySchemaForm: { type: Object, attribute: false },
|
|
56
|
+
expert: { type: Boolean },
|
|
57
|
+
_formattedErrors: { type: Array, attributes: false },
|
|
58
|
+
_filter: { type: String },
|
|
59
|
+
_paginationData: { type: Object, attribute: false },
|
|
60
|
+
_pageSize: { type: Number, attribute: false },
|
|
61
|
+
_newItem: { type: Object, attribute: false },
|
|
62
|
+
_providerDocumentation: { type: Boolean, attribute: false },
|
|
63
|
+
_showDocumentation: { type: Boolean, attribute: false },
|
|
64
|
+
_textRows: { type: Number, attribute: false },
|
|
65
|
+
readonly: { type: Boolean, reflect: true },
|
|
66
|
+
encryptable: { type: Boolean, reflect: true },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
constructor() {
|
|
70
|
+
super();
|
|
71
|
+
this.properties = [];
|
|
72
|
+
this.types = [];
|
|
73
|
+
this.provider = {};
|
|
74
|
+
this._currentResource = null;
|
|
75
|
+
this._formattedErrors = [];
|
|
76
|
+
this._showDocumentation = true;
|
|
77
|
+
this._newItem = { key: '', value: '', _new: true };
|
|
78
|
+
this._pageSize = 10;
|
|
79
|
+
this._textRows = 10;
|
|
80
|
+
this._pageSizes = [5, 10, 25, 50, 100];
|
|
81
|
+
this._errors = [];
|
|
82
|
+
}
|
|
83
|
+
onKeyboard() {
|
|
84
|
+
if (this.isPressed(KEYS.Esc)) {
|
|
85
|
+
this._onClosePropertySchemaForm();
|
|
86
|
+
}
|
|
87
|
+
if (this.isPressed(KEYS.Shift, KEYS.Ctrl, KEYS.Space)) {
|
|
88
|
+
const search = this.shadowRoot.querySelector('#search-property');
|
|
89
|
+
if (search) {
|
|
90
|
+
search.focus();
|
|
350
91
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
set properties(properties) {
|
|
95
|
+
this._properties = properties
|
|
96
|
+
.sort((a, b) => a.key.localeCompare(b.key))
|
|
97
|
+
.map((property) => {
|
|
98
|
+
if (property.encrypted) {
|
|
99
|
+
property.encryptable = true;
|
|
359
100
|
}
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
101
|
+
return property;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
get properties() {
|
|
105
|
+
return this._properties;
|
|
106
|
+
}
|
|
107
|
+
_getResizableViews() {
|
|
108
|
+
return this.shadowRoot.querySelector('gv-resizable-views');
|
|
109
|
+
}
|
|
110
|
+
_maximizeTopView() {
|
|
111
|
+
const views = this._getResizableViews();
|
|
112
|
+
if (views) {
|
|
113
|
+
views.maximizeTop(95, 5);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
_maximizeBottomView() {
|
|
117
|
+
const views = this._getResizableViews();
|
|
118
|
+
if (views) {
|
|
119
|
+
views.resize(30, 70);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
_splitMainViews() {
|
|
123
|
+
const views = this._getResizableViews();
|
|
124
|
+
if (views) {
|
|
125
|
+
views.split();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
_isNewLineTable(line) {
|
|
129
|
+
return line._new === true;
|
|
130
|
+
}
|
|
131
|
+
_onInputNew(name, event) {
|
|
132
|
+
const target = event.target;
|
|
133
|
+
this._newItem[name] = event.detail;
|
|
134
|
+
const { errors } = parseRaw(toNameEqualsValueString([...this.properties, this._newItem]));
|
|
135
|
+
this._errors = errors;
|
|
136
|
+
setTimeout(() => {
|
|
137
|
+
const btn = this.shadowRoot.querySelector('gv-button#add-property');
|
|
138
|
+
if (errors.length > 0 || this._disabledNewLine(this._newItem)) {
|
|
139
|
+
btn.setAttribute('disabled', true);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
btn.removeAttribute('disabled');
|
|
143
|
+
}
|
|
144
|
+
if (name === 'key') {
|
|
145
|
+
if (errors.length === 0) {
|
|
146
|
+
target.removeAttribute('invalid');
|
|
147
|
+
target.setAttribute('valid', true);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
target.removeAttribute('valid');
|
|
151
|
+
target.setAttribute('invalid', true);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}, 0);
|
|
155
|
+
}
|
|
156
|
+
_onInput() {
|
|
157
|
+
dispatchCustomEvent(this, 'change', { properties: this.properties });
|
|
158
|
+
}
|
|
159
|
+
_onSwitchEncrypted(item) {
|
|
160
|
+
if (item.encrypted === true) {
|
|
161
|
+
item.value = '';
|
|
162
|
+
item.encrypted = false;
|
|
163
|
+
item.encryptionWarning = i18n('gv-properties.infos.overwrite-encryption');
|
|
164
|
+
this.requestUpdate();
|
|
165
|
+
}
|
|
166
|
+
dispatchCustomEvent(this, 'switch-encrypted', { properties: this.properties });
|
|
167
|
+
}
|
|
168
|
+
_addProperty(item) {
|
|
169
|
+
delete item._new;
|
|
170
|
+
this.properties = [item, ...this._properties];
|
|
171
|
+
this._newItem = { key: '', value: '', _new: true, encryptable: false, encrypted: false };
|
|
172
|
+
dispatchCustomEvent(this, 'change', { properties: this.properties });
|
|
173
|
+
}
|
|
174
|
+
_removeProperty(item) {
|
|
175
|
+
this._properties = this._properties.filter((property) => property.key !== item.key);
|
|
176
|
+
dispatchCustomEvent(this, 'change', { properties: this.properties });
|
|
177
|
+
}
|
|
178
|
+
_disabledNewLine(item) {
|
|
179
|
+
return item.key == null || item.value == null || item.key.trim() === '' || item.value.trim() === '';
|
|
180
|
+
}
|
|
181
|
+
_submitExpertMode() {
|
|
182
|
+
if (this.expert) {
|
|
183
|
+
this.properties = this._handleExpertModeInput(this.shadowRoot.querySelector('#expert-input').value);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
_onExpertModeTextInput({ detail }) {
|
|
187
|
+
this._handleExpertModeInput(detail);
|
|
188
|
+
}
|
|
189
|
+
_handleExpertModeInput(expertModeInputString) {
|
|
190
|
+
let allProperties = this._properties;
|
|
191
|
+
const providerEnabled = this.provider && this.provider.enabled;
|
|
192
|
+
const dynamicProperties = allProperties.filter((prop) => providerEnabled && prop.dynamic);
|
|
193
|
+
const encryptedProperties = allProperties.filter((prop) => prop.encrypted);
|
|
194
|
+
const allPropertiesString = `${expertModeInputString}\n${toNameEqualsValueString(dynamicProperties)}\n${toNameEqualsValueString(encryptedProperties)}`;
|
|
195
|
+
const { errors } = parseRaw(allPropertiesString);
|
|
196
|
+
this._errors = errors;
|
|
197
|
+
if (errors.length === 0) {
|
|
198
|
+
const { variables } = parseRaw(expertModeInputString);
|
|
199
|
+
allProperties = [...variables, ...dynamicProperties, ...encryptedProperties];
|
|
200
|
+
dispatchCustomEvent(this, 'change', { properties: allProperties });
|
|
201
|
+
}
|
|
202
|
+
return allProperties;
|
|
203
|
+
}
|
|
204
|
+
_onSubmitPropertyForm({ detail }) {
|
|
205
|
+
const provider = detail.values;
|
|
206
|
+
dispatchCustomEvent(this, 'save-provider', { provider });
|
|
207
|
+
this.requestUpdate();
|
|
208
|
+
}
|
|
209
|
+
submit() {
|
|
210
|
+
if (this.expert) {
|
|
211
|
+
this._submitExpertMode();
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this._onSubmit();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
_onSubmit() {
|
|
218
|
+
const invalidControls = [...this.shadowRoot.querySelectorAll('form .control')].find((control) => control.invalid);
|
|
219
|
+
if (invalidControls == null) {
|
|
220
|
+
this._addProperty(this._newItem);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
_onConfigureDynamicProperties() {
|
|
224
|
+
if (this.dynamicPropertySchema == null) {
|
|
225
|
+
// dynamicPropertySchema has been introduced to ensure backward compatibility with old versions. If no schema is provided a default schema will be used.
|
|
226
|
+
const providersTitleMap = this.providers.reduce((map, provider) => {
|
|
227
|
+
map[provider.id] = provider.key;
|
|
228
|
+
return map;
|
|
229
|
+
}, {});
|
|
230
|
+
const providersEnum = Object.keys(providersTitleMap);
|
|
231
|
+
this.dynamicPropertySchema = {
|
|
232
|
+
properties: {
|
|
233
|
+
enabled: {
|
|
234
|
+
type: 'boolean',
|
|
235
|
+
title: 'Enabled',
|
|
236
|
+
description: ' This service is requiring an API deployment. Do not forget to deploy API to start dynamic-properties service.',
|
|
237
|
+
},
|
|
238
|
+
schedule: {
|
|
239
|
+
type: 'string',
|
|
240
|
+
title: 'Schedule',
|
|
241
|
+
'x-schema-form': {
|
|
242
|
+
'cron-expression': true,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
provider: {
|
|
246
|
+
type: 'string',
|
|
247
|
+
title: 'Provider type',
|
|
248
|
+
enum: providersEnum,
|
|
249
|
+
default: providersEnum[0],
|
|
250
|
+
'x-schema-form': {
|
|
251
|
+
titleMap: providersTitleMap,
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
required: ['schedule', 'provider'],
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const defaultProvider = this.providers[0];
|
|
259
|
+
this._propertySchemaForm = {
|
|
260
|
+
properties: { ...this.dynamicPropertySchema.properties, configuration: defaultProvider.schema },
|
|
261
|
+
required: this.dynamicPropertySchema.required,
|
|
414
262
|
};
|
|
415
|
-
|
|
263
|
+
this._providerDocumentation = defaultProvider.documentation;
|
|
264
|
+
this._maximizeBottomView();
|
|
265
|
+
}
|
|
266
|
+
_onClosePropertySchemaForm() {
|
|
267
|
+
this._propertySchemaForm = null;
|
|
268
|
+
this._maximizeTopView();
|
|
269
|
+
}
|
|
270
|
+
_onSearchProperty({ detail }) {
|
|
271
|
+
this._filter = detail;
|
|
272
|
+
this._onClosePropertySchemaForm();
|
|
273
|
+
}
|
|
274
|
+
_onClearProperty() {
|
|
275
|
+
this._filter = null;
|
|
276
|
+
this._onClosePropertySchemaForm();
|
|
277
|
+
}
|
|
278
|
+
get _errors() {
|
|
279
|
+
return this._formattedErrors;
|
|
280
|
+
}
|
|
281
|
+
set _errors(rawErrors) {
|
|
282
|
+
this._formattedErrors = rawErrors.map(({ type, key, pos }) => {
|
|
283
|
+
if (type === ERROR_TYPES.INVALID_NAME) {
|
|
284
|
+
return {
|
|
285
|
+
line: pos.line,
|
|
286
|
+
msg: i18n('gv-properties.errors.invalid-key', { key }),
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
if (type === ERROR_TYPES.DUPLICATED_NAME) {
|
|
290
|
+
return {
|
|
291
|
+
line: pos.line,
|
|
292
|
+
msg: i18n('gv-properties.errors.duplicated-key', { key }),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
if (type === ERROR_TYPES.INVALID_LINE) {
|
|
296
|
+
return {
|
|
297
|
+
line: pos.line,
|
|
298
|
+
msg: i18n('gv-properties.errors.invalid-line'),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
if (type === ERROR_TYPES.INVALID_VALUE) {
|
|
302
|
+
return {
|
|
303
|
+
line: pos.line,
|
|
304
|
+
msg: i18n('gv-properties.errors.invalid-value'),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
return { line: '?', msg: i18n('gv-properties.errors.unknown') };
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
_renderErrors(withLine = false) {
|
|
311
|
+
if (this._formattedErrors.length > 0) {
|
|
312
|
+
return html `<div class="${classMap({ 'add-form-error': true, 'add-form-error_expert': this.expert })}">
|
|
313
|
+
<div></div>
|
|
314
|
+
<div class="error-list">
|
|
315
|
+
${this._formattedErrors.map(({ line, msg }) => html `
|
|
316
|
+
<gv-input-message
|
|
317
|
+
>${withLine ? html `<strong .innerHTML="${i18n('gv-properties.errors.line')} ${line}: "></strong>` : ''}
|
|
318
|
+
<span .innerHTML="${msg}"></span
|
|
319
|
+
></gv-input-message>
|
|
320
|
+
`)}
|
|
321
|
+
</div>
|
|
322
|
+
</div>`;
|
|
323
|
+
}
|
|
324
|
+
return html ``;
|
|
325
|
+
}
|
|
326
|
+
_renderTable() {
|
|
327
|
+
const providerEnabled = this.provider && this.provider.enabled;
|
|
328
|
+
if (this.expert) {
|
|
329
|
+
this._computeTextRows();
|
|
330
|
+
const staticProperties = providerEnabled ? this._properties.filter((prop) => !(providerEnabled && prop.dynamic)) : this._properties;
|
|
331
|
+
const expertProperties = staticProperties.filter((prop) => !prop.encrypted);
|
|
332
|
+
const content = expertProperties.map((prop) => `${prop.key}="${prop.value}"`).join('\n');
|
|
333
|
+
return html `<gv-text
|
|
334
|
+
id="expert-input"
|
|
335
|
+
placeholder="${i18n('gv-properties.placeholder.input')}"
|
|
336
|
+
@gv-text:input="${this._onExpertModeTextInput}"
|
|
337
|
+
.value="${content}"
|
|
338
|
+
?readonly="${this.readonly}"
|
|
339
|
+
.rows="${this._textRows}"
|
|
340
|
+
></gv-text>
|
|
341
|
+
${this._renderErrors(true)}`;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
const options = {
|
|
345
|
+
data: [
|
|
346
|
+
{
|
|
347
|
+
field: 'dynamic',
|
|
348
|
+
label: 'Dynamic',
|
|
349
|
+
width: '40px',
|
|
350
|
+
type: (item) => (item.dynamic && providerEnabled ? 'gv-icon' : 'div'),
|
|
351
|
+
attributes: {
|
|
352
|
+
shape: (item) => (item.dynamic && providerEnabled ? 'code:time-schedule' : ''),
|
|
353
|
+
title: (item) => (item.dynamic && providerEnabled ? 'Dynamic properties service is actually in running' : ''),
|
|
354
|
+
style: 'justify-content: center; align-items: center; height: 100%;',
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
field: 'key',
|
|
359
|
+
label: 'Key',
|
|
360
|
+
type: 'gv-input',
|
|
361
|
+
attributes: {
|
|
362
|
+
clipboard: true,
|
|
363
|
+
placeholder: i18n('gv-properties.placeholder.key'),
|
|
364
|
+
name: 'key',
|
|
365
|
+
required: true,
|
|
366
|
+
readonly: this.readonly,
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
field: 'value',
|
|
371
|
+
label: 'Value',
|
|
372
|
+
type: 'gv-input',
|
|
373
|
+
attributes: {
|
|
374
|
+
name: 'value',
|
|
375
|
+
placeholder: 'Property value',
|
|
376
|
+
required: true,
|
|
377
|
+
readonly: this.readonly,
|
|
378
|
+
disabled: (item) => (item.dynamic && providerEnabled) || item.encrypted,
|
|
379
|
+
type: (item) => (item.encrypted ? 'password' : 'text'),
|
|
380
|
+
title: (item) => (item.encrypted ? i18n('gv-properties.infos.encrypted-value') : ''),
|
|
381
|
+
description: (item) => item.encryptionWarning,
|
|
382
|
+
icon: null,
|
|
383
|
+
'ongv-input:input': this._onInput.bind(this),
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
],
|
|
387
|
+
};
|
|
388
|
+
if (this.encryptable === true) {
|
|
389
|
+
options.data.push({
|
|
390
|
+
field: 'encryptable',
|
|
391
|
+
type: 'gv-switch',
|
|
392
|
+
style: '--gv-switch--ta: right;',
|
|
393
|
+
width: '105px',
|
|
394
|
+
attributes: {
|
|
395
|
+
description: i18n('gv-properties.encrypted-toggle'),
|
|
396
|
+
required: true,
|
|
397
|
+
readonly: this.readonly,
|
|
398
|
+
disabled: (item) => item.dynamic && providerEnabled,
|
|
399
|
+
'ongv-switch:input': this._onSwitchEncrypted.bind(this),
|
|
400
|
+
style: 'display: inline-flex; font-size: 12px; height: 40px;',
|
|
401
|
+
},
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
if (this.readonly !== true) {
|
|
405
|
+
options.data.push({
|
|
406
|
+
type: 'gv-button',
|
|
407
|
+
width: '40px',
|
|
408
|
+
attributes: {
|
|
409
|
+
'ongv-button:click': (item, event, target) => this._removeProperty(item, target),
|
|
410
|
+
title: 'Remove',
|
|
411
|
+
disabled: (item) => item.dynamic && providerEnabled,
|
|
412
|
+
danger: true,
|
|
413
|
+
outlined: true,
|
|
414
|
+
icon: 'home:trash',
|
|
415
|
+
},
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const filteredProperties = this._filter != null
|
|
419
|
+
? this._properties.filter((prop) => {
|
|
420
|
+
return (prop.key.toLowerCase() + prop.value.toLowerCase()).includes(this._filter);
|
|
421
|
+
})
|
|
422
|
+
: this._properties;
|
|
423
|
+
let properties = [...filteredProperties];
|
|
424
|
+
if (this._paginationData) {
|
|
425
|
+
this._paginationData.last = Math.ceil(filteredProperties.length / this._pageSize);
|
|
426
|
+
this._paginationData.total = filteredProperties.length;
|
|
427
|
+
this._paginationData.total_pages = Math.ceil(filteredProperties.length / this._pageSize);
|
|
428
|
+
const index = (this._paginationData.current_page - 1) * this._pageSize;
|
|
429
|
+
properties = [...filteredProperties].splice(index, this._pageSize);
|
|
430
|
+
}
|
|
431
|
+
const addPropertyFormGridClass = this.encryptable ? 'add-form-grid-with-encrypted-toggle' : 'add-form-grid';
|
|
432
|
+
const addPropertyForm = this.readonly !== true
|
|
433
|
+
? html `<form id="add-property-form" class="add-form ${addPropertyFormGridClass}" @submit="${this._onSubmit}">
|
|
434
|
+
<div></div>
|
|
435
|
+
<gv-input
|
|
436
|
+
class="control"
|
|
437
|
+
placeholder="${i18n('gv-properties.placeholder.key')}"
|
|
438
|
+
required
|
|
439
|
+
@gv-input:input="${this._onInputNew.bind(this, 'key')}"
|
|
440
|
+
value="${this._newItem.key}"
|
|
441
|
+
></gv-input>
|
|
442
|
+
<gv-input
|
|
443
|
+
class="control"
|
|
444
|
+
placeholder="${i18n('gv-properties.placeholder.value')}"
|
|
445
|
+
required
|
|
446
|
+
@gv-input:input="${this._onInputNew.bind(this, 'value')}"
|
|
447
|
+
.value="${this._newItem.value}"
|
|
448
|
+
></gv-input>
|
|
449
|
+
${this.encryptable
|
|
450
|
+
? html ` <gv-switch
|
|
451
|
+
class="control"
|
|
452
|
+
required
|
|
453
|
+
description="${i18n('gv-properties.encrypted-toggle')}"
|
|
454
|
+
@gv-switch:input="${this._onInputNew.bind(this, 'encryptable')}"
|
|
455
|
+
.value="${this._newItem.encryptable}"
|
|
456
|
+
></gv-switch>`
|
|
457
|
+
: ''}
|
|
458
|
+
<gv-button
|
|
459
|
+
id="add-property"
|
|
460
|
+
icon="code:plus"
|
|
461
|
+
outlined
|
|
462
|
+
disabled
|
|
463
|
+
@gv-button:click="${this._addProperty.bind(this, this._newItem)}"
|
|
464
|
+
title="${i18n('gv-properties.add')}"
|
|
465
|
+
></gv-button>
|
|
466
|
+
</form>
|
|
467
|
+
${this._renderErrors()}
|
|
468
|
+
<hr />`
|
|
469
|
+
: '';
|
|
470
|
+
return html ` ${addPropertyForm}
|
|
471
|
+
<gv-table .options="${options}" .items="${properties}" noheader nosort order="key" rowheight="57px"></gv-table>`;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
_onChangeMode({ detail }) {
|
|
475
|
+
this._submitExpertMode();
|
|
476
|
+
this.expert = detail;
|
|
477
|
+
this._errors = [];
|
|
478
|
+
this._newItem = { key: '', value: '', _new: true };
|
|
479
|
+
this._onClosePropertySchemaForm();
|
|
480
|
+
}
|
|
481
|
+
_onPaginate({ detail }) {
|
|
482
|
+
this._paginationData.current_page = detail.page;
|
|
483
|
+
this._onClosePropertySchemaForm();
|
|
484
|
+
this.requestUpdate();
|
|
485
|
+
}
|
|
486
|
+
updated(props) {
|
|
487
|
+
if (props.has('_properties') || props.has('_pageSize')) {
|
|
488
|
+
this._paginationData = {
|
|
489
|
+
first: 1,
|
|
490
|
+
last: Math.ceil(this._properties.length / this._pageSize),
|
|
491
|
+
total: this._properties.length,
|
|
492
|
+
current_page: 1,
|
|
493
|
+
total_pages: Math.ceil(this._properties.length / this._pageSize),
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
_onChangePageSize({ detail }) {
|
|
498
|
+
this._pageSize = Number(detail).valueOf();
|
|
499
|
+
this._onClosePropertySchemaForm();
|
|
500
|
+
}
|
|
501
|
+
_renderTableForm() {
|
|
502
|
+
return html `<div class="container">
|
|
503
|
+
<div class="header">
|
|
504
|
+
<div class="title">Manage global properties <span>(${this._properties ? this._properties.length : 0})</span></div>
|
|
505
|
+
<gv-switch
|
|
506
|
+
small
|
|
507
|
+
.description="${this.expert ? 'Expert' : 'Simple'}"
|
|
508
|
+
.value="${this.expert}"
|
|
509
|
+
@gv-switch:input="${this._onChangeMode}"
|
|
510
|
+
></gv-switch>
|
|
511
|
+
<gv-input
|
|
512
|
+
id="search-property"
|
|
513
|
+
placeholder="Filter properties (Shift + Ctrl + Space)"
|
|
514
|
+
type="search"
|
|
515
|
+
small
|
|
516
|
+
class="search-input"
|
|
517
|
+
.disabled="${this.expert}"
|
|
518
|
+
@gv-input:input="${this._onSearchProperty}"
|
|
519
|
+
@gv-input:clear="${this._onClearProperty}"
|
|
520
|
+
></gv-input>
|
|
521
|
+
<gv-select
|
|
522
|
+
class="page-size__select"
|
|
523
|
+
@gv-select:input="${this._onChangePageSize}"
|
|
524
|
+
small
|
|
525
|
+
.options="${this._pageSizes}"
|
|
526
|
+
.value="${this._pageSize}"
|
|
527
|
+
.disabled="${this.expert || this._paginationData == null}"
|
|
528
|
+
></gv-select>
|
|
529
|
+
<gv-pagination
|
|
530
|
+
@gv-pagination:paginate="${this._onPaginate}"
|
|
531
|
+
.disabled="${this.expert || this._paginationData == null}"
|
|
532
|
+
.data="${this._paginationData}"
|
|
533
|
+
widget
|
|
534
|
+
></gv-pagination>
|
|
535
|
+
</div>
|
|
536
|
+
<div class="content"><div class="form-content">${this._renderTable()}</div></div>
|
|
537
|
+
</div>`;
|
|
538
|
+
}
|
|
539
|
+
_fetchDocumentation() {
|
|
540
|
+
this._showDocumentation = true;
|
|
541
|
+
}
|
|
542
|
+
_hideDocumentation() {
|
|
543
|
+
this._showDocumentation = false;
|
|
544
|
+
}
|
|
545
|
+
get dirty() {
|
|
546
|
+
const form = this.shadowRoot.querySelector('gv-schema-form');
|
|
547
|
+
return form && form.dirty;
|
|
548
|
+
}
|
|
549
|
+
confirm() {
|
|
550
|
+
const form = this.shadowRoot.querySelector('gv-schema-form');
|
|
551
|
+
if (form) {
|
|
552
|
+
return form.confirm().then(() => this._onClosePropertySchemaForm());
|
|
553
|
+
}
|
|
554
|
+
return Promise.resolve();
|
|
555
|
+
}
|
|
556
|
+
_renderForm() {
|
|
557
|
+
return html `<gv-schema-form
|
|
558
|
+
slot="top"
|
|
559
|
+
scrollable
|
|
560
|
+
.schema="${this._propertySchemaForm}"
|
|
561
|
+
.values="${this.provider}"
|
|
562
|
+
.icon="design:edit"
|
|
563
|
+
has-header
|
|
564
|
+
?readonly="${this.readonly}"
|
|
565
|
+
@gv-schema-form:submit="${this._onSubmitPropertyForm}"
|
|
566
|
+
>
|
|
567
|
+
<div slot="title" class="properties-title">Configure dynamic properties</div>
|
|
568
|
+
<gv-button
|
|
569
|
+
slot="header-left"
|
|
570
|
+
icon="general:close"
|
|
571
|
+
outlined
|
|
572
|
+
small
|
|
573
|
+
@gv-button:click="${this._onClosePropertySchemaForm}"
|
|
574
|
+
title="Close (esc)"
|
|
575
|
+
></gv-button>
|
|
576
|
+
<gv-button
|
|
577
|
+
slot="header-left"
|
|
578
|
+
icon="home:book"
|
|
579
|
+
?disabled="${this._showDocumentation}"
|
|
580
|
+
outlined
|
|
581
|
+
small
|
|
582
|
+
@gv-button:click="${this._fetchDocumentation}"
|
|
583
|
+
title="Open documentation"
|
|
584
|
+
></gv-button>
|
|
585
|
+
</gv-schema-form>`;
|
|
586
|
+
}
|
|
587
|
+
_renderBottom() {
|
|
588
|
+
if (this._propertySchemaForm && this._showDocumentation) {
|
|
589
|
+
return html `<gv-resizable-views no-overflow direction="horizontal">
|
|
590
|
+
${this._renderForm()}
|
|
591
|
+
<gv-documentation
|
|
592
|
+
slot="bottom"
|
|
593
|
+
.text="${this._providerDocumentation}"
|
|
594
|
+
@gv-documentation:close="${this._hideDocumentation}"
|
|
595
|
+
></gv-documentation>
|
|
596
|
+
</gv-resizable-views>`;
|
|
597
|
+
}
|
|
598
|
+
else if (this._propertySchemaForm) {
|
|
599
|
+
return this._renderForm();
|
|
600
|
+
}
|
|
601
|
+
else {
|
|
602
|
+
return html `<div class="properties-bottom-container">${this._renderDynamicConfiguration()}</div>`;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
_renderDynamicConfiguration() {
|
|
606
|
+
const hasDynamicConfiguration = this.provider && this.provider.enabled;
|
|
607
|
+
let configureAction = '';
|
|
608
|
+
if (hasDynamicConfiguration || this.readonly !== true) {
|
|
609
|
+
configureAction = html `<gv-button
|
|
610
|
+
icon="tools:tools"
|
|
611
|
+
@gv-button:click="${this._onConfigureDynamicProperties}"
|
|
612
|
+
outlined
|
|
613
|
+
.disabled="${this.expert}"
|
|
614
|
+
>Configure dynamic properties</gv-button
|
|
615
|
+
>`;
|
|
616
|
+
}
|
|
617
|
+
if (hasDynamicConfiguration) {
|
|
618
|
+
return html `<div class="properties-message">
|
|
619
|
+
Dynamic properties service is actually in <code>running</code> state and run with cron expression
|
|
620
|
+
<code>${this.provider.schedule}</code> using <code>${this.provider.provider}</code> provider.
|
|
621
|
+
</div>
|
|
622
|
+
${configureAction}`;
|
|
623
|
+
}
|
|
624
|
+
else if (this.readonly) {
|
|
625
|
+
return html `<div class="empty">No dynamic properties service configured</div>`;
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
return configureAction;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
_onMove() {
|
|
632
|
+
this._computeTextRows();
|
|
633
|
+
}
|
|
634
|
+
_computeTextRows() {
|
|
635
|
+
const parent = this.shadowRoot.querySelector('.content');
|
|
636
|
+
if (parent) {
|
|
637
|
+
const { height } = parent.getBoundingClientRect();
|
|
638
|
+
// --gv-text--lh=30px
|
|
639
|
+
this._textRows = Math.round(Math.round(height - 20) / 30) - 2;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
render() {
|
|
643
|
+
if (this.providers && this.providers.length > 0) {
|
|
644
|
+
return html `<div class="properties">
|
|
645
|
+
<gv-resizable-views no-overflow @gv-resizable-views:move="${this._onMove}" @gv-resizable-views:resize="${this._onMove}">
|
|
646
|
+
<div slot="top" class="box">${this._renderTableForm()}</div>
|
|
647
|
+
<div slot="bottom">${this._renderBottom()}</div>
|
|
648
|
+
</gv-resizable-views>
|
|
649
|
+
</div>`;
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
return html `<div class="properties">
|
|
653
|
+
<div class="table-box">${this._renderTableForm()}</div>
|
|
654
|
+
</div>`;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
static get styles() {
|
|
658
|
+
return [
|
|
659
|
+
empty,
|
|
660
|
+
// language=CSS
|
|
661
|
+
css `
|
|
662
|
+
:host {
|
|
663
|
+
box-sizing: border-box;
|
|
664
|
+
height: 100%;
|
|
665
|
+
width: 100%;
|
|
666
|
+
display: block;
|
|
667
|
+
}
|
|
416
668
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
})
|
|
423
|
-
};
|
|
424
|
-
}
|
|
669
|
+
.properties {
|
|
670
|
+
display: flex;
|
|
671
|
+
height: 100%;
|
|
672
|
+
width: 100%;
|
|
673
|
+
}
|
|
425
674
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
};
|
|
431
|
-
}
|
|
675
|
+
gv-resizable-views {
|
|
676
|
+
height: 100%;
|
|
677
|
+
width: 100%;
|
|
678
|
+
}
|
|
432
679
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
msg: i18n('gv-properties.errors.invalid-value')
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
return {
|
|
441
|
-
line: '?',
|
|
442
|
-
msg: i18n('gv-properties.errors.unknown')
|
|
443
|
-
};
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
_renderErrors(withLine = false) {
|
|
448
|
-
if (this._formattedErrors.length > 0) {
|
|
449
|
-
return html`<div class="${classMap({
|
|
450
|
-
'add-form-error': true,
|
|
451
|
-
'add-form-error_expert': this.expert
|
|
452
|
-
})}"> <div></div> <div class="error-list"> ${this._formattedErrors.map(({
|
|
453
|
-
line,
|
|
454
|
-
msg
|
|
455
|
-
}) => html` <gv-input-message>${withLine ? html`<strong .innerHTML="${i18n('gv-properties.errors.line')} ${line}: "></strong>` : ''} <span .innerHTML="${msg}"></span></gv-input-message> `)} </div> </div>`;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
return html``;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
_renderTable() {
|
|
462
|
-
const providerEnabled = this.provider && this.provider.enabled;
|
|
463
|
-
|
|
464
|
-
if (this.expert) {
|
|
465
|
-
this._computeTextRows();
|
|
466
|
-
|
|
467
|
-
const staticProperties = providerEnabled ? this._properties.filter(prop => !(providerEnabled && prop.dynamic)) : this._properties;
|
|
468
|
-
const expertProperties = staticProperties.filter(prop => !prop.encrypted);
|
|
469
|
-
const content = expertProperties.map(prop => `${prop.key}="${prop.value}"`).join('\n');
|
|
470
|
-
return html`<gv-text id="expert-input" placeholder="${i18n('gv-properties.placeholder.input')}" @gv-text:input="${this._onExpertModeTextInput}" .value="${content}" ?readonly="${this.readonly}" .rows="${this._textRows}"></gv-text> ${this._renderErrors(true)}`;
|
|
471
|
-
} else {
|
|
472
|
-
const options = {
|
|
473
|
-
data: [{
|
|
474
|
-
field: 'dynamic',
|
|
475
|
-
label: 'Dynamic',
|
|
476
|
-
width: '40px',
|
|
477
|
-
type: item => item.dynamic && providerEnabled ? 'gv-icon' : 'div',
|
|
478
|
-
attributes: {
|
|
479
|
-
shape: item => item.dynamic && providerEnabled ? 'code:time-schedule' : '',
|
|
480
|
-
title: item => item.dynamic && providerEnabled ? 'Dynamic properties service is actually in running' : '',
|
|
481
|
-
style: 'justify-content: center; align-items: center; height: 100%;'
|
|
482
|
-
}
|
|
483
|
-
}, {
|
|
484
|
-
field: 'key',
|
|
485
|
-
label: 'Key',
|
|
486
|
-
type: 'gv-input',
|
|
487
|
-
attributes: {
|
|
488
|
-
clipboard: true,
|
|
489
|
-
placeholder: i18n('gv-properties.placeholder.key'),
|
|
490
|
-
name: 'key',
|
|
491
|
-
required: true,
|
|
492
|
-
readonly: this.readonly
|
|
493
|
-
}
|
|
494
|
-
}, {
|
|
495
|
-
field: 'value',
|
|
496
|
-
label: 'Value',
|
|
497
|
-
type: 'gv-input',
|
|
498
|
-
attributes: {
|
|
499
|
-
name: 'value',
|
|
500
|
-
placeholder: 'Property value',
|
|
501
|
-
required: true,
|
|
502
|
-
readonly: this.readonly,
|
|
503
|
-
disabled: item => item.dynamic && providerEnabled || item.encrypted,
|
|
504
|
-
type: item => item.encrypted ? 'password' : 'text',
|
|
505
|
-
title: item => item.encrypted ? i18n('gv-properties.infos.encrypted-value') : '',
|
|
506
|
-
description: item => item.encryptionWarning,
|
|
507
|
-
icon: null,
|
|
508
|
-
'ongv-input:input': this._onInput.bind(this)
|
|
509
|
-
}
|
|
510
|
-
}]
|
|
511
|
-
};
|
|
512
|
-
|
|
513
|
-
if (this.encryptable === true) {
|
|
514
|
-
options.data.push({
|
|
515
|
-
field: 'encryptable',
|
|
516
|
-
type: 'gv-switch',
|
|
517
|
-
style: '--gv-switch--ta: right;',
|
|
518
|
-
width: '105px',
|
|
519
|
-
attributes: {
|
|
520
|
-
description: i18n('gv-properties.encrypted-toggle'),
|
|
521
|
-
required: true,
|
|
522
|
-
readonly: this.readonly,
|
|
523
|
-
disabled: item => item.dynamic && providerEnabled,
|
|
524
|
-
'ongv-switch:input': this._onSwitchEncrypted.bind(this),
|
|
525
|
-
style: 'display: inline-flex; font-size: 12px; height: 40px;'
|
|
526
|
-
}
|
|
527
|
-
});
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
if (this.readonly !== true) {
|
|
531
|
-
options.data.push({
|
|
532
|
-
type: 'gv-button',
|
|
533
|
-
width: '40px',
|
|
534
|
-
attributes: {
|
|
535
|
-
'ongv-button:click': (item, event, target) => this._removeProperty(item, target),
|
|
536
|
-
title: 'Remove',
|
|
537
|
-
disabled: item => item.dynamic && providerEnabled,
|
|
538
|
-
danger: true,
|
|
539
|
-
outlined: true,
|
|
540
|
-
icon: 'home:trash'
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
const filteredProperties = this._filter != null ? this._properties.filter(prop => {
|
|
546
|
-
return (prop.key.toLowerCase() + prop.value.toLowerCase()).includes(this._filter);
|
|
547
|
-
}) : this._properties;
|
|
548
|
-
let properties = [...filteredProperties];
|
|
549
|
-
|
|
550
|
-
if (this._paginationData) {
|
|
551
|
-
this._paginationData.last = Math.ceil(filteredProperties.length / this._pageSize);
|
|
552
|
-
this._paginationData.total = filteredProperties.length;
|
|
553
|
-
this._paginationData.total_pages = Math.ceil(filteredProperties.length / this._pageSize);
|
|
554
|
-
const index = (this._paginationData.current_page - 1) * this._pageSize;
|
|
555
|
-
properties = [...filteredProperties].splice(index, this._pageSize);
|
|
556
|
-
}
|
|
680
|
+
gv-schema-form {
|
|
681
|
+
margin: 0;
|
|
682
|
+
}
|
|
557
683
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
_onChangeMode({
|
|
565
|
-
detail
|
|
566
|
-
}) {
|
|
567
|
-
this._submitExpertMode();
|
|
684
|
+
.table-box {
|
|
685
|
+
width: 100%;
|
|
686
|
+
border-left: 1px solid #bfbfbf;
|
|
687
|
+
display: flex;
|
|
688
|
+
}
|
|
568
689
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
690
|
+
gv-table {
|
|
691
|
+
height: auto;
|
|
692
|
+
flex: 1;
|
|
693
|
+
margin-top: 10px;
|
|
694
|
+
margin-right: 50px;
|
|
695
|
+
--gv-table-rows--ov: none;
|
|
696
|
+
--gv-table--colmg: var(--gv-properties-table--colmg, 0.2rem);
|
|
697
|
+
--gv-table-cell--d: inline;
|
|
698
|
+
--gv-table-row--ai: flex-start;
|
|
699
|
+
--gv-table-row--ac: flex-start;
|
|
700
|
+
--gv-table-hover--bgc: var(--gv-theme-neutral-color-lightest);
|
|
701
|
+
}
|
|
576
702
|
|
|
577
|
-
|
|
578
|
-
|
|
703
|
+
.properties-title {
|
|
704
|
+
text-transform: uppercase;
|
|
705
|
+
letter-spacing: 0.2rem;
|
|
706
|
+
}
|
|
579
707
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
708
|
+
.properties-bottom-container {
|
|
709
|
+
display: flex;
|
|
710
|
+
justify-content: center;
|
|
711
|
+
align-items: center;
|
|
712
|
+
height: 100%;
|
|
713
|
+
flex-direction: column;
|
|
714
|
+
}
|
|
584
715
|
|
|
585
|
-
|
|
716
|
+
.header {
|
|
717
|
+
border-bottom: 1px solid #d9d9d9;
|
|
718
|
+
display: flex;
|
|
719
|
+
min-height: 45px;
|
|
720
|
+
align-items: center;
|
|
721
|
+
margin-bottom: 0.5rem;
|
|
722
|
+
padding: 0 0.5rem;
|
|
723
|
+
}
|
|
586
724
|
|
|
587
|
-
|
|
588
|
-
|
|
725
|
+
.header .title {
|
|
726
|
+
color: #28444f;
|
|
727
|
+
font-size: 18px;
|
|
728
|
+
display: flex;
|
|
729
|
+
align-items: flex-end;
|
|
730
|
+
flex: 1;
|
|
731
|
+
}
|
|
589
732
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
total: this._properties.length,
|
|
596
|
-
current_page: 1,
|
|
597
|
-
total_pages: Math.ceil(this._properties.length / this._pageSize)
|
|
598
|
-
};
|
|
599
|
-
}
|
|
600
|
-
}
|
|
733
|
+
.header .title span {
|
|
734
|
+
font-size: 12px;
|
|
735
|
+
margin-left: 8px;
|
|
736
|
+
opacity: 0.7;
|
|
737
|
+
}
|
|
601
738
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
739
|
+
.box {
|
|
740
|
+
position: absolute;
|
|
741
|
+
display: flex;
|
|
742
|
+
flex-direction: column;
|
|
743
|
+
width: 100%;
|
|
744
|
+
top: 0;
|
|
745
|
+
bottom: 0;
|
|
746
|
+
left: 0;
|
|
747
|
+
}
|
|
606
748
|
|
|
607
|
-
|
|
608
|
-
|
|
749
|
+
.container {
|
|
750
|
+
flex-grow: 1;
|
|
609
751
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
}
|
|
752
|
+
display: flex;
|
|
753
|
+
flex-direction: column;
|
|
613
754
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
755
|
+
/* for Firefox */
|
|
756
|
+
min-height: 0;
|
|
757
|
+
height: 100%;
|
|
758
|
+
}
|
|
617
759
|
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
760
|
+
.content {
|
|
761
|
+
background: white;
|
|
762
|
+
flex-grow: 1;
|
|
621
763
|
|
|
622
|
-
|
|
623
|
-
const form = this.shadowRoot.querySelector('gv-schema-form');
|
|
624
|
-
return form && form.dirty;
|
|
625
|
-
}
|
|
764
|
+
overflow: auto;
|
|
626
765
|
|
|
627
|
-
|
|
628
|
-
|
|
766
|
+
/* for Firefox */
|
|
767
|
+
min-height: 0;
|
|
768
|
+
padding: 0.5rem;
|
|
629
769
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
770
|
+
display: flex;
|
|
771
|
+
flex-direction: column;
|
|
772
|
+
align-items: center;
|
|
773
|
+
}
|
|
633
774
|
|
|
634
|
-
|
|
635
|
-
|
|
775
|
+
gv-text {
|
|
776
|
+
--gv-text--fz: 20px;
|
|
777
|
+
--gv-text--lh: 25px;
|
|
778
|
+
}
|
|
636
779
|
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
780
|
+
gv-switch {
|
|
781
|
+
--gv-switch--ta: right;
|
|
782
|
+
}
|
|
640
783
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
} else if (this._propertySchemaForm) {
|
|
645
|
-
return this._renderForm();
|
|
646
|
-
} else {
|
|
647
|
-
return html`<div class="properties-bottom-container">${this._renderDynamicConfiguration()}</div>`;
|
|
648
|
-
}
|
|
649
|
-
}
|
|
784
|
+
.header gv-input {
|
|
785
|
+
margin: 0 1rem;
|
|
786
|
+
}
|
|
650
787
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
788
|
+
.add-form,
|
|
789
|
+
.add-form-error {
|
|
790
|
+
display: grid;
|
|
791
|
+
margin: auto 50px auto 0;
|
|
792
|
+
box-sizing: border-box;
|
|
793
|
+
}
|
|
654
794
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
795
|
+
.add-form {
|
|
796
|
+
column-gap: var(--gv-properties-table--colmg, 0.2rem);
|
|
797
|
+
border-right: solid thick transparent;
|
|
798
|
+
height: 50px;
|
|
799
|
+
}
|
|
658
800
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
return configureAction;
|
|
665
|
-
}
|
|
666
|
-
}
|
|
801
|
+
.add-form gv-input,
|
|
802
|
+
gv-button,
|
|
803
|
+
gv-switch {
|
|
804
|
+
margin: auto 0;
|
|
805
|
+
}
|
|
667
806
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
807
|
+
.add-form gv-switch {
|
|
808
|
+
font-size: 12px;
|
|
809
|
+
}
|
|
671
810
|
|
|
672
|
-
|
|
673
|
-
|
|
811
|
+
.add-form-grid {
|
|
812
|
+
grid-template-columns: 40px auto auto 40px;
|
|
813
|
+
}
|
|
674
814
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
} = parent.getBoundingClientRect(); // --gv-text--lh=30px
|
|
815
|
+
.add-form-grid-with-encrypted-toggle {
|
|
816
|
+
grid-template-columns: 40px auto auto 105px 40px;
|
|
817
|
+
}
|
|
679
818
|
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
819
|
+
.add-form-error_expert {
|
|
820
|
+
display: flex;
|
|
821
|
+
}
|
|
683
822
|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
823
|
+
.add-form-error {
|
|
824
|
+
grid-template-columns: 40px 1fr;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
code {
|
|
828
|
+
color: var(--gv-theme-color-warning-dark, #f57c00);
|
|
829
|
+
}
|
|
691
830
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
831
|
+
.form-content {
|
|
832
|
+
display: flex;
|
|
833
|
+
flex-direction: column;
|
|
834
|
+
width: 100%;
|
|
835
|
+
}
|
|
696
836
|
|
|
837
|
+
.properties-message {
|
|
838
|
+
margin-bottom: 0.5rem;
|
|
839
|
+
font-size: 14px;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
.page-size__select {
|
|
843
|
+
max-width: 50px;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
.search-input {
|
|
847
|
+
width: 300px;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
hr {
|
|
851
|
+
background-color: var(--gv-theme-neutral-color);
|
|
852
|
+
border: 0;
|
|
853
|
+
width: 100%;
|
|
854
|
+
height: 2px;
|
|
855
|
+
}
|
|
856
|
+
`,
|
|
857
|
+
];
|
|
858
|
+
}
|
|
697
859
|
}
|
|
698
860
|
window.customElements.define('gv-properties', GvProperties);
|
|
699
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1wcm9wZXJ0aWVzLmpzIl0sIm5hbWVzIjpbImNzcyIsImh0bWwiLCJMaXRFbGVtZW50IiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsIkVSUk9SX1RZUEVTIiwicGFyc2VSYXciLCJ0b05hbWVFcXVhbHNWYWx1ZVN0cmluZyIsImkxOG4iLCJjbGFzc01hcCIsIktleWJvYXJkRWxlbWVudCIsIktFWVMiLCJlbXB0eSIsIkd2UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJkeW5hbWljUHJvcGVydHlTY2hlbWEiLCJ0eXBlIiwiT2JqZWN0IiwiQXJyYXkiLCJfcHJvcGVydGllcyIsImF0dHJpYnV0ZSIsInByb3ZpZGVyIiwicHJvdmlkZXJzIiwiX3Byb3BlcnR5U2NoZW1hRm9ybSIsImV4cGVydCIsIkJvb2xlYW4iLCJfZm9ybWF0dGVkRXJyb3JzIiwiYXR0cmlidXRlcyIsIl9maWx0ZXIiLCJTdHJpbmciLCJfcGFnaW5hdGlvbkRhdGEiLCJfcGFnZVNpemUiLCJOdW1iZXIiLCJfbmV3SXRlbSIsIl9wcm92aWRlckRvY3VtZW50YXRpb24iLCJfc2hvd0RvY3VtZW50YXRpb24iLCJfdGV4dFJvd3MiLCJyZWFkb25seSIsInJlZmxlY3QiLCJlbmNyeXB0YWJsZSIsImNvbnN0cnVjdG9yIiwidHlwZXMiLCJfY3VycmVudFJlc291cmNlIiwia2V5IiwidmFsdWUiLCJfbmV3IiwiX3BhZ2VTaXplcyIsIl9lcnJvcnMiLCJvbktleWJvYXJkIiwiaXNQcmVzc2VkIiwiRXNjIiwiX29uQ2xvc2VQcm9wZXJ0eVNjaGVtYUZvcm0iLCJTaGlmdCIsIkN0cmwiLCJTcGFjZSIsInNlYXJjaCIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yIiwiZm9jdXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFwIiwicHJvcGVydHkiLCJlbmNyeXB0ZWQiLCJfZ2V0UmVzaXphYmxlVmlld3MiLCJfbWF4aW1pemVUb3BWaWV3Iiwidmlld3MiLCJtYXhpbWl6ZVRvcCIsIl9tYXhpbWl6ZUJvdHRvbVZpZXciLCJyZXNpemUiLCJfc3BsaXRNYWluVmlld3MiLCJzcGxpdCIsIl9pc05ld0xpbmVUYWJsZSIsImxpbmUiLCJfb25JbnB1dE5ldyIsIm5hbWUiLCJldmVudCIsInRhcmdldCIsImRldGFpbCIsImVycm9ycyIsInNldFRpbWVvdXQiLCJidG4iLCJsZW5ndGgiLCJfZGlzYWJsZWROZXdMaW5lIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiX29uSW5wdXQiLCJfb25Td2l0Y2hFbmNyeXB0ZWQiLCJpdGVtIiwiZW5jcnlwdGlvbldhcm5pbmciLCJyZXF1ZXN0VXBkYXRlIiwiX2FkZFByb3BlcnR5IiwiX3JlbW92ZVByb3BlcnR5IiwiZmlsdGVyIiwidHJpbSIsIl9zdWJtaXRFeHBlcnRNb2RlIiwiX2hhbmRsZUV4cGVydE1vZGVJbnB1dCIsIl9vbkV4cGVydE1vZGVUZXh0SW5wdXQiLCJleHBlcnRNb2RlSW5wdXRTdHJpbmciLCJhbGxQcm9wZXJ0aWVzIiwicHJvdmlkZXJFbmFibGVkIiwiZW5hYmxlZCIsImR5bmFtaWNQcm9wZXJ0aWVzIiwicHJvcCIsImR5bmFtaWMiLCJlbmNyeXB0ZWRQcm9wZXJ0aWVzIiwiYWxsUHJvcGVydGllc1N0cmluZyIsInZhcmlhYmxlcyIsIl9vblN1Ym1pdFByb3BlcnR5Rm9ybSIsInZhbHVlcyIsInN1Ym1pdCIsIl9vblN1Ym1pdCIsImludmFsaWRDb250cm9scyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmaW5kIiwiY29udHJvbCIsImludmFsaWQiLCJfb25Db25maWd1cmVEeW5hbWljUHJvcGVydGllcyIsInByb3ZpZGVyc1RpdGxlTWFwIiwicmVkdWNlIiwiaWQiLCJwcm92aWRlcnNFbnVtIiwia2V5cyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJzY2hlZHVsZSIsImVudW0iLCJkZWZhdWx0IiwidGl0bGVNYXAiLCJyZXF1aXJlZCIsImRlZmF1bHRQcm92aWRlciIsImNvbmZpZ3VyYXRpb24iLCJzY2hlbWEiLCJkb2N1bWVudGF0aW9uIiwiX29uU2VhcmNoUHJvcGVydHkiLCJfb25DbGVhclByb3BlcnR5IiwicmF3RXJyb3JzIiwicG9zIiwiSU5WQUxJRF9OQU1FIiwibXNnIiwiRFVQTElDQVRFRF9OQU1FIiwiSU5WQUxJRF9MSU5FIiwiSU5WQUxJRF9WQUxVRSIsIl9yZW5kZXJFcnJvcnMiLCJ3aXRoTGluZSIsIl9yZW5kZXJUYWJsZSIsIl9jb21wdXRlVGV4dFJvd3MiLCJzdGF0aWNQcm9wZXJ0aWVzIiwiZXhwZXJ0UHJvcGVydGllcyIsImNvbnRlbnQiLCJqb2luIiwib3B0aW9ucyIsImRhdGEiLCJmaWVsZCIsImxhYmVsIiwid2lkdGgiLCJzaGFwZSIsInN0eWxlIiwiY2xpcGJvYXJkIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsImljb24iLCJiaW5kIiwicHVzaCIsImRhbmdlciIsIm91dGxpbmVkIiwiZmlsdGVyZWRQcm9wZXJ0aWVzIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsImxhc3QiLCJNYXRoIiwiY2VpbCIsInRvdGFsIiwidG90YWxfcGFnZXMiLCJpbmRleCIsImN1cnJlbnRfcGFnZSIsInNwbGljZSIsImFkZFByb3BlcnR5Rm9ybUdyaWRDbGFzcyIsImFkZFByb3BlcnR5Rm9ybSIsIl9vbkNoYW5nZU1vZGUiLCJfb25QYWdpbmF0ZSIsInBhZ2UiLCJ1cGRhdGVkIiwicHJvcHMiLCJoYXMiLCJmaXJzdCIsIl9vbkNoYW5nZVBhZ2VTaXplIiwidmFsdWVPZiIsIl9yZW5kZXJUYWJsZUZvcm0iLCJfZmV0Y2hEb2N1bWVudGF0aW9uIiwiX2hpZGVEb2N1bWVudGF0aW9uIiwiZGlydHkiLCJmb3JtIiwiY29uZmlybSIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZW5kZXJGb3JtIiwiX3JlbmRlckJvdHRvbSIsIl9yZW5kZXJEeW5hbWljQ29uZmlndXJhdGlvbiIsImhhc0R5bmFtaWNDb25maWd1cmF0aW9uIiwiY29uZmlndXJlQWN0aW9uIiwiX29uTW92ZSIsInBhcmVudCIsImhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJvdW5kIiwicmVuZGVyIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFFQSxPQUFPLGtCQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8sdUJBQVA7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxtQkFBUDtBQUNBLE9BQU8sa0JBQVA7QUFDQSxPQUFPLGtCQUFQO0FBQ0EsT0FBTywyQkFBUDtBQUNBLE9BQU8sb0JBQVA7QUFDQSxTQUFTQyxtQkFBVCxRQUFvQyxlQUFwQztBQUNBLFNBQVNDLFdBQVQsRUFBc0JDLFFBQXRCLEVBQWdDQyx1QkFBaEMsUUFBK0QsbUJBQS9EO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsZUFBVCxFQUEwQkMsSUFBMUIsUUFBc0MsNEJBQXRDO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixpQkFBdEI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxZQUFOLFNBQTJCSCxlQUFlLENBQUNQLFVBQUQsQ0FBMUMsQ0FBdUQ7QUFDdkMsYUFBVlcsVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEscUJBQXFCLEVBQUU7QUFBRUMsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BRGxCO0FBRUxILE1BQUFBLFVBQVUsRUFBRTtBQUFFRSxRQUFBQSxJQUFJLEVBQUVFO0FB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Y2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuaW1wb3J0ICcuL2d2LXNjaGVtYS1mb3JtJztcbmltcG9ydCAnLi9ndi1yZXNpemFibGUtdmlld3MnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtdGFibGUnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1idXR0b24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pbnB1dCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWljb24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi10ZXh0JztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtaW5wdXQtbWVzc2FnZSc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LXNlbGVjdCc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBFUlJPUl9UWVBFUywgcGFyc2VSYXcsIHRvTmFtZUVxdWFsc1ZhbHVlU3RyaW5nIH0gZnJvbSAnLi4vbGliL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IEtleWJvYXJkRWxlbWVudCwgS0VZUyB9IGZyb20gJy4uL21peGlucy9rZXlib2FyZC1lbGVtZW50JztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0byBtYW5hZ2UgcHJvcGVydGllc1xuICpcbiAqIEBmaXJlcyBndi1wcm9wZXJ0aWVzOmNoYW5nZSAtIFdoZW4gbGlzdCBvZiBwcm9wZXJ0aWVzIGNoYW5nZVxuICogQGZpcmVzIGd2LXByb3BlcnRpZXM6c2F2ZS1wcm92aWRlciAtIFdoZW4gdXNlciB2YWxpZGF0ZXMgcHJvdmlkZXIgY29uZmlndXJhdGlvblxuICogQGZpcmVzIGd2LXByb3BlcnRpZXM6c3dpdGNoLWVuY3J5cHRlZCAtIFdoZW4gdXNlciBzd2l0Y2hlcyBlbmNyeXB0aW9uIHRvZ2dsZVxuICpcbiAqIEBhdHRyIHtBcnJheX0gcHJvcGVydGllcyAtIEFycmF5IG9mIFByb3BlcnRpZXMge2tleSwgdmFsdWUsIGR5bmFtaWM/fVxuICogQGF0dHIge09iamVjdH0gcHJvdmlkZXIgLSBDb25maWd1cmF0aW9uIG9mIHByb3ZpZGVyXG4gKiBAYXR0ciB7QXJyYXl9IHByb3ZpZGVycyAtIExpc3Qgb2YgYXZhaWxhYmxlIHByb3ZpZGVycyAob25seSBodHRwIGZvciB0aGUgbW9tZW50KVxuICogQGF0dHIge0Jvb2xlYW59IGV4cGVydCAtIEZvciBkaXNwbGF5IGV4cGVydCBtb2RlIGJ5IGRlZmF1bHRcbiAqIEBhdHRyIHtCb29sZWFufSBlbmNyeXB0YWJsZSAtIFRvIGRpc3BsYXkgdGhlICdlbmNyeXB0ZWQnIHRvZ2dsZSBvbiBlYWNoIHByb3BlcnR5XG4gKlxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtcHJvcGVydGllcy10YWJsZS0tY29sbWc9MC4ycmVtXSAtIFRhYmxlIGNlbGxzIG1hcmdpblxuICovXG5leHBvcnQgY2xhc3MgR3ZQcm9wZXJ0aWVzIGV4dGVuZHMgS2V5Ym9hcmRFbGVtZW50KExpdEVsZW1lbnQpIHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkeW5hbWljUHJvcGVydHlTY2hlbWE6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBwcm9wZXJ0aWVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBfcHJvcGVydGllczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgcHJvdmlkZXI6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBwcm92aWRlcnM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIF9wcm9wZXJ0eVNjaGVtYUZvcm06IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBleHBlcnQ6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgX2Zvcm1hdHRlZEVycm9yczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlczogZmFsc2UgfSxcbiAgICAgIF9maWx0ZXI6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBfcGFnaW5hdGlvbkRhdGE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfbmV3SXRlbTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9wcm92aWRlckRvY3VtZW50YXRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3Nob3dEb2N1bWVudGF0aW9uOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF90ZXh0Um93czogeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIGVuY3J5cHRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLnR5cGVzID0gW107XG4gICAgdGhpcy5wcm92aWRlciA9IHt9O1xuICAgIHRoaXMuX2N1cnJlbnRSZXNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZm9ybWF0dGVkRXJyb3JzID0gW107XG4gICAgdGhpcy5fc2hvd0RvY3VtZW50YXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX25ld0l0ZW0gPSB7IGtleTogJycsIHZhbHVlOiAnJywgX25ldzogdHJ1ZSB9O1xuICAgIHRoaXMuX3BhZ2VTaXplID0gMTA7XG4gICAgdGhpcy5fdGV4dFJvd3MgPSAxMDtcbiAgICB0aGlzLl9wYWdlU2l6ZXMgPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcbiAgICB0aGlzLl9lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uS2V5Ym9hcmQoKSB7XG4gICAgaWYgKHRoaXMuaXNQcmVzc2VkKEtFWVMuRXNjKSkge1xuICAgICAgdGhpcy5fb25DbG9zZVByb3BlcnR5U2NoZW1hRm9ybSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5TaGlmdCwgS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2gtcHJvcGVydHknKTtcbiAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0IHByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5rZXkubG9jYWxlQ29tcGFyZShiLmtleSkpXG4gICAgICAubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBpZiAocHJvcGVydHkuZW5jcnlwdGVkKSB7XG4gICAgICAgICAgcHJvcGVydHkuZW5jcnlwdGFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7XG4gIH1cblxuICBfZ2V0UmVzaXphYmxlVmlld3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNpemFibGUtdmlld3MnKTtcbiAgfVxuXG4gIF9tYXhpbWl6ZVRvcFZpZXcoKSB7XG4gICAgY29uc3Qgdmlld3MgPSB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpO1xuICAgIGlmICh2aWV3cykge1xuICAgICAgdmlld3MubWF4aW1pemVUb3AoOTUsIDUpO1xuICAgIH1cbiAgfVxuXG4gIF9tYXhpbWl6ZUJvdHRvbVZpZXcoKSB7XG4gICAgY29uc3Qgdmlld3MgPSB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpO1xuICAgIGlmICh2aWV3cykge1xuICAgICAgdmlld3MucmVzaXplKDMwLCA3MCk7XG4gICAgfVxuICB9XG5cbiAgX3NwbGl0TWFpblZpZXdzKCkge1xuICAgIGNvbnN0IHZpZXdzID0gdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKTtcbiAgICBpZiAodmlld3MpIHtcbiAgICAgIHZpZXdzLnNwbGl0KCk7XG4gICAgfVxuICB9XG5cbiAgX2lzTmV3TGluZVRhYmxlKGxpbmUpIHtcbiAgICByZXR1cm4gbGluZS5fbmV3ID09PSB0cnVlO1xuICB9XG5cbiAgX29uSW5wdXROZXcobmFtZSwgZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5fbmV3SXRlbVtuYW1lXSA9IGV2ZW50LmRldGFpbDtcbiAgICBjb25zdCB7IGVycm9ycyB9ID0gcGFyc2VSYXcodG9OYW1lRXF1YWxzVmFsdWVTdHJpbmcoWy4uLnRoaXMucHJvcGVydGllcywgdGhpcy5fbmV3SXRlbV0pKTtcbiAgICB0aGlzLl9lcnJvcnMgPSBlcnJvcnM7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBidG4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtYnV0dG9uI2FkZC1wcm9wZXJ0eScpO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwIHx8IHRoaXMuX2Rpc2FibGVkTmV3TGluZSh0aGlzLl9uZXdJdGVtKSkge1xuICAgICAgICBidG4uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSAna2V5Jykge1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoJ2ludmFsaWQnKTtcbiAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCd2YWxpZCcsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbGlkJyk7XG4gICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnaW52YWxpZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBfb25JbnB1dCgpIHtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIF9vblN3aXRjaEVuY3J5cHRlZChpdGVtKSB7XG4gICAgaWYgKGl0ZW0uZW5jcnlwdGVkID09PSB0cnVlKSB7XG4gICAgICBpdGVtLnZhbHVlID0gJyc7XG4gICAgICBpdGVtLmVuY3J5cHRlZCA9IGZhbHNlO1xuICAgICAgaXRlbS5lbmNyeXB0aW9uV2FybmluZyA9IGkxOG4oJ2d2LXByb3BlcnRpZXMuaW5mb3Mub3ZlcndyaXRlLWVuY3J5cHRpb24nKTtcbiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH1cbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzd2l0Y2gtZW5jcnlwdGVkJywgeyBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBfYWRkUHJvcGVydHkoaXRlbSkge1xuICAgIGRlbGV0ZSBpdGVtLl9uZXc7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW2l0ZW0sIC4uLnRoaXMuX3Byb3BlcnRpZXNdO1xuICAgIHRoaXMuX25ld0l0ZW0gPSB7IGtleTogJycsIHZhbHVlOiAnJywgX25ldzogdHJ1ZSwgZW5jcnlwdGFibGU6IGZhbHNlLCBlbmNyeXB0ZWQ6IGZhbHNlIH07XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlJywgeyBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBfcmVtb3ZlUHJvcGVydHkoaXRlbSkge1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB0aGlzLl9wcm9wZXJ0aWVzLmZpbHRlcigocHJvcGVydHkpID0+IHByb3BlcnR5LmtleSAhPT0gaXRlbS5rZXkpO1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NoYW5nZScsIHsgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgX2Rpc2FibGVkTmV3TGluZShpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5ID09IG51bGwgfHwgaXRlbS52YWx1ZSA9PSBudWxsIHx8IGl0ZW0ua2V5LnRyaW0oKSA9PT0gJycgfHwgaXRlbS52YWx1ZS50cmltKCkgPT09ICcnO1xuICB9XG5cbiAgX3N1Ym1pdEV4cGVydE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuZXhwZXJ0KSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLl9oYW5kbGVFeHBlcnRNb2RlSW5wdXQodGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNleHBlcnQtaW5wdXQnKS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgX29uRXhwZXJ0TW9kZVRleHRJbnB1dCh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5faGFuZGxlRXhwZXJ0TW9kZUlucHV0KGRldGFpbCk7XG4gIH1cblxuICBfaGFuZGxlRXhwZXJ0TW9kZUlucHV0KGV4cGVydE1vZGVJbnB1dFN0cmluZykge1xuICAgIGxldCBhbGxQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICBjb25zdCBwcm92aWRlckVuYWJsZWQgPSB0aGlzLnByb3ZpZGVyICYmIHRoaXMucHJvdmlkZXIuZW5hYmxlZDtcbiAgICBjb25zdCBkeW5hbWljUHJvcGVydGllcyA9IGFsbFByb3BlcnRpZXMuZmlsdGVyKChwcm9wKSA9PiBwcm92aWRlckVuYWJsZWQgJiYgcHJvcC5keW5hbWljKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRQcm9wZXJ0aWVzID0gYWxsUHJvcGVydGllcy5maWx0ZXIoKHByb3ApID0+IHByb3AuZW5jcnlwdGVkKTtcblxuICAgIGNvbnN0IGFsbFByb3BlcnRpZXNTdHJpbmcgPSBgJHtleHBlcnRNb2RlSW5wdXRTdHJpbmd9XFxuJHt0b05hbWVFcXVhbHNWYWx1ZVN0cmluZyhkeW5hbWljUHJvcGVydGllcyl9XFxuJHt0b05hbWVFcXVhbHNWYWx1ZVN0cmluZyhcbiAgICAgIGVuY3J5cHRlZFByb3BlcnRpZXMsXG4gICAgKX1gO1xuICAgIGNvbnN0IHsgZXJyb3JzIH0gPSBwYXJzZVJhdyhhbGxQcm9wZXJ0aWVzU3RyaW5nKTtcbiAgICB0aGlzLl9lcnJvcnMgPSBlcnJvcnM7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHsgdmFyaWFibGVzIH0gPSBwYXJzZVJhdyhleHBlcnRNb2RlSW5wdXRTdHJpbmcpO1xuICAgICAgYWxsUHJvcGVydGllcyA9IFsuLi52YXJpYWJsZXMsIC4uLmR5bmFtaWNQcm9wZXJ0aWVzLCAuLi5lbmNyeXB0ZWRQcm9wZXJ0aWVzXTtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NoYW5nZScsIHsgcHJvcGVydGllczogYWxsUHJvcGVydGllcyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsUHJvcGVydGllcztcbiAgfVxuXG4gIF9vblN1Ym1pdFByb3BlcnR5Rm9ybSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBkZXRhaWwudmFsdWVzO1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NhdmUtcHJvdmlkZXInLCB7IHByb3ZpZGVyIH0pO1xuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICh0aGlzLmV4cGVydCkge1xuICAgICAgdGhpcy5fc3VibWl0RXhwZXJ0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vblN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIF9vblN1Ym1pdCgpIHtcbiAgICBjb25zdCBpbnZhbGlkQ29udHJvbHMgPSBbLi4udGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Zvcm0gLmNvbnRyb2wnKV0uZmluZCgoY29udHJvbCkgPT4gY29udHJvbC5pbnZhbGlkKTtcbiAgICBpZiAoaW52YWxpZENvbnRyb2xzID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FkZFByb3BlcnR5KHRoaXMuX25ld0l0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNvbmZpZ3VyZUR5bmFtaWNQcm9wZXJ0aWVzKCkge1xuICAgIGlmICh0aGlzLmR5bmFtaWNQcm9wZXJ0eVNjaGVtYSA9PSBudWxsKSB7XG4gICAgICAvLyBkeW5hbWljUHJvcGVydHlTY2hlbWEgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBlbnN1cmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCB2ZXJzaW9ucy4gSWYgbm8gc2NoZW1hIGlzIHByb3ZpZGVkIGEgZGVmYXVsdCBzY2hlbWEgd2lsbCBiZSB1c2VkLlxuICAgICAgY29uc3QgcHJvdmlkZXJzVGl0bGVNYXAgPSB0aGlzLnByb3ZpZGVycy5yZWR1Y2UoKG1hcCwgcHJvdmlkZXIpID0+IHtcbiAgICAgICAgbWFwW3Byb3ZpZGVyLmlkXSA9IHByb3ZpZGVyLmtleTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgY29uc3QgcHJvdmlkZXJzRW51bSA9IE9iamVjdC5rZXlzKHByb3ZpZGVyc1RpdGxlTWFwKTtcbiAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnR5U2NoZW1hID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgdGl0bGU6ICdFbmFibGVkJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnIFRoaXMgc2VydmljZSBpcyByZXF1aXJpbmcgYW4gQVBJIGRlcGxveW1lbnQuIERvIG5vdCBmb3JnZXQgdG8gZGVwbG95IEFQSSB0byBzdGFydCBkeW5hbWljLXByb3BlcnRpZXMgc2VydmljZS4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2NoZWR1bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgdGl0bGU6ICdTY2hlZHVsZScsXG4gICAgICAgICAgICAneC1zY2hlbWEtZm9ybSc6IHtcbiAgICAgICAgICAgICAgJ2Nyb24tZXhwcmVzc2lvbic6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvdmlkZXI6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgdGl0bGU6ICdQcm92aWRlciB0eXBlJyxcbiAgICAgICAgICAgIGVudW06IHByb3ZpZGVyc0VudW0sXG4gICAgICAgICAgICBkZWZhdWx0OiBwcm92aWRlcnNFbnVtWzBdLFxuICAgICAgICAgICAgJ3gtc2NoZW1hLWZvcm0nOiB7XG4gICAgICAgICAgICAgIHRpdGxlTWFwOiBwcm92aWRlcnNUaXRsZU1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFsnc2NoZWR1bGUnLCAncHJvdmlkZXInXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFByb3ZpZGVyID0gdGhpcy5wcm92aWRlcnNbMF07XG5cbiAgICB0aGlzLl9wcm9wZXJ0eVNjaGVtYUZvcm0gPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7IC4uLnRoaXMuZHluYW1pY1Byb3BlcnR5U2NoZW1hLnByb3BlcnRpZXMsIGNvbmZpZ3VyYXRpb246IGRlZmF1bHRQcm92aWRlci5zY2hlbWEgfSxcbiAgICAgIHJlcXVpcmVkOiB0aGlzLmR5bmFtaWNQcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZCxcbiAgICB9O1xuICAgIHRoaXMuX3Byb3ZpZGVyRG9jdW1lbnRhdGlvbiA9IGRlZmF1bHRQcm92aWRlci5kb2N1bWVudGF0aW9uO1xuICAgIHRoaXMuX21heGltaXplQm90dG9tVmlldygpO1xuICB9XG5cbiAgX29uQ2xvc2VQcm9wZXJ0eVNjaGVtYUZvcm0oKSB7XG4gICAgdGhpcy5fcHJvcGVydHlTY2hlbWFGb3JtID0gbnVsbDtcbiAgICB0aGlzLl9tYXhpbWl6ZVRvcFZpZXcoKTtcbiAgfVxuXG4gIF9vblNlYXJjaFByb3BlcnR5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9maWx0ZXIgPSBkZXRhaWw7XG4gICAgdGhpcy5fb25DbG9zZVByb3BlcnR5U2NoZW1hRm9ybSgpO1xuICB9XG5cbiAgX29uQ2xlYXJQcm9wZXJ0eSgpIHtcbiAgICB0aGlzLl9maWx0ZXIgPSBudWxsO1xuICAgIHRoaXMuX29uQ2xvc2VQcm9wZXJ0eVNjaGVtYUZvcm0oKTtcbiAgfVxuXG4gIGdldCBfZXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRFcnJvcnM7XG4gIH1cblxuICBzZXQgX2Vycm9ycyhyYXdFcnJvcnMpIHtcbiAgICB0aGlzLl9mb3JtYXR0ZWRFcnJvcnMgPSByYXdFcnJvcnMubWFwKCh7IHR5cGUsIGtleSwgcG9zIH0pID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBFUlJPUl9UWVBFUy5JTlZBTElEX05BTUUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiBwb3MubGluZSxcbiAgICAgICAgICBtc2c6IGkxOG4oJ2d2LXByb3BlcnRpZXMuZXJyb3JzLmludmFsaWQta2V5JywgeyBrZXkgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gRVJST1JfVFlQRVMuRFVQTElDQVRFRF9OQU1FKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogcG9zLmxpbmUsXG4gICAgICAgICAgbXNnOiBpMThuKCdndi1wcm9wZXJ0aWVzLmVycm9ycy5kdXBsaWNhdGVkLWtleScsIHsga2V5IH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IEVSUk9SX1RZUEVTLklOVkFMSURfTElORSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLFxuICAgICAgICAgIG1zZzogaTE4bignZ3YtcHJvcGVydGllcy5lcnJvcnMuaW52YWxpZC1saW5lJyksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gRVJST1JfVFlQRVMuSU5WQUxJRF9WQUxVRSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLFxuICAgICAgICAgIG1zZzogaTE4bignZ3YtcHJvcGVydGllcy5lcnJvcnMuaW52YWxpZC12YWx1ZScpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgbGluZTogJz8nLCBtc2c6IGkxOG4oJ2d2LXByb3BlcnRpZXMuZXJyb3JzLnVua25vd24nKSB9O1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbmRlckVycm9ycyh3aXRoTGluZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX2Zvcm1hdHRlZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7ICdhZGQtZm9ybS1lcnJvcic6IHRydWUsICdhZGQtZm9ybS1lcnJvcl9leHBlcnQnOiB0aGlzLmV4cGVydCB9KX1cIj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLWxpc3RcIj5cbiAgICAgICAgICAke3RoaXMuX2Zvcm1hdHRlZEVycm9ycy5tYXAoXG4gICAgICAgICAgICAoeyBsaW5lLCBtc2cgfSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPGd2LWlucHV0LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICA+JHt3aXRoTGluZSA/IGh0bWxgPHN0cm9uZyAuaW5uZXJIVE1MPVwiJHtpMThuKCdndi1wcm9wZXJ0aWVzLmVycm9ycy5saW5lJyl9ICR7bGluZX06Jm5ic3A7XCI+PC9zdHJvbmc+YCA6ICcnfVxuICAgICAgICAgICAgICAgIDxzcGFuIC5pbm5lckhUTUw9XCIke21zZ31cIj48L3NwYW5cbiAgICAgICAgICAgICAgPjwvZ3YtaW5wdXQtbWVzc2FnZT5cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlclRhYmxlKCkge1xuICAgIGNvbnN0IHByb3ZpZGVyRW5hYmxlZCA9IHRoaXMucHJvdmlkZXIgJiYgdGhpcy5wcm92aWRlci5lbmFibGVkO1xuICAgIGlmICh0aGlzLmV4cGVydCkge1xuICAgICAgdGhpcy5fY29tcHV0ZVRleHRSb3dzKCk7XG5cbiAgICAgIGNvbnN0IHN0YXRpY1Byb3BlcnRpZXMgPSBwcm92aWRlckVuYWJsZWQgPyB0aGlzLl9wcm9wZXJ0aWVzLmZpbHRlcigocHJvcCkgPT4gIShwcm92aWRlckVuYWJsZWQgJiYgcHJvcC5keW5hbWljKSkgOiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgZXhwZXJ0UHJvcGVydGllcyA9IHN0YXRpY1Byb3BlcnRpZXMuZmlsdGVyKChwcm9wKSA9PiAhcHJvcC5lbmNyeXB0ZWQpO1xuICAgICAgY29uc3QgY29udGVudCA9IGV4cGVydFByb3BlcnRpZXMubWFwKChwcm9wKSA9PiBgJHtwcm9wLmtleX09XCIke3Byb3AudmFsdWV9XCJgKS5qb2luKCdcXG4nKTtcblxuICAgICAgcmV0dXJuIGh0bWxgPGd2LXRleHRcbiAgICAgICAgICBpZD1cImV4cGVydC1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCIke2kxOG4oJ2d2LXByb3BlcnRpZXMucGxhY2Vob2xkZXIuaW5wdXQnKX1cIlxuICAgICAgICAgIEBndi10ZXh0OmlucHV0PVwiJHt0aGlzLl9vbkV4cGVydE1vZGVUZXh0SW5wdXR9XCJcbiAgICAgICAgICAudmFsdWU9XCIke2NvbnRlbnR9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgICAucm93cz1cIiR7dGhpcy5fdGV4dFJvd3N9XCJcbiAgICAgICAgPjwvZ3YtdGV4dD5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJFcnJvcnModHJ1ZSl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnZHluYW1pYycsXG4gICAgICAgICAgICBsYWJlbDogJ0R5bmFtaWMnLFxuICAgICAgICAgICAgd2lkdGg6ICc0MHB4JyxcbiAgICAgICAgICAgIHR5cGU6IChpdGVtKSA9PiAoaXRlbS5keW5hbWljICYmIHByb3ZpZGVyRW5hYmxlZCA/ICdndi1pY29uJyA6ICdkaXYnKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgc2hhcGU6IChpdGVtKSA9PiAoaXRlbS5keW5hbWljICYmIHByb3ZpZGVyRW5hYmxlZCA/ICdjb2RlOnRpbWUtc2NoZWR1bGUnIDogJycpLFxuICAgICAgICAgICAgICB0aXRsZTogKGl0ZW0pID0+IChpdGVtLmR5bmFtaWMgJiYgcHJvdmlkZXJFbmFibGVkID8gJ0R5bmFtaWMgcHJvcGVydGllcyBzZXJ2aWNlIGlzIGFjdHVhbGx5IGluIHJ1bm5pbmcnIDogJycpLFxuICAgICAgICAgICAgICBzdHlsZTogJ2p1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBoZWlnaHQ6IDEwMCU7JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICBsYWJlbDogJ0tleScsXG4gICAgICAgICAgICB0eXBlOiAnZ3YtaW5wdXQnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBjbGlwYm9hcmQ6IHRydWUsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpMThuKCdndi1wcm9wZXJ0aWVzLnBsYWNlaG9sZGVyLmtleScpLFxuICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgbGFiZWw6ICdWYWx1ZScsXG4gICAgICAgICAgICB0eXBlOiAnZ3YtaW5wdXQnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1Byb3BlcnR5IHZhbHVlJyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgICBkaXNhYmxlZDogKGl0ZW0pID0+IChpdGVtLmR5bmFtaWMgJiYgcHJvdmlkZXJFbmFibGVkKSB8fCBpdGVtLmVuY3J5cHRlZCxcbiAgICAgICAgICAgICAgdHlwZTogKGl0ZW0pID0+IChpdGVtLmVuY3J5cHRlZCA/ICdwYXNzd29yZCcgOiAndGV4dCcpLFxuICAgICAgICAgICAgICB0aXRsZTogKGl0ZW0pID0+IChpdGVtLmVuY3J5cHRlZCA/IGkxOG4oJ2d2LXByb3BlcnRpZXMuaW5mb3MuZW5jcnlwdGVkLXZhbHVlJykgOiAnJyksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAoaXRlbSkgPT4gaXRlbS5lbmNyeXB0aW9uV2FybmluZyxcbiAgICAgICAgICAgICAgaWNvbjogbnVsbCxcbiAgICAgICAgICAgICAgJ29uZ3YtaW5wdXQ6aW5wdXQnOiB0aGlzLl9vbklucHV0LmJpbmQodGhpcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5lbmNyeXB0YWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICBvcHRpb25zLmRhdGEucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdlbmNyeXB0YWJsZScsXG4gICAgICAgICAgdHlwZTogJ2d2LXN3aXRjaCcsXG4gICAgICAgICAgc3R5bGU6ICctLWd2LXN3aXRjaC0tdGE6IHJpZ2h0OycsXG4gICAgICAgICAgd2lkdGg6ICcxMDVweCcsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGkxOG4oJ2d2LXByb3BlcnRpZXMuZW5jcnlwdGVkLXRvZ2dsZScpLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiAoaXRlbSkgPT4gaXRlbS5keW5hbWljICYmIHByb3ZpZGVyRW5hYmxlZCxcbiAgICAgICAgICAgICdvbmd2LXN3aXRjaDppbnB1dCc6IHRoaXMuX29uU3dpdGNoRW5jcnlwdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICBzdHlsZTogJ2Rpc3BsYXk6IGlubGluZS1mbGV4OyBmb250LXNpemU6IDEycHg7IGhlaWdodDogNDBweDsnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yZWFkb25seSAhPT0gdHJ1ZSkge1xuICAgICAgICBvcHRpb25zLmRhdGEucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2d2LWJ1dHRvbicsXG4gICAgICAgICAgd2lkdGg6ICc0MHB4JyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAnb25ndi1idXR0b246Y2xpY2snOiAoaXRlbSwgZXZlbnQsIHRhcmdldCkgPT4gdGhpcy5fcmVtb3ZlUHJvcGVydHkoaXRlbSwgdGFyZ2V0KSxcbiAgICAgICAgICAgIHRpdGxlOiAnUmVtb3ZlJyxcbiAgICAgICAgICAgIGRpc2FibGVkOiAoaXRlbSkgPT4gaXRlbS5keW5hbWljICYmIHByb3ZpZGVyRW5hYmxlZCxcbiAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgIG91dGxpbmVkOiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ2hvbWU6dHJhc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnRpZXMgPVxuICAgICAgICB0aGlzLl9maWx0ZXIgIT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5fcHJvcGVydGllcy5maWx0ZXIoKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChwcm9wLmtleS50b0xvd2VyQ2FzZSgpICsgcHJvcC52YWx1ZS50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyh0aGlzLl9maWx0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHRoaXMuX3Byb3BlcnRpZXM7XG4gICAgICBsZXQgcHJvcGVydGllcyA9IFsuLi5maWx0ZXJlZFByb3BlcnRpZXNdO1xuICAgICAgaWYgKHRoaXMuX3BhZ2luYXRpb25EYXRhKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb25EYXRhLmxhc3QgPSBNYXRoLmNlaWwoZmlsdGVyZWRQcm9wZXJ0aWVzLmxlbmd0aCAvIHRoaXMuX3BhZ2VTaXplKTtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbkRhdGEudG90YWwgPSBmaWx0ZXJlZFByb3BlcnRpZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uRGF0YS50b3RhbF9wYWdlcyA9IE1hdGguY2VpbChmaWx0ZXJlZFByb3BlcnRpZXMubGVuZ3RoIC8gdGhpcy5fcGFnZVNpemUpO1xuICAgICAgICBjb25zdCBpbmRleCA9ICh0aGlzLl9wYWdpbmF0aW9uRGF0YS5jdXJyZW50X3BhZ2UgLSAxKSAqIHRoaXMuX3BhZ2VTaXplO1xuICAgICAgICBwcm9wZXJ0aWVzID0gWy4uLmZpbHRlcmVkUHJvcGVydGllc10uc3BsaWNlKGluZGV4LCB0aGlzLl9wYWdlU2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZFByb3BlcnR5Rm9ybUdyaWRDbGFzcyA9IHRoaXMuZW5jcnlwdGFibGUgPyAnYWRkLWZvcm0tZ3JpZC13aXRoLWVuY3J5cHRlZC10b2dnbGUnIDogJ2FkZC1mb3JtLWdyaWQnO1xuXG4gICAgICBjb25zdCBhZGRQcm9wZXJ0eUZvcm0gPVxuICAgICAgICB0aGlzLnJlYWRvbmx5ICE9PSB0cnVlXG4gICAgICAgICAgPyBodG1sYDxmb3JtIGlkPVwiYWRkLXByb3BlcnR5LWZvcm1cIiBjbGFzcz1cImFkZC1mb3JtICR7YWRkUHJvcGVydHlGb3JtR3JpZENsYXNzfVwiIEBzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0fVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGd2LWlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIke2kxOG4oJ2d2LXByb3BlcnRpZXMucGxhY2Vob2xkZXIua2V5Jyl9XCJcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICBAZ3YtaW5wdXQ6aW5wdXQ9XCIke3RoaXMuX29uSW5wdXROZXcuYmluZCh0aGlzLCAna2V5Jyl9XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt0aGlzLl9uZXdJdGVtLmtleX1cIlxuICAgICAgICAgICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpMThuKCdndi1wcm9wZXJ0aWVzLnBsYWNlaG9sZGVyLnZhbHVlJyl9XCJcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICBAZ3YtaW5wdXQ6aW5wdXQ9XCIke3RoaXMuX29uSW5wdXROZXcuYmluZCh0aGlzLCAndmFsdWUnKX1cIlxuICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl9uZXdJdGVtLnZhbHVlfVwiXG4gICAgICAgICAgICAgICAgPjwvZ3YtaW5wdXQ+XG4gICAgICAgICAgICAgICAgJHt0aGlzLmVuY3J5cHRhYmxlXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgIDxndi1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCIke2kxOG4oJ2d2LXByb3BlcnRpZXMuZW5jcnlwdGVkLXRvZ2dsZScpfVwiXG4gICAgICAgICAgICAgICAgICAgICAgQGd2LXN3aXRjaDppbnB1dD1cIiR7dGhpcy5fb25JbnB1dE5ldy5iaW5kKHRoaXMsICdlbmNyeXB0YWJsZScpfVwiXG4gICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl9uZXdJdGVtLmVuY3J5cHRhYmxlfVwiXG4gICAgICAgICAgICAgICAgICAgID48L2d2LXN3aXRjaD5gXG4gICAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGlkPVwiYWRkLXByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJjb2RlOnBsdXNcIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9hZGRQcm9wZXJ0eS5iaW5kKHRoaXMsIHRoaXMuX25ld0l0ZW0pfVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIiR7aTE4bignZ3YtcHJvcGVydGllcy5hZGQnKX1cIlxuICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAke3RoaXMuX3JlbmRlckVycm9ycygpfVxuICAgICAgICAgICAgICA8aHIgLz5gXG4gICAgICAgICAgOiAnJztcblxuICAgICAgcmV0dXJuIGh0bWxgICR7YWRkUHJvcGVydHlGb3JtfVxuICAgICAgICA8Z3YtdGFibGUgLm9wdGlvbnM9XCIke29wdGlvbnN9XCIgLml0ZW1zPVwiJHtwcm9wZXJ0aWVzfVwiIG5vaGVhZGVyIG5vc29ydCBvcmRlcj1cImtleVwiIHJvd2hlaWdodD1cIjU3cHhcIj48L2d2LXRhYmxlPmA7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlTW9kZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fc3VibWl0RXhwZXJ0TW9kZSgpO1xuICAgIHRoaXMuZXhwZXJ0ID0gZGV0YWlsO1xuICAgIHRoaXMuX2Vycm9ycyA9IFtdO1xuICAgIHRoaXMuX25ld0l0ZW0gPSB7IGtleTogJycsIHZhbHVlOiAnJywgX25ldzogdHJ1ZSB9O1xuICAgIHRoaXMuX29uQ2xvc2VQcm9wZXJ0eVNjaGVtYUZvcm0oKTtcbiAgfVxuXG4gIF9vblBhZ2luYXRlKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uRGF0YS5jdXJyZW50X3BhZ2UgPSBkZXRhaWwucGFnZTtcbiAgICB0aGlzLl9vbkNsb3NlUHJvcGVydHlTY2hlbWFGb3JtKCk7XG4gICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7XG4gIH1cblxuICB1cGRhdGVkKHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhcygnX3Byb3BlcnRpZXMnKSB8fCBwcm9wcy5oYXMoJ19wYWdlU2l6ZScpKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0aW9uRGF0YSA9IHtcbiAgICAgICAgZmlyc3Q6IDEsXG4gICAgICAgIGxhc3Q6IE1hdGguY2VpbCh0aGlzLl9wcm9wZXJ0aWVzLmxlbmd0aCAvIHRoaXMuX3BhZ2VTaXplKSxcbiAgICAgICAgdG90YWw6IHRoaXMuX3Byb3BlcnRpZXMubGVuZ3RoLFxuICAgICAgICBjdXJyZW50X3BhZ2U6IDEsXG4gICAgICAgIHRvdGFsX3BhZ2VzOiBNYXRoLmNlaWwodGhpcy5fcHJvcGVydGllcy5sZW5ndGggLyB0aGlzLl9wYWdlU2l6ZSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZVBhZ2VTaXplKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IE51bWJlcihkZXRhaWwpLnZhbHVlT2YoKTtcbiAgICB0aGlzLl9vbkNsb3NlUHJvcGVydHlTY2hlbWFGb3JtKCk7XG4gIH1cblxuICBfcmVuZGVyVGFibGVGb3JtKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+TWFuYWdlIGdsb2JhbCBwcm9wZXJ0aWVzIDxzcGFuPigke3RoaXMuX3Byb3BlcnRpZXMgPyB0aGlzLl9wcm9wZXJ0aWVzLmxlbmd0aCA6IDB9KTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGd2LXN3aXRjaFxuICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPVwiJHt0aGlzLmV4cGVydCA/ICdFeHBlcnQnIDogJ1NpbXBsZSd9XCJcbiAgICAgICAgICAudmFsdWU9XCIke3RoaXMuZXhwZXJ0fVwiXG4gICAgICAgICAgQGd2LXN3aXRjaDppbnB1dD1cIiR7dGhpcy5fb25DaGFuZ2VNb2RlfVwiXG4gICAgICAgID48L2d2LXN3aXRjaD5cbiAgICAgICAgPGd2LWlucHV0XG4gICAgICAgICAgaWQ9XCJzZWFyY2gtcHJvcGVydHlcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHByb3BlcnRpZXMgKFNoaWZ0ICsgQ3RybCArIFNwYWNlKVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgc21hbGxcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLmV4cGVydH1cIlxuICAgICAgICAgIEBndi1pbnB1dDppbnB1dD1cIiR7dGhpcy5fb25TZWFyY2hQcm9wZXJ0eX1cIlxuICAgICAgICAgIEBndi1pbnB1dDpjbGVhcj1cIiR7dGhpcy5fb25DbGVhclByb3BlcnR5fVwiXG4gICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICA8Z3Ytc2VsZWN0XG4gICAgICAgICAgY2xhc3M9XCJwYWdlLXNpemVfX3NlbGVjdFwiXG4gICAgICAgICAgQGd2LXNlbGVjdDppbnB1dD1cIiR7dGhpcy5fb25DaGFuZ2VQYWdlU2l6ZX1cIlxuICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX3BhZ2VTaXplc31cIlxuICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fcGFnZVNpemV9XCJcbiAgICAgICAgICAuZGlzYWJsZWQ9XCIke3RoaXMuZXhwZXJ0IHx8IHRoaXMuX3BhZ2luYXRpb25EYXRhID09IG51bGx9XCJcbiAgICAgICAgPjwvZ3Ytc2VsZWN0PlxuICAgICAgICA8Z3YtcGFnaW5hdGlvblxuICAgICAgICAgIEBndi1wYWdpbmF0aW9uOnBhZ2luYXRlPVwiJHt0aGlzLl9vblBhZ2luYXRlfVwiXG4gICAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLmV4cGVydCB8fCB0aGlzLl9wYWdpbmF0aW9uRGF0YSA9PSBudWxsfVwiXG4gICAgICAgICAgLmRhdGE9XCIke3RoaXMuX3BhZ2luYXRpb25EYXRhfVwiXG4gICAgICAgICAgd2lkZ2V0XG4gICAgICAgID48L2d2LXBhZ2luYXRpb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+PGRpdiBjbGFzcz1cImZvcm0tY29udGVudFwiPiR7dGhpcy5fcmVuZGVyVGFibGUoKX08L2Rpdj48L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX2ZldGNoRG9jdW1lbnRhdGlvbigpIHtcbiAgICB0aGlzLl9zaG93RG9jdW1lbnRhdGlvbiA9IHRydWU7XG4gIH1cblxuICBfaGlkZURvY3VtZW50YXRpb24oKSB7XG4gICAgdGhpcy5fc2hvd0RvY3VtZW50YXRpb24gPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBkaXJ0eSgpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LXNjaGVtYS1mb3JtJyk7XG4gICAgcmV0dXJuIGZvcm0gJiYgZm9ybS5kaXJ0eTtcbiAgfVxuXG4gIGNvbmZpcm0oKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1zY2hlbWEtZm9ybScpO1xuICAgIGlmIChmb3JtKSB7XG4gICAgICByZXR1cm4gZm9ybS5jb25maXJtKCkudGhlbigoKSA9PiB0aGlzLl9vbkNsb3NlUHJvcGVydHlTY2hlbWFGb3JtKCkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBfcmVuZGVyRm9ybSgpIHtcbiAgICByZXR1cm4gaHRtbGA8Z3Ytc2NoZW1hLWZvcm1cbiAgICAgIHNsb3Q9XCJ0b3BcIlxuICAgICAgc2Nyb2xsYWJsZVxuICAgICAgLnNjaGVtYT1cIiR7dGhpcy5fcHJvcGVydHlTY2hlbWFGb3JtfVwiXG4gICAgICAudmFsdWVzPVwiJHt0aGlzLnByb3ZpZGVyfVwiXG4gICAgICAuaWNvbj1cImRlc2lnbjplZGl0XCJcbiAgICAgIGhhcy1oZWFkZXJcbiAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRQcm9wZXJ0eUZvcm19XCJcbiAgICA+XG4gICAgICA8ZGl2IHNsb3Q9XCJ0aXRsZVwiIGNsYXNzPVwicHJvcGVydGllcy10aXRsZVwiPkNvbmZpZ3VyZSBkeW5hbWljIHByb3BlcnRpZXM8L2Rpdj5cbiAgICAgIDxndi1idXR0b25cbiAgICAgICAgc2xvdD1cImhlYWRlci1sZWZ0XCJcbiAgICAgICAgaWNvbj1cImdlbmVyYWw6Y2xvc2VcIlxuICAgICAgICBvdXRsaW5lZFxuICAgICAgICBzbWFsbFxuICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlUHJvcGVydHlTY2hlbWFGb3JtfVwiXG4gICAgICAgIHRpdGxlPVwiQ2xvc2UgKGVzYylcIlxuICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgICAgPGd2LWJ1dHRvblxuICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICBpY29uPVwiaG9tZTpib29rXCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9zaG93RG9jdW1lbnRhdGlvbn1cIlxuICAgICAgICBvdXRsaW5lZFxuICAgICAgICBzbWFsbFxuICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9mZXRjaERvY3VtZW50YXRpb259XCJcbiAgICAgICAgdGl0bGU9XCJPcGVuIGRvY3VtZW50YXRpb25cIlxuICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgIDwvZ3Ytc2NoZW1hLWZvcm0+YDtcbiAgfVxuXG4gIF9yZW5kZXJCb3R0b20oKSB7XG4gICAgaWYgKHRoaXMuX3Byb3BlcnR5U2NoZW1hRm9ybSAmJiB0aGlzLl9zaG93RG9jdW1lbnRhdGlvbikge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LXJlc2l6YWJsZS12aWV3cyBuby1vdmVyZmxvdyBkaXJlY3Rpb249XCJob3Jpem9udGFsXCI+XG4gICAgICAgICR7dGhpcy5fcmVuZGVyRm9ybSgpfVxuICAgICAgICA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAgIHNsb3Q9XCJib3R0b21cIlxuICAgICAgICAgIC50ZXh0PVwiJHt0aGlzLl9wcm92aWRlckRvY3VtZW50YXRpb259XCJcbiAgICAgICAgICBAZ3YtZG9jdW1lbnRhdGlvbjpjbG9zZT1cIiR7dGhpcy5faGlkZURvY3VtZW50YXRpb259XCJcbiAgICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wcm9wZXJ0eVNjaGVtYUZvcm0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJGb3JtKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWJvdHRvbS1jb250YWluZXJcIj4ke3RoaXMuX3JlbmRlckR5bmFtaWNDb25maWd1cmF0aW9uKCl9PC9kaXY+YDtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRHluYW1pY0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgaGFzRHluYW1pY0NvbmZpZ3VyYXRpb24gPSB0aGlzLnByb3ZpZGVyICYmIHRoaXMucHJvdmlkZXIuZW5hYmxlZDtcblxuICAgIGxldCBjb25maWd1cmVBY3Rpb24gPSAnJztcbiAgICBpZiAoaGFzRHluYW1pY0NvbmZpZ3VyYXRpb24gfHwgdGhpcy5yZWFkb25seSAhPT0gdHJ1ZSkge1xuICAgICAgY29uZmlndXJlQWN0aW9uID0gaHRtbGA8Z3YtYnV0dG9uXG4gICAgICAgIGljb249XCJ0b29sczp0b29sc1wiXG4gICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlndXJlRHluYW1pY1Byb3BlcnRpZXN9XCJcbiAgICAgICAgb3V0bGluZWRcbiAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLmV4cGVydH1cIlxuICAgICAgICA+Q29uZmlndXJlIGR5bmFtaWMgcHJvcGVydGllczwvZ3YtYnV0dG9uXG4gICAgICA+YDtcbiAgICB9XG5cbiAgICBpZiAoaGFzRHluYW1pY0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLW1lc3NhZ2VcIj5cbiAgICAgICAgICBEeW5hbWljIHByb3BlcnRpZXMgc2VydmljZSBpcyBhY3R1YWxseSBpbiA8Y29kZT5ydW5uaW5nPC9jb2RlPiBzdGF0ZSBhbmQgcnVuIHdpdGggY3JvbiBleHByZXNzaW9uXG4gICAgICAgICAgPGNvZGU+JHt0aGlzLnByb3ZpZGVyLnNjaGVkdWxlfTwvY29kZT4gdXNpbmcgPGNvZGU+JHt0aGlzLnByb3ZpZGVyLnByb3ZpZGVyfTwvY29kZT4gcHJvdmlkZXIuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke2NvbmZpZ3VyZUFjdGlvbn1gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImVtcHR5XCI+Tm8gZHluYW1pYyBwcm9wZXJ0aWVzIHNlcnZpY2UgY29uZmlndXJlZDwvZGl2PmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb25maWd1cmVBY3Rpb247XG4gICAgfVxuICB9XG5cbiAgX29uTW92ZSgpIHtcbiAgICB0aGlzLl9jb21wdXRlVGV4dFJvd3MoKTtcbiAgfVxuXG4gIF9jb21wdXRlVGV4dFJvd3MoKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50Jyk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIC8vIC0tZ3YtdGV4dC0tbGg9MzBweFxuICAgICAgdGhpcy5fdGV4dFJvd3MgPSBNYXRoLnJvdW5kKE1hdGgucm91bmQoaGVpZ2h0IC0gMjApIC8gMzApIC0gMjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvdmlkZXJzICYmIHRoaXMucHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzXCI+XG4gICAgICAgIDxndi1yZXNpemFibGUtdmlld3Mgbm8tb3ZlcmZsb3cgQGd2LXJlc2l6YWJsZS12aWV3czptb3ZlPVwiJHt0aGlzLl9vbk1vdmV9XCIgQGd2LXJlc2l6YWJsZS12aWV3czpyZXNpemU9XCIke3RoaXMuX29uTW92ZX1cIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJ0b3BcIiBjbGFzcz1cImJveFwiPiR7dGhpcy5fcmVuZGVyVGFibGVGb3JtKCl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+JHt0aGlzLl9yZW5kZXJCb3R0b20oKX08L2Rpdj5cbiAgICAgICAgPC9ndi1yZXNpemFibGUtdmlld3M+XG4gICAgICA8L2Rpdj5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwicHJvcGVydGllc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm94XCI+JHt0aGlzLl9yZW5kZXJUYWJsZUZvcm0oKX08L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIC5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyB7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3Ytc2NoZW1hLWZvcm0ge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50YWJsZS1ib3gge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JmYmZiZjtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtdGFibGUge1xuICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1MHB4O1xuICAgICAgICAgIC0tZ3YtdGFibGUtcm93cy0tb3Y6IG5vbmU7XG4gICAgICAgICAgLS1ndi10YWJsZS0tY29sbWc6IHZhcigtLWd2LXByb3BlcnRpZXMtdGFibGUtLWNvbG1nLCAwLjJyZW0pO1xuICAgICAgICAgIC0tZ3YtdGFibGUtY2VsbC0tZDogaW5saW5lO1xuICAgICAgICAgIC0tZ3YtdGFibGUtcm93LS1haTogZmxleC1zdGFydDtcbiAgICAgICAgICAtLWd2LXRhYmxlLXJvdy0tYWM6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgLS1ndi10YWJsZS1ob3Zlci0tYmdjOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wcm9wZXJ0aWVzLXRpdGxlIHtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAucHJvcGVydGllcy1ib3R0b20tY29udGFpbmVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQ1cHg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMCAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZSB7XG4gICAgICAgICAgY29sb3I6ICMyODQ0NGY7XG4gICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZSBzcGFuIHtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94IHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcblxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIC8qIGZvciBGaXJlZm94ICovXG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCB7XG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgICAgICAgICAvKiBmb3IgRmlyZWZveCAqL1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBndi10ZXh0IHtcbiAgICAgICAgICAtLWd2LXRleHQtLWZ6OiAyMHB4O1xuICAgICAgICAgIC0tZ3YtdGV4dC0tbGg6IDI1cHg7XG4gICAgICAgIH1cblxuICAgICAgICBndi1zd2l0Y2gge1xuICAgICAgICAgIC0tZ3Ytc3dpdGNoLS10YTogcmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIGd2LWlucHV0IHtcbiAgICAgICAgICBtYXJnaW46IDAgMXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZGQtZm9ybSxcbiAgICAgICAgLmFkZC1mb3JtLWVycm9yIHtcbiAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgIG1hcmdpbjogYXV0byA1MHB4IGF1dG8gMDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkZC1mb3JtIHtcbiAgICAgICAgICBjb2x1bW4tZ2FwOiB2YXIoLS1ndi1wcm9wZXJ0aWVzLXRhYmxlLS1jb2xtZywgMC4ycmVtKTtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IHNvbGlkIHRoaWNrIHRyYW5zcGFyZW50O1xuICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZGQtZm9ybSBndi1pbnB1dCxcbiAgICAgICAgZ3YtYnV0dG9uLFxuICAgICAgICBndi1zd2l0Y2gge1xuICAgICAgICAgIG1hcmdpbjogYXV0byAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkZC1mb3JtIGd2LXN3aXRjaCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkZC1mb3JtLWdyaWQge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDBweCBhdXRvIGF1dG8gNDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZGQtZm9ybS1ncmlkLXdpdGgtZW5jcnlwdGVkLXRvZ2dsZSB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0MHB4IGF1dG8gYXV0byAxMDVweCA0MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkZC1mb3JtLWVycm9yX2V4cGVydCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZGQtZm9ybS1lcnJvciB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0MHB4IDFmcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGUge1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1jb2xvci13YXJuaW5nLWRhcmssICNmNTdjMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm0tY29udGVudCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnByb3BlcnRpZXMtbWVzc2FnZSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYWdlLXNpemVfX3NlbGVjdCB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA1MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDMwMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaHIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IpO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDJweDtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXByb3BlcnRpZXMnLCBHdlByb3BlcnRpZXMpO1xuIl19
|
|
861
|
+
//# sourceMappingURL=gv-properties.js.map
|