@mediusinc/mng-commons 0.0.1-rc.4 → 0.1.0
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/.pnpm-debug.log +15 -0
- package/README.md +95 -0
- package/assets/i18n/en.json +54 -3
- package/assets/i18n/sl.json +54 -8
- package/assets/images/effect-ondark.png +0 -0
- package/assets/images/effect-ondark.svg +38 -0
- package/assets/images/effect-ondark@2x.png +0 -0
- package/assets/images/effect-onlight.png +0 -0
- package/assets/images/effect-onlight.svg +38 -0
- package/assets/images/effect-onlight@2x.png +0 -0
- package/assets/images/pages/exception-ondark.png +0 -0
- package/assets/images/pages/exception-onlight.png +0 -0
- package/assets/images/pages/login-ondark.png +0 -0
- package/assets/images/pages/login-onlight.png +0 -0
- package/esm2020/lib/api/models/builders/query-param.builder.mjs +8 -8
- package/esm2020/lib/api/models/filter-match-type.model.mjs +14 -12
- package/esm2020/lib/api/models/filter-param.model.mjs +6 -6
- package/esm2020/lib/api/models/mappers.mjs +12 -12
- package/esm2020/lib/api/models/query-mode.model.mjs +7 -7
- package/esm2020/lib/api/models/query-param.model.mjs +5 -5
- package/esm2020/lib/api/models/query-result.model.mjs +15 -15
- package/esm2020/lib/api/services/abstract-crud-api.service.mjs +1 -1
- package/esm2020/lib/api/utils/medius-rest.util.mjs +99 -47
- package/esm2020/lib/components/action/action.component.mjs +3 -3
- package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +6 -4
- package/esm2020/lib/components/action/route/action-route.component.mjs +3 -3
- package/esm2020/lib/components/form/autocomplete/mng-autocomplete.component.mjs +114 -0
- package/esm2020/lib/components/form/dropdown/mng-dropdown.component.mjs +113 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +7 -46
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +7 -39
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +1 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -6
- package/esm2020/lib/components/form/index.mjs +3 -1
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -0
- package/esm2020/lib/components/layout/footer.component.mjs +17 -0
- package/esm2020/lib/components/layout/index.mjs +7 -7
- package/esm2020/lib/components/layout/main-layout.component.mjs +33 -0
- package/esm2020/lib/components/layout/menu-item.component.mjs +173 -0
- package/esm2020/lib/components/layout/menu.component.mjs +20 -0
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -0
- package/esm2020/lib/components/layout/topbar.component.mjs +40 -0
- package/esm2020/lib/components/tableview/index.mjs +3 -1
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +74 -0
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -0
- package/esm2020/lib/components/tableview/table/table.component.mjs +175 -41
- package/esm2020/lib/components/tableview/tableview.component.mjs +5 -5
- package/esm2020/lib/mng-commons.module.mjs +70 -40
- package/esm2020/lib/models/config/mng-config.model.mjs +1 -1
- package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +1 -1
- package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +17 -12
- package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +291 -13
- package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +12 -3
- package/esm2020/lib/models/events/table-event.model.mjs +1 -1
- package/esm2020/lib/models/interfaces/index.mjs +2 -1
- package/esm2020/lib/models/interfaces/lookup.model.mjs +2 -0
- package/esm2020/lib/models/providers/data-provider.model.mjs +3 -3
- package/esm2020/lib/models/router/index.mjs +2 -0
- package/esm2020/lib/models/router/router.model.mjs +2 -0
- package/esm2020/lib/models/user/index.mjs +2 -0
- package/esm2020/lib/models/user/user.model.mjs +2 -0
- package/esm2020/lib/pipes/boolean.pipe.mjs +22 -0
- package/esm2020/lib/pipes/index.mjs +2 -1
- package/esm2020/lib/services/action.service.mjs +8 -7
- package/esm2020/lib/services/commons.service.mjs +357 -0
- package/esm2020/lib/services/configuration.service.mjs +7 -7
- package/esm2020/lib/services/index.mjs +2 -4
- package/esm2020/lib/services/navigation.service.mjs +5 -6
- package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -0
- package/esm2020/lib/services/providers/config-service.provider.mjs +5 -5
- package/esm2020/lib/services/providers/formly-config.provider.mjs +2 -2
- package/esm2020/lib/utils/editor-formly.util.mjs +4 -4
- package/esm2020/lib/utils/i18n.util.mjs +37 -3
- package/esm2020/lib/utils/model.util.mjs +20 -1
- package/esm2020/lib/utils/toast.util.mjs +14 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/mediusinc-mng-commons.mjs +3404 -2526
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +3328 -2472
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/models/builders/query-param.builder.d.ts +9 -9
- package/lib/api/models/filter-match-type.model.d.ts +7 -5
- package/lib/api/models/filter-param.model.d.ts +3 -3
- package/lib/api/models/query-mode.model.d.ts +1 -1
- package/lib/api/models/query-param.model.d.ts +5 -5
- package/lib/api/models/query-result.model.d.ts +5 -5
- package/lib/api/services/abstract-crud-api.service.d.ts +3 -3
- package/lib/api/utils/medius-rest.util.d.ts +9 -3
- package/lib/components/action/action.component.d.ts +2 -2
- package/lib/components/action/dialog/action-dialog.component.d.ts +3 -2
- package/lib/components/action/route/action-route.component.d.ts +2 -2
- package/lib/components/form/autocomplete/mng-autocomplete.component.d.ts +36 -0
- package/lib/components/form/dropdown/mng-dropdown.component.d.ts +34 -0
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +1 -11
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -8
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +3 -3
- package/lib/components/form/index.d.ts +2 -0
- package/lib/components/layout/breadcrumb.component.d.ts +8 -0
- package/lib/components/layout/footer.component.d.ts +9 -0
- package/lib/components/layout/index.d.ts +6 -6
- package/lib/components/layout/main-layout.component.d.ts +13 -0
- package/lib/components/layout/menu-item.component.d.ts +29 -0
- package/lib/components/layout/menu.component.d.ts +10 -0
- package/lib/components/layout/services/main-layout.component.service.d.ts +65 -0
- package/lib/components/layout/topbar.component.d.ts +18 -0
- package/lib/components/tableview/index.d.ts +2 -0
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +22 -0
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -0
- package/lib/components/tableview/table/table.component.d.ts +42 -10
- package/lib/components/tableview/tableview.component.d.ts +3 -3
- package/lib/mng-commons.module.d.ts +66 -59
- package/lib/models/config/mng-config.model.d.ts +18 -1
- package/lib/models/descriptors/editor-descriptor.model.d.ts +9 -7
- package/lib/models/descriptors/table-descriptor.model.d.ts +133 -14
- package/lib/models/descriptors/tableview-descriptor.model.d.ts +6 -3
- package/lib/models/events/table-event.model.d.ts +4 -4
- package/lib/models/interfaces/index.d.ts +1 -0
- package/lib/models/interfaces/lookup.model.d.ts +17 -0
- package/lib/models/providers/data-provider.model.d.ts +10 -10
- package/lib/models/router/index.d.ts +1 -0
- package/lib/models/router/router.model.d.ts +9 -0
- package/lib/models/user/index.d.ts +1 -0
- package/lib/models/user/user.model.d.ts +8 -0
- package/lib/pipes/boolean.pipe.d.ts +7 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/services/action.service.d.ts +3 -3
- package/lib/services/commons.service.d.ts +74 -0
- package/lib/services/configuration.service.d.ts +3 -3
- package/lib/services/index.d.ts +1 -3
- package/lib/services/navigation.service.d.ts +3 -3
- package/lib/services/providers/commons-init.provider.d.ts +2 -0
- package/lib/services/providers/config-service.provider.d.ts +3 -3
- package/lib/services/providers/formly-config.provider.d.ts +1 -1
- package/lib/utils/i18n.util.d.ts +3 -0
- package/lib/utils/model.util.d.ts +2 -0
- package/lib/utils/toast.util.d.ts +2 -1
- package/mediusinc-mng-commons-0.1.0.tgz +0 -0
- package/package.json +37 -36
- package/public-api.d.ts +2 -0
- package/scss/common/layout/_breadcrumb.scss +96 -0
- package/scss/common/layout/_config.scss +101 -0
- package/scss/common/layout/_dashboard.scss +16 -0
- package/scss/common/layout/_exception.scss +131 -0
- package/scss/common/layout/_footer.scss +29 -0
- package/scss/common/layout/_help.scss +157 -0
- package/scss/common/layout/_inlinemenu.scss +55 -0
- package/scss/common/layout/_invoice.scss +176 -0
- package/scss/common/layout/_landing.scss +639 -0
- package/scss/common/layout/_layout_dark.scss +23 -0
- package/scss/common/layout/_layout_light.scss +23 -0
- package/scss/common/layout/_loader.scss +18 -0
- package/scss/common/layout/_login.scss +106 -0
- package/scss/common/layout/_main.scss +45 -0
- package/scss/common/layout/_mixins.scss +214 -0
- package/scss/common/layout/_rightmenu.scss +125 -0
- package/scss/common/layout/_topbar.scss +189 -0
- package/scss/common/layout/_typography.scss +63 -0
- package/scss/common/layout/_utils.scss +96 -0
- package/scss/common/layout/_widgets.scss +391 -0
- package/scss/common/layout/menu/_menu.scss +7 -0
- package/scss/common/layout/menu/_menu_common.scss +183 -0
- package/scss/common/layout/menu/_menu_overlay.scss +52 -0
- package/scss/common/layout/menu/_menu_sidebar.scss +232 -0
- package/scss/common/layout/menu/_menu_slim.scss +138 -0
- package/scss/common/layout/menu/_menu_static.scss +70 -0
- package/scss/common/layout/menu/_menu_theme.scss +365 -0
- package/scss/common/theme/_theme_dark.scss +5 -0
- package/scss/common/theme/_theme_light.scss +5 -0
- package/scss/common/theme/designer/_colors.scss +18 -0
- package/scss/common/theme/designer/_common.scss +40 -0
- package/scss/common/theme/designer/_components.scss +101 -0
- package/scss/common/theme/designer/_mixins.scss +174 -0
- package/scss/common/theme/designer/components/button/_button.scss +560 -0
- package/scss/common/theme/designer/components/button/_speeddial.scss +79 -0
- package/scss/common/theme/designer/components/button/_splitbutton.scss +1 -0
- package/scss/common/theme/designer/components/data/_carousel.scss +37 -0
- package/scss/common/theme/designer/components/data/_datatable.scss +266 -0
- package/scss/common/theme/designer/components/data/_dataview.scss +55 -0
- package/scss/common/theme/designer/components/data/_filter.scss +138 -0
- package/scss/common/theme/designer/components/data/_fullcalendar.scss +324 -0
- package/scss/common/theme/designer/components/data/_orderlist.scss +91 -0
- package/scss/common/theme/designer/components/data/_organizationchart.scss +50 -0
- package/scss/common/theme/designer/components/data/_paginator.scss +83 -0
- package/scss/common/theme/designer/components/data/_picklist.scss +91 -0
- package/scss/common/theme/designer/components/data/_timeline.scss +38 -0
- package/scss/common/theme/designer/components/data/_tree.scss +144 -0
- package/scss/common/theme/designer/components/data/_treetable.scss +242 -0
- package/scss/common/theme/designer/components/data/_virtualscroller.scss +28 -0
- package/scss/common/theme/designer/components/file/_fileupload.scss +58 -0
- package/scss/common/theme/designer/components/input/_autocomplete.scss +103 -0
- package/scss/common/theme/designer/components/input/_calendar.scss +212 -0
- package/scss/common/theme/designer/components/input/_cascadeselect.scss +98 -0
- package/scss/common/theme/designer/components/input/_checkbox.scss +85 -0
- package/scss/common/theme/designer/components/input/_chips.scss +41 -0
- package/scss/common/theme/designer/components/input/_colorpicker.scss +19 -0
- package/scss/common/theme/designer/components/input/_dropdown.scss +136 -0
- package/scss/common/theme/designer/components/input/_editor.scss +122 -0
- package/scss/common/theme/designer/components/input/_inputgroup.scss +69 -0
- package/scss/common/theme/designer/components/input/_inputmask.scss +3 -0
- package/scss/common/theme/designer/components/input/_inputnumber.scss +3 -0
- package/scss/common/theme/designer/components/input/_inputswitch.scss +58 -0
- package/scss/common/theme/designer/components/input/_inputtext.scss +97 -0
- package/scss/common/theme/designer/components/input/_listbox.scss +82 -0
- package/scss/common/theme/designer/components/input/_multiselect.scss +164 -0
- package/scss/common/theme/designer/components/input/_password.scss +33 -0
- package/scss/common/theme/designer/components/input/_radiobutton.scss +78 -0
- package/scss/common/theme/designer/components/input/_rating.scss +48 -0
- package/scss/common/theme/designer/components/input/_selectbutton.scss +50 -0
- package/scss/common/theme/designer/components/input/_slider.scss +69 -0
- package/scss/common/theme/designer/components/input/_togglebutton.scss +48 -0
- package/scss/common/theme/designer/components/input/_treeselect.scss +89 -0
- package/scss/common/theme/designer/components/menu/_breadcrumb.scss +42 -0
- package/scss/common/theme/designer/components/menu/_contextmenu.scss +50 -0
- package/scss/common/theme/designer/components/menu/_dock.scss +51 -0
- package/scss/common/theme/designer/components/menu/_megamenu.scss +102 -0
- package/scss/common/theme/designer/components/menu/_menu.scss +41 -0
- package/scss/common/theme/designer/components/menu/_menubar.scss +179 -0
- package/scss/common/theme/designer/components/menu/_panelmenu.scss +137 -0
- package/scss/common/theme/designer/components/menu/_slidemenu.scss +55 -0
- package/scss/common/theme/designer/components/menu/_steps.scss +55 -0
- package/scss/common/theme/designer/components/menu/_tabmenu.scss +49 -0
- package/scss/common/theme/designer/components/menu/_tieredmenu.scss +56 -0
- package/scss/common/theme/designer/components/messages/_inlinemessage.scss +64 -0
- package/scss/common/theme/designer/components/messages/_message.scss +102 -0
- package/scss/common/theme/designer/components/messages/_toast.scss +95 -0
- package/scss/common/theme/designer/components/misc/_avatar.scss +30 -0
- package/scss/common/theme/designer/components/misc/_badge.scss +48 -0
- package/scss/common/theme/designer/components/misc/_blockui.scss +3 -0
- package/scss/common/theme/designer/components/misc/_chip.scss +36 -0
- package/scss/common/theme/designer/components/misc/_inplace.scss +17 -0
- package/scss/common/theme/designer/components/misc/_progressbar.scss +17 -0
- package/scss/common/theme/designer/components/misc/_scrolltop.scss +20 -0
- package/scss/common/theme/designer/components/misc/_skeleton.scss +8 -0
- package/scss/common/theme/designer/components/misc/_tag.scss +33 -0
- package/scss/common/theme/designer/components/misc/_terminal.scss +11 -0
- package/scss/common/theme/designer/components/multimedia/_galleria.scss +141 -0
- package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +67 -0
- package/scss/common/theme/designer/components/overlay/_dialog.scss +63 -0
- package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +62 -0
- package/scss/common/theme/designer/components/overlay/_sidebar.scss +27 -0
- package/scss/common/theme/designer/components/overlay/_tooltip.scss +33 -0
- package/scss/common/theme/designer/components/panel/_accordion.scss +119 -0
- package/scss/common/theme/designer/components/panel/_card.scss +30 -0
- package/scss/common/theme/designer/components/panel/_divider.scss +31 -0
- package/scss/common/theme/designer/components/panel/_fieldset.scss +47 -0
- package/scss/common/theme/designer/components/panel/_panel.scss +42 -0
- package/scss/common/theme/designer/components/panel/_scrollpanel.scss +6 -0
- package/scss/common/theme/designer/components/panel/_splitter.scss +19 -0
- package/scss/common/theme/designer/components/panel/_tabview.scss +66 -0
- package/scss/common/theme/designer/components/panel/_toolbar.scss +10 -0
- package/scss/common/theme/extensions/_button.scss +99 -0
- package/scss/common/theme/extensions/_calendar.scss +18 -0
- package/scss/common/theme/extensions/_card.scss +6 -0
- package/scss/common/theme/extensions/_carousel.scss +13 -0
- package/scss/common/theme/extensions/_checkbox.scss +10 -0
- package/scss/common/theme/extensions/_contextmenu.scss +16 -0
- package/scss/common/theme/extensions/_datatable.scss +83 -0
- package/scss/common/theme/extensions/_dialog.scss +14 -0
- package/scss/common/theme/extensions/_fieldset.scss +6 -0
- package/scss/common/theme/extensions/_galleria.scss +25 -0
- package/scss/common/theme/extensions/_megamenu.scss +18 -0
- package/scss/common/theme/extensions/_menu.scss +14 -0
- package/scss/common/theme/extensions/_menubar.scss +14 -0
- package/scss/common/theme/extensions/_orderlist.scss +38 -0
- package/scss/common/theme/extensions/_paginator.scss +19 -0
- package/scss/common/theme/extensions/_panelmenu.scss +20 -0
- package/scss/common/theme/extensions/_password.scss +5 -0
- package/scss/common/theme/extensions/_picklist.scss +38 -0
- package/scss/common/theme/extensions/_radiobutton.scss +8 -0
- package/scss/common/theme/extensions/_sidebar.scss +19 -0
- package/scss/common/theme/extensions/_slidemenu.scss +10 -0
- package/scss/common/theme/extensions/_slider.scss +6 -0
- package/scss/common/theme/extensions/_steps.scss +50 -0
- package/scss/common/theme/extensions/_tieredmenu.scss +14 -0
- package/scss/common/theme/extensions/_toast.scss +6 -0
- package/scss/common/theme/extensions/_tree.scss +36 -0
- package/scss/common/theme/extensions/_treetable.scss +35 -0
- package/scss/common/theme/extensions/_vendor_extensions.scss +27 -0
- package/scss/common/variables/layout/_common.scss +10 -0
- package/scss/common/variables/layout/_layout_dark.scss +70 -0
- package/scss/common/variables/layout/_layout_light.scss +70 -0
- package/scss/common/variables/theme/_theme_dark.scss +897 -0
- package/scss/common/variables/theme/_theme_light.scss +885 -0
- package/scss/layout/default/_mng-variables-layout-dark.scss +2 -0
- package/scss/layout/default/_mng-variables-layout-light.scss +2 -0
- package/scss/layout/default/layout-dark.scss +2 -0
- package/scss/layout/default/layout-light.scss +2 -0
- package/scss/mng-commons-dark.scss +10 -0
- package/scss/mng-commons-light.scss +13 -0
- package/scss/mng-overrides/_layout_action.scss +3 -0
- package/scss/mng-overrides/_layout_dialog.scss +34 -0
- package/scss/mng-overrides/_layout_forms.scss +31 -0
- package/scss/mng-overrides/_layout_radio.scss +3 -0
- package/scss/mng-overrides/_layout_styles.scss +4 -0
- package/scss/mng-overrides/_theme_datatable.scss +9 -0
- package/scss/mng-overrides/_theme_dialog.scss +9 -0
- package/scss/mng-overrides/_theme_dropdown.scss +6 -0
- package/scss/mng-overrides/_theme_styles.scss +9 -0
- package/scss/mng-overrides/_theme_tableview.scss +94 -0
- package/scss/theme/default/_mng-variables-theme-dark.scss +8 -0
- package/scss/theme/default/_mng-variables-theme-light.scss +8 -0
- package/scss/theme/default/theme-dark.scss +2 -0
- package/scss/theme/default/theme-light.scss +2 -0
- package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +0 -26
- package/esm2020/lib/components/layout/app.footer.component.mjs +0 -35
- package/esm2020/lib/components/layout/app.main.component.mjs +0 -25
- package/esm2020/lib/components/layout/app.main.component.service.mjs +0 -133
- package/esm2020/lib/components/layout/app.menu.component.mjs +0 -24
- package/esm2020/lib/components/layout/app.menuitem.component.mjs +0 -241
- package/esm2020/lib/components/layout/app.topbar.component.mjs +0 -135
- package/esm2020/lib/services/breadcrumb.service.mjs +0 -74
- package/esm2020/lib/services/menu.service.mjs +0 -37
- package/esm2020/lib/services/settings.service.mjs +0 -81
- package/lib/components/layout/app.breadcrumb.component.d.ts +0 -14
- package/lib/components/layout/app.footer.component.d.ts +0 -8
- package/lib/components/layout/app.main.component.d.ts +0 -12
- package/lib/components/layout/app.main.component.service.d.ts +0 -40
- package/lib/components/layout/app.menu.component.d.ts +0 -15
- package/lib/components/layout/app.menuitem.component.d.ts +0 -31
- package/lib/components/layout/app.topbar.component.d.ts +0 -15
- package/lib/services/breadcrumb.service.d.ts +0 -15
- package/lib/services/menu.service.d.ts +0 -16
- package/lib/services/settings.service.d.ts +0 -30
- package/mediusinc-mng-commons-0.0.1-rc.4.tgz +0 -0
|
@@ -3,6 +3,7 @@ import { LookupDataProvider, TableviewDataProvider } from '../../models/provider
|
|
|
3
3
|
import { ModelDescriptor } from '../../models/descriptors';
|
|
4
4
|
import { FieldValidator } from '../../models/validators';
|
|
5
5
|
import { ObjectSerializer } from '../../api/utils';
|
|
6
|
+
import { ModelUtil } from '../../utils';
|
|
6
7
|
export class EditorDescriptor {
|
|
7
8
|
constructor(modelType, idProperty, titleProperty) {
|
|
8
9
|
this._tabs = [];
|
|
@@ -363,11 +364,15 @@ export class FieldInputDescriptor extends AFieldDescriptor {
|
|
|
363
364
|
export class FieldLookupDescriptor extends AFieldDescriptor {
|
|
364
365
|
constructor(editor, property, modelType) {
|
|
365
366
|
super(editor, property);
|
|
366
|
-
this.
|
|
367
|
+
this._lookupType = FieldLookupDescriptor.LookupTypeEnum.Dropdown;
|
|
367
368
|
this._modelType = modelType;
|
|
369
|
+
ModelUtil.trySetLookupItemsProperties(this);
|
|
368
370
|
}
|
|
369
|
-
get
|
|
370
|
-
return this.
|
|
371
|
+
get modelType() {
|
|
372
|
+
return this._modelType;
|
|
373
|
+
}
|
|
374
|
+
get lookupType() {
|
|
375
|
+
return this._lookupType;
|
|
371
376
|
}
|
|
372
377
|
get itemsLabelProperty() {
|
|
373
378
|
return this._itemsLabelProperty;
|
|
@@ -407,13 +412,13 @@ export class FieldLookupDescriptor extends AFieldDescriptor {
|
|
|
407
412
|
return this;
|
|
408
413
|
}
|
|
409
414
|
asAutocomplete() {
|
|
410
|
-
this.
|
|
415
|
+
this._lookupType = FieldLookupDescriptor.LookupTypeEnum.Autocomplete;
|
|
411
416
|
return this;
|
|
412
417
|
}
|
|
413
418
|
copy() {
|
|
414
419
|
const field = new FieldLookupDescriptor(this._editor, this._property, this._modelType);
|
|
415
420
|
this.copyFieldsTo(field);
|
|
416
|
-
field.
|
|
421
|
+
field._lookupType = this._lookupType;
|
|
417
422
|
field._itemsLabelProperty = this._itemsLabelProperty;
|
|
418
423
|
field._itemsValueProperty = this._itemsValueProperty;
|
|
419
424
|
field._dataKeyProperty = this._dataKeyProperty;
|
|
@@ -422,11 +427,11 @@ export class FieldLookupDescriptor extends AFieldDescriptor {
|
|
|
422
427
|
}
|
|
423
428
|
}
|
|
424
429
|
(function (FieldLookupDescriptor) {
|
|
425
|
-
let
|
|
426
|
-
(function (
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
})(
|
|
430
|
+
let LookupTypeEnum;
|
|
431
|
+
(function (LookupTypeEnum) {
|
|
432
|
+
LookupTypeEnum[LookupTypeEnum["Dropdown"] = 0] = "Dropdown";
|
|
433
|
+
LookupTypeEnum[LookupTypeEnum["Autocomplete"] = 1] = "Autocomplete";
|
|
434
|
+
})(LookupTypeEnum = FieldLookupDescriptor.LookupTypeEnum || (FieldLookupDescriptor.LookupTypeEnum = {}));
|
|
430
435
|
})(FieldLookupDescriptor || (FieldLookupDescriptor = {}));
|
|
431
436
|
export class FieldLookupEnumDescriptor extends FieldLookupDescriptor {
|
|
432
437
|
constructor(editor, property, enumName, options) {
|
|
@@ -443,7 +448,7 @@ export class FieldLookupEnumDescriptor extends FieldLookupDescriptor {
|
|
|
443
448
|
copy() {
|
|
444
449
|
const field = new FieldLookupEnumDescriptor(this._editor, this._property, this._enumName, []);
|
|
445
450
|
this.copyFieldsTo(field);
|
|
446
|
-
field.
|
|
451
|
+
field._lookupType = this._lookupType;
|
|
447
452
|
field._itemsLabelProperty = this._itemsLabelProperty;
|
|
448
453
|
field._itemsValueProperty = this._itemsValueProperty;
|
|
449
454
|
field._dataKeyProperty = this._dataKeyProperty;
|
|
@@ -663,4 +668,4 @@ export class FieldGroupDescriptor extends AFieldGroupDescriptor {
|
|
|
663
668
|
return group;
|
|
664
669
|
}
|
|
665
670
|
}
|
|
666
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWRlc2NyaXB0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9kZXNjcmlwdG9ycy9lZGl0b3ItZGVzY3JpcHRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBMEMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxSCxPQUFPLEVBQUMsZUFBZSxFQUF1QyxNQUFNLDBCQUEwQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBYXpCLFlBQVksU0FBdUIsRUFBRSxVQUFtQixFQUFFLGFBQXNCO1FBUi9ELFVBQUssR0FBc0MsRUFBRSxDQUFDO1FBQzlDLFlBQU8sR0FBbUMsRUFBRSxDQUFDO1FBQzdDLFlBQU8sR0FBb0MsRUFBRSxDQUFDO1FBSXZELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIs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O0lBRW5FLFlBQVksTUFBNEIsRUFBRSxJQUFZO1FBQ2xELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQTJDLENBQUM7SUFDNUQsQ0FBQztJQUVNLFNBQVM7UUFDWixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQWdDO1FBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxJQUFJO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bU1lbWJlclR5cGV9IGZyb20gJy4uLy4uL21vZGVscy90eXBlcyc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlciwgTG9va3VwRGF0YVByb3ZpZGVyLCBUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL21vZGVscy9wcm92aWRlcnMnO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3IsIFRhYmxlRGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vbW9kZWxzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7RmllbGRWYWxpZGF0b3J9IGZyb20gJy4uLy4uL21vZGVscy92YWxpZGF0b3JzJztcblxuaW1wb3J0IHtRdWVyeVBhcmFtLCBRdWVyeVJlc3VsdH0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge09iamVjdFNlcmlhbGl6ZXJ9IGZyb20gJy4uLy4uL2FwaS91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdEdyb3VwTmFtZSA9ICdfZGVmYXVsdCc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyb3VwczogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8VD4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmllbGRzOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJpdmF0ZSBfY3VycmVudFRhYkdyb3VwPzogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfY3VycmVudEdyb3VwPzogRmllbGRHcm91cERlc2NyaXB0b3I8VD47XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFicygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUYWJHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICB0YWJHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRhYkdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgZmllbGRHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiBmaWVsZEdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RlQ+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZULCBUPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQocHJvcGVydHk6IHN0cmluZyk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8VD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgJHtwcm9wZXJ0eX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZmllbGRJZHhdO1xuICAgICAgICBpZiAoZmllbGQuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBmaWVsZC5ncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+fG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPEZUPik6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8RlQsIFQ+KHRoaXMsIHByb3BlcnR5LCBtb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtKHByb3BlcnR5OiBzdHJpbmcsIG9wdGlvbnM6IEFycmF5PEVudW1NZW1iZXJUeXBlPik6IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBwcm9wRGVmID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kQXR0cmlidXRlRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHRoaXMubW9kZWwudHlwZSwgcHJvcGVydHkpO1xuICAgICAgICBpZiAoIXByb3BEZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgKGF0dHJpYnV0ZSkgZGVmaW5pdGlvbiBub3QgZm91bmQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9IG9uIGNsYXNzIHR5cGUgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnVtRGVmID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShwcm9wRGVmLnR5cGUpO1xuICAgICAgICBpZiAoIWVudW1EZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW51bSBkZWZpbml0aW9uICR7cHJvcERlZi50eXBlfSBub3QgZm91bmQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9IG9uIGNsYXNzIHR5cGUgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCBwcm9wRGVmLnR5cGUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPEZUPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBDbGFzc1R5cGU8RlQ+LCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPEZUPik6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgdHlwZSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENsYXNzVHlwZTxGVD4sIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxGVD4sIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPEZUPik6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgdHlwZSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3I8VD4odGhpcy5tb2RlbC50eXBlLCB0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiB0aGlzLl90YWJzKSB7XG4gICAgICAgICAgICBlZGl0b3IuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwLmNvcHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiBlZGl0b3IuX3RhYnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRHcm91cCBvZiB0YWJHcm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuX2ZpZWxkcy5wdXNoKC4uLmZpZWxkR3JvdXAuZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5fZ3JvdXBzLnB1c2goLi4udGFiR3JvdXAuZmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cCA9IGVkaXRvci5fdGFic1tlZGl0b3IuX3RhYnMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fY3VycmVudEdyb3VwID0gZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzW2VkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRUYWJHcm91cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+KSB7XG4gICAgICAgIHRoaXMuX2VkaXRvciA9IGVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ncm91cD86IEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD47XG4gICAgcHJvdGVjdGVkIF9sYWJlbD86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHByb3RlY3RlZCBfZ2V0dGVyPzogKGl0ZW06IEVUKSA9PiBUO1xuICAgIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVULCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PEZpZWxkVmFsaWRhdG9yPiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB0aGlzLl9lZGl0b3IubW9kZWwudHlwZU5hbWUgKyAnLnByb3BlcnRpZXMuJyArIHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+O1xuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBsYWJlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gcmVxdWlyZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHZXR0ZXIoZ2V0dGVyOiAoaXRlbTogRVQpID0+IFQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihzZXR0ZXI6IChpdGVtOiBFVCwgdmFsdWU6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogKGVycjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2gobmV3IEZpZWxkVmFsaWRhdG9yKG5hbWUsIGV4cHJlc3Npb24sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX3JlcXVpcmVkID0gdGhpcy5fcmVxdWlyZWQ7XG4gICAgICAgIG9iai5fZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX3NldHRlciA9IHRoaXMuX3NldHRlcjtcbiAgICAgICAgb2JqLl92YWxpZGF0b3JzID0gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZElucHV0RGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxEYXRlLCBFVD4ge1xuXG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHQ7XG5cbiAgICAvLyB0ZXh0YXJlYSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfcm93cz86IG51bWJlcjtcblxuICAgIC8vIG51bWJlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfbnVtYmVyTWluPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9udW1iZXJTdGVwPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuXG4gICAgLy8gcmFkaW8gc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX3JhZGlvT3B0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgLy8gZGF0ZXBpY2tlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlckZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWluPzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWF4PzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyU2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGlucHV0IHNwZWNpZmljXG4gICAgcHJpdmF0ZSBfbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX21pbkxlbmd0aD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9wYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclN0ZXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJTdGVwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhZGlvT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvT3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlck1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1RleHQobWluTGVuZ3RoPzogbnVtYmVyLCBtYXhMZW5ndGg/OiBudW1iZXIsIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uVGV4dDtcbiAgICAgICAgdGhpcy5fbWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgICAgIHRoaXMuX3BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNUZXh0YXJlYShyb3dzOiBudW1iZXIgPSAzKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHRhcmVhO1xuICAgICAgICB0aGlzLl9yb3dzID0gcm93cztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKHN0ZXA/OiBudW1iZXIsIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBtaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlciwgbWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9udW1iZXJTdGVwID0gc3RlcDtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPSBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluID0gbWluID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXggPSBtYXggPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1N3aXRjaCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uU3dpdGNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNSYWRpbyhvcHRpb25zOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlJhZGlvO1xuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEYXRlUGlja2VyKGZvcm1hdD86IHN0cmluZywgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSwgc2hvd1RpbWU/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQgPyBmb3JtYXQgOiAnZGQubW0ueXknO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWluID0gbWluO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWUgPSBzaG93VGltZSA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9yb3dzID0gdGhpcy5fcm93cztcbiAgICAgICAgZmllbGQuX251bWJlck1pbiA9IHRoaXMuX251bWJlck1pbjtcbiAgICAgICAgZmllbGQuX251bWJlck1heCA9IHRoaXMuX251bWJlck1heDtcbiAgICAgICAgZmllbGQuX251bWJlclN0ZXAgPSB0aGlzLl9udW1iZXJTdGVwO1xuICAgICAgICBmaWVsZC5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZmllbGQuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGZpZWxkLl9yYWRpb09wdGlvbnMgPSB0aGlzLl9yYWRpb09wdGlvbnM7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyRm9ybWF0ID0gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJNaW4gPSB0aGlzLl9kYXRlUGlja2VyTWluO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlck1heCA9IHRoaXMuX2RhdGVQaWNrZXJNYXg7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyU2hvd1RpbWUgPSB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgICAgIGZpZWxkLl9tYXhMZW5ndGggPSB0aGlzLl9tYXhMZW5ndGg7XG4gICAgICAgIGZpZWxkLl9taW5MZW5ndGggPSB0aGlzLl9taW5MZW5ndGg7XG4gICAgICAgIGZpZWxkLl9wYXR0ZXJuID0gdGhpcy5fcGF0dGVybjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRJbnB1dERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFR5cGVFbnVtIHtcbiAgICAgICAgVGV4dCxcbiAgICAgICAgVGV4dGFyZWEsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgU3dpdGNoLFxuICAgICAgICBSYWRpbyxcbiAgICAgICAgRGF0ZXBpY2tlclxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGw7XG4gICAgcHJvdGVjdGVkIF9maWVsZFR5cGU6IEZpZWxkTG9va3VwRGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkTG9va3VwRGVzY3JpcHRvci5UeXBlRW51bS5Ecm9wZG93bjtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55PjtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eShpdGVtc0xhYmVsUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHkgPSBpdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNWYWx1ZVByb3BlcnR5KGl0ZW1zVmFsdWVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IGl0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEYXRhS2V5UHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXA8Uz4obG9va3VwOiAocXVlcnlQYXJhbT86IFF1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTLCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8VD4+LCBzZXJ2aWNlVHlwZT86IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlcjxULCBTPih0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoU2VydmljZVR5cGUoc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFQcm92aWRlci53aXRoTG9va3VwKGxvb2t1cCk7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNBdXRvY29tcGxldGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkTG9va3VwRGVzY3JpcHRvci5UeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkTG9va3VwRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBEcm9wZG93bixcbiAgICAgICAgQXV0b2NvbXBsZXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBGaWVsZExvb2t1cERlc2NyaXB0b3I8RW51bU1lbWJlclR5cGUsIEVUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbnVtTmFtZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgZW51bU5hbWU6IHN0cmluZywgb3B0aW9uczogQXJyYXk8RW51bU1lbWJlclR5cGU+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHksIG51bGwpO1xuXG4gICAgICAgIHRoaXMuX2VudW1OYW1lID0gZW51bU5hbWU7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8RW51bU1lbWJlclR5cGUsIGFueT4obnVsbClcbiAgICAgICAgICAgIC53aXRoRW51bU5hbWUoZW51bU5hbWUpXG4gICAgICAgICAgICAud2l0aExvb2t1cCgoKSA9PiBvZihvcHRpb25zKSk7XG4gICAgICAgIHRoaXMud2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX2VudW1OYW1lLCBbXSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2ZpZWxkVHlwZSA9IHRoaXMuX2ZpZWxkVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4ge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIG1haW4gdGFibGUgY29tcG9uZW50XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHdoZXJlIHNlbGVjdCB3aWxsIGJlIGFwcGxpZWRcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0gPSBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLlR5cGVFbnVtLkRpYWxvZ1RhYmxlTXVsdGlzZWxlY3Q7XG4gICAgcHJpdmF0ZSBfbG9va3VwVGFibGVEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXTtcbiAgICBwcml2YXRlIF9oYXNMb29rdXBFeGNsdWRlVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZUZpbHRlclByb3BlcnR5OiBzdHJpbmcgPSAnJztcbiAgICBwcml2YXRlIF9leGNsdWRlVmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiwgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+LCBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IgPSBtYWluVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uQWRkLCBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRGVsZXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1haW5UYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTG9va3VwRXhjbHVkZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlRmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGdldEFsbDogKHF1ZXJ5UGFyYW06IFF1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFF1ZXJ5UmVzdWx0PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWwudHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhHZXRBbGwoZ2V0QWxsKTtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9ucyhhY3Rpb25zOiBBcnJheTxGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0+ID0gW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goLi4uYWN0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRXhjbHVkZShmaWx0ZXJQcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZVByb3BlcnR5OiBzdHJpbmcsIGhhc0xvb2t1cEV4Y2x1ZGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSBoYXNMb29rdXBFeGNsdWRlO1xuICAgICAgICB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fZXhjbHVkZVZhbHVlUHJvcGVydHkgPSB2YWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbW9kZWwudHlwZSwgdGhpcy5fbWFpblRhYmxlRGVzY3JpcHRvci5jb3B5KCksIHRoaXMuX2xvb2t1cFRhYmxlRGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9hY3Rpb25zID0gdGhpcy5fYWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXI7XG4gICAgICAgIGZpZWxkLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gdGhpcy5faGFzTG9va3VwRXhjbHVkZVZhbHVlcztcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5ID0gdGhpcy5fZXhjbHVkZVZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBEaWFsb2dUYWJsZU11bHRpc2VsZWN0XG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gQWN0aW9uRW51bSB7XG4gICAgICAgIEFkZCxcbiAgICAgICAgRGVsZXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgX2ZpZWxkVHlwZTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0uRGlhbG9nRWRpdG9yO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IgPSB0YWJsZXZpZXdEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkFkZCwgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkVkaXQsIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5EZWxldGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGV2aWV3RGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLnRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yQ3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5hZGRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JSZWFkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci52aWV3RWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5lZGl0RWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25zKGFjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5hY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX21vZGVsVHlwZSwgdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9hY3Rpb25zID0gdGhpcy5fYWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIERpYWxvZ0VkaXRvclxuICAgIH1cblxuICAgIGV4cG9ydCBlbnVtIEFjdGlvbkVudW0ge1xuICAgICAgICBBZGQsXG4gICAgICAgIEVkaXQsXG4gICAgICAgIERlbGV0ZVxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZWZhdWx0OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdID0gW107XG4gICAgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxGaWVsZFZhbGlkYXRvcj4gPSBbXTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IGAke3RoaXMuYmFzZU5hbWV9JHtuYW1lfWA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHQgPSBuYW1lID09PSBFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWU7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IGZpZWxkcygpOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXTtcblxuICAgIGFic3RyYWN0IGdyb3VwTmFtZSgpOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBhZGRGaWVsZChmaWVsZDogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+KTogdGhpcztcblxuICAgIGFic3RyYWN0IGNvcHkoKTogQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPjtcblxuICAgIHB1YmxpYyBnZXQgYmFzZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3VwTmFtZSgpfV9gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0b3IobmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMucHVzaChuZXcgRmllbGRWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZHMoKTogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAndGFiJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IHRhYiA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIHRhYi5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgdGFiLl9maWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2dyb3VwJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBncm91cCA9IG5ldyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIGdyb3VwLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBncm91cC5fZmllbGRzID0gdGhpcy5maWVsZHMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxufVxuIl19
|
|
671
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWRlc2NyaXB0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9kZXNjcmlwdG9ycy9lZGl0b3ItZGVzY3JpcHRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBMEMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxSCxPQUFPLEVBQUMsZUFBZSxFQUF1QyxNQUFNLDBCQUEwQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBR3RDLE1BQU0sT0FBTyxnQkFBZ0I7SUFhekIsWUFBWSxTQUF1QixFQUFFLFVBQW1CLEVBQUUsYUFBc0I7UUFSL0QsVUFBSyxHQUFzQyxFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFtQyxFQUFFLENBQUM7UUFDN0MsWUFBTyxHQUFvQyxFQUFFLENBQUM7UUFJdkQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUcvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcs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QUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLG9CQUF5QixTQUFRLHFCQUF5QjtJQUVuRSxZQUFZLE1BQTRCLEVBQUUsSUFBWTtRQUNsRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUEyQyxDQUFDO0lBQzVELENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFnQztRQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sSUFBSTtRQUNQLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDcEcsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1NZW1iZXJUeXBlfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBJVGFibGVEYXRhUHJvdmlkZXIsIExvb2t1cERhdGFQcm92aWRlciwgVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvdmlkZXJzJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3IsIFRhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL21vZGVscy9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdG9yfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFsaWRhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlSZXN1bHR9IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi8uLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtNb2RlbFV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7SUxvb2t1cH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdEdyb3VwTmFtZSA9ICdfZGVmYXVsdCc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyb3VwczogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8VD4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmllbGRzOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJpdmF0ZSBfY3VycmVudFRhYkdyb3VwPzogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfY3VycmVudEdyb3VwPzogRmllbGRHcm91cERlc2NyaXB0b3I8VD47XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFicygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUYWJHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICB0YWJHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRhYkdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgZmllbGRHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiBmaWVsZEdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RlQ+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZULCBUPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQocHJvcGVydHk6IHN0cmluZyk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8VD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgJHtwcm9wZXJ0eX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZmllbGRJZHhdO1xuICAgICAgICBpZiAoZmllbGQuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBmaWVsZC5ncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+fG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPEZUPik6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8RlQsIFQ+KHRoaXMsIHByb3BlcnR5LCBtb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtKHByb3BlcnR5OiBzdHJpbmcsIG9wdGlvbnM6IEFycmF5PEVudW1NZW1iZXJUeXBlPik6IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBwcm9wRGVmID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kQXR0cmlidXRlRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHRoaXMubW9kZWwudHlwZSwgcHJvcGVydHkpO1xuICAgICAgICBpZiAoIXByb3BEZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgKGF0dHJpYnV0ZSkgZGVmaW5pdGlvbiBub3QgZm91bmQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9IG9uIGNsYXNzIHR5cGUgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnVtRGVmID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShwcm9wRGVmLnR5cGUpO1xuICAgICAgICBpZiAoIWVudW1EZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW51bSBkZWZpbml0aW9uICR7cHJvcERlZi50eXBlfSBub3QgZm91bmQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9IG9uIGNsYXNzIHR5cGUgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCBwcm9wRGVmLnR5cGUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPEZUPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBDbGFzc1R5cGU8RlQ+LCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPEZUPik6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgdHlwZSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENsYXNzVHlwZTxGVD4sIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxGVD4sIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPEZUPik6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgdHlwZSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3I8VD4odGhpcy5tb2RlbC50eXBlLCB0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiB0aGlzLl90YWJzKSB7XG4gICAgICAgICAgICBlZGl0b3IuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwLmNvcHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiBlZGl0b3IuX3RhYnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRHcm91cCBvZiB0YWJHcm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuX2ZpZWxkcy5wdXNoKC4uLmZpZWxkR3JvdXAuZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5fZ3JvdXBzLnB1c2goLi4udGFiR3JvdXAuZmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cCA9IGVkaXRvci5fdGFic1tlZGl0b3IuX3RhYnMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fY3VycmVudEdyb3VwID0gZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzW2VkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRUYWJHcm91cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+KSB7XG4gICAgICAgIHRoaXMuX2VkaXRvciA9IGVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ncm91cD86IEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD47XG4gICAgcHJvdGVjdGVkIF9sYWJlbD86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHByb3RlY3RlZCBfZ2V0dGVyPzogKGl0ZW06IEVUKSA9PiBUO1xuICAgIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVULCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PEZpZWxkVmFsaWRhdG9yPiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB0aGlzLl9lZGl0b3IubW9kZWwudHlwZU5hbWUgKyAnLnByb3BlcnRpZXMuJyArIHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+O1xuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBsYWJlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gcmVxdWlyZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHZXR0ZXIoZ2V0dGVyOiAoaXRlbTogRVQpID0+IFQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihzZXR0ZXI6IChpdGVtOiBFVCwgdmFsdWU6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogKGVycjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2gobmV3IEZpZWxkVmFsaWRhdG9yKG5hbWUsIGV4cHJlc3Npb24sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX3JlcXVpcmVkID0gdGhpcy5fcmVxdWlyZWQ7XG4gICAgICAgIG9iai5fZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX3NldHRlciA9IHRoaXMuX3NldHRlcjtcbiAgICAgICAgb2JqLl92YWxpZGF0b3JzID0gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZElucHV0RGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxEYXRlLCBFVD4ge1xuXG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHQ7XG5cbiAgICAvLyB0ZXh0YXJlYSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfcm93cz86IG51bWJlcjtcblxuICAgIC8vIG51bWJlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfbnVtYmVyTWluPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9udW1iZXJTdGVwPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuXG4gICAgLy8gcmFkaW8gc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX3JhZGlvT3B0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgLy8gZGF0ZXBpY2tlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlckZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWluPzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWF4PzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyU2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGlucHV0IHNwZWNpZmljXG4gICAgcHJpdmF0ZSBfbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX21pbkxlbmd0aD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9wYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclN0ZXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJTdGVwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhZGlvT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvT3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlck1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1RleHQobWluTGVuZ3RoPzogbnVtYmVyLCBtYXhMZW5ndGg/OiBudW1iZXIsIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uVGV4dDtcbiAgICAgICAgdGhpcy5fbWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgICAgIHRoaXMuX3BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNUZXh0YXJlYShyb3dzOiBudW1iZXIgPSAzKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHRhcmVhO1xuICAgICAgICB0aGlzLl9yb3dzID0gcm93cztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKHN0ZXA/OiBudW1iZXIsIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBtaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlciwgbWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9udW1iZXJTdGVwID0gc3RlcDtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPSBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluID0gbWluID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXggPSBtYXggPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1N3aXRjaCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uU3dpdGNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNSYWRpbyhvcHRpb25zOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlJhZGlvO1xuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEYXRlUGlja2VyKGZvcm1hdD86IHN0cmluZywgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSwgc2hvd1RpbWU/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQgPyBmb3JtYXQgOiAnZGQubW0ueXknO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWluID0gbWluO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWUgPSBzaG93VGltZSA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9yb3dzID0gdGhpcy5fcm93cztcbiAgICAgICAgZmllbGQuX251bWJlck1pbiA9IHRoaXMuX251bWJlck1pbjtcbiAgICAgICAgZmllbGQuX251bWJlck1heCA9IHRoaXMuX251bWJlck1heDtcbiAgICAgICAgZmllbGQuX251bWJlclN0ZXAgPSB0aGlzLl9udW1iZXJTdGVwO1xuICAgICAgICBmaWVsZC5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZmllbGQuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGZpZWxkLl9yYWRpb09wdGlvbnMgPSB0aGlzLl9yYWRpb09wdGlvbnM7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyRm9ybWF0ID0gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJNaW4gPSB0aGlzLl9kYXRlUGlja2VyTWluO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlck1heCA9IHRoaXMuX2RhdGVQaWNrZXJNYXg7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyU2hvd1RpbWUgPSB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgICAgIGZpZWxkLl9tYXhMZW5ndGggPSB0aGlzLl9tYXhMZW5ndGg7XG4gICAgICAgIGZpZWxkLl9taW5MZW5ndGggPSB0aGlzLl9taW5MZW5ndGg7XG4gICAgICAgIGZpZWxkLl9wYXR0ZXJuID0gdGhpcy5fcGF0dGVybjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRJbnB1dERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFR5cGVFbnVtIHtcbiAgICAgICAgVGV4dCxcbiAgICAgICAgVGV4dGFyZWEsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgU3dpdGNoLFxuICAgICAgICBSYWRpbyxcbiAgICAgICAgRGF0ZXBpY2tlclxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiBpbXBsZW1lbnRzIElMb29rdXA8VD4ge1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPnxudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZTogRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtID0gRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkRyb3Bkb3duO1xuICAgIHByb3RlY3RlZCBfaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfaXRlbXNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZGF0YUtleVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZGF0YVByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD58bnVsbCkge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICBNb2RlbFV0aWwudHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc1ZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc0xhYmVsUHJvcGVydHkoaXRlbXNMYWJlbFByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5ID0gaXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eShpdGVtc1ZhbHVlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSBpdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGxvb2t1cDogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUHJvdmlkZXIud2l0aExvb2t1cChsb29rdXApO1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZExvb2t1cERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIExvb2t1cFR5cGVFbnVtIHtcbiAgICAgICAgRHJvcGRvd24sXG4gICAgICAgIEF1dG9jb21wbGV0ZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgRmllbGRMb29rdXBEZXNjcmlwdG9yPEVudW1NZW1iZXJUeXBlLCBFVD4ge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW51bU5hbWU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIGVudW1OYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFycmF5PEVudW1NZW1iZXJUeXBlPikge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5LCBudWxsKTtcblxuICAgICAgICB0aGlzLl9lbnVtTmFtZSA9IGVudW1OYW1lO1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPEVudW1NZW1iZXJUeXBlLCBhbnk+KG51bGwpXG4gICAgICAgICAgICAud2l0aEVudW1OYW1lKGVudW1OYW1lKVxuICAgICAgICAgICAgLndpdGhMb29rdXAoKCkgPT4gb2Yob3B0aW9ucykpO1xuICAgICAgICB0aGlzLndpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1OYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtTmFtZSwgW10pO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4ge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIG1haW4gdGFibGUgY29tcG9uZW50XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHdoZXJlIHNlbGVjdCB3aWxsIGJlIGFwcGxpZWRcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0gPSBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLlR5cGVFbnVtLkRpYWxvZ1RhYmxlTXVsdGlzZWxlY3Q7XG4gICAgcHJpdmF0ZSBfbG9va3VwVGFibGVEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXTtcbiAgICBwcml2YXRlIF9oYXNMb29rdXBFeGNsdWRlVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZUZpbHRlclByb3BlcnR5OiBzdHJpbmcgPSAnJztcbiAgICBwcml2YXRlIF9leGNsdWRlVmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiwgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+LCBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IgPSBtYWluVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uQWRkLCBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRGVsZXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1haW5UYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTG9va3VwRXhjbHVkZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlRmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGdldEFsbDogKHF1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWwudHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhHZXRBbGwoZ2V0QWxsKTtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9ucyhhY3Rpb25zOiBBcnJheTxGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0+ID0gW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goLi4uYWN0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRXhjbHVkZShmaWx0ZXJQcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZVByb3BlcnR5OiBzdHJpbmcsIGhhc0xvb2t1cEV4Y2x1ZGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSBoYXNMb29rdXBFeGNsdWRlO1xuICAgICAgICB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fZXhjbHVkZVZhbHVlUHJvcGVydHkgPSB2YWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbW9kZWwudHlwZSwgdGhpcy5fbWFpblRhYmxlRGVzY3JpcHRvci5jb3B5KCksIHRoaXMuX2xvb2t1cFRhYmxlRGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9hY3Rpb25zID0gdGhpcy5fYWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXI7XG4gICAgICAgIGZpZWxkLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gdGhpcy5faGFzTG9va3VwRXhjbHVkZVZhbHVlcztcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5ID0gdGhpcy5fZXhjbHVkZVZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBEaWFsb2dUYWJsZU11bHRpc2VsZWN0XG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gQWN0aW9uRW51bSB7XG4gICAgICAgIEFkZCxcbiAgICAgICAgRGVsZXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgX2ZpZWxkVHlwZTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0uRGlhbG9nRWRpdG9yO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IgPSB0YWJsZXZpZXdEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkFkZCwgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkVkaXQsIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5EZWxldGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGV2aWV3RGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLnRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yQ3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5hZGRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JSZWFkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci52aWV3RWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5lZGl0RWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25zKGFjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5hY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX21vZGVsVHlwZSwgdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9hY3Rpb25zID0gdGhpcy5fYWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIERpYWxvZ0VkaXRvclxuICAgIH1cblxuICAgIGV4cG9ydCBlbnVtIEFjdGlvbkVudW0ge1xuICAgICAgICBBZGQsXG4gICAgICAgIEVkaXQsXG4gICAgICAgIERlbGV0ZVxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZWZhdWx0OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdID0gW107XG4gICAgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxGaWVsZFZhbGlkYXRvcj4gPSBbXTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IGAke3RoaXMuYmFzZU5hbWV9JHtuYW1lfWA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHQgPSBuYW1lID09PSBFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWU7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IGZpZWxkcygpOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXTtcblxuICAgIGFic3RyYWN0IGdyb3VwTmFtZSgpOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBhZGRGaWVsZChmaWVsZDogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+KTogdGhpcztcblxuICAgIGFic3RyYWN0IGNvcHkoKTogQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPjtcblxuICAgIHB1YmxpYyBnZXQgYmFzZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3VwTmFtZSgpfV9gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0b3IobmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMucHVzaChuZXcgRmllbGRWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZHMoKTogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAndGFiJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IHRhYiA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIHRhYi5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgdGFiLl9maWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2dyb3VwJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBncm91cCA9IG5ldyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIGdyb3VwLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBncm91cC5fZmllbGRzID0gdGhpcy5maWVsZHMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxufVxuIl19
|