@messaia/cdk 14.0.0 → 15.0.0-rc02
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/esm2020/lib/base/base.module.mjs +8 -8
- package/esm2020/lib/base/components/base.component.mjs +3 -3
- package/esm2020/lib/base/components/dynamic-table-config-dialog.comnponent.mjs +21 -21
- package/esm2020/lib/base/components/generic-form-base.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-form.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-list.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-reactive-form.component.mjs +3 -3
- package/esm2020/lib/base/interceptors/base.interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/caching-interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/loading.interceptor.mjs +3 -3
- package/esm2020/lib/base/services/file.service.mjs +3 -3
- package/esm2020/lib/base/services/loading-screen.service.mjs +3 -3
- package/esm2020/lib/base/services/print.service.mjs +3 -3
- package/esm2020/lib/chips/chips.module.mjs +4 -4
- package/esm2020/lib/chips/components/chips.component.mjs +6 -6
- package/esm2020/lib/chips/directives/autocomplete-option.directive.mjs +3 -3
- package/esm2020/lib/chips/directives/chip.directive.mjs +3 -3
- package/esm2020/lib/common/common.module.mjs +4 -4
- package/esm2020/lib/common/directives/disable-control.directive.mjs +3 -3
- package/esm2020/lib/common/functions/utils.mjs +4 -4
- package/esm2020/lib/common/helpers/app-storage.mjs +4 -4
- package/esm2020/lib/common/helpers/dynamic-builder.mjs +3 -3
- package/esm2020/lib/common/helpers/dynamic-component-compiler.mjs +3 -3
- package/esm2020/lib/common/models/app-setting.mjs +3 -3
- package/esm2020/lib/common/models/audit-entity.mjs +1 -1
- package/esm2020/lib/common/models/base-entity.mjs +1 -1
- package/esm2020/lib/common/models/displayname-number-projection.mjs +1 -1
- package/esm2020/lib/common/models/displayname-projection.mjs +1 -1
- package/esm2020/lib/common/models/name-number-projection.mjs +1 -1
- package/esm2020/lib/common/models/name-projection.mjs +1 -1
- package/esm2020/lib/common/models/title-projection.mjs +1 -1
- package/esm2020/lib/common/pipes/data-source.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/enum.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/file-size.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/filter.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/first-letter.mjs +3 -3
- package/esm2020/lib/common/pipes/form-control.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/form-group.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/func.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/keys.mjs +3 -3
- package/esm2020/lib/common/pipes/month-name.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/only-number.mjs +3 -3
- package/esm2020/lib/common/pipes/order.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/placeholder.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/safe-html.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/time.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/titlecase.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/truncate.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/values.mjs +3 -3
- package/esm2020/lib/common/services/base.service.mjs +3 -3
- package/esm2020/lib/common/services/enum.service.mjs +3 -3
- package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +18 -6
- package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +20 -6
- package/esm2020/lib/dialogs/dialog.component.mjs +12 -12
- package/esm2020/lib/dialogs/dialogs.module.mjs +4 -4
- package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +5 -5
- package/esm2020/lib/dialogs/services/dialog.service.mjs +3 -3
- package/esm2020/lib/file/file-input.component.mjs +33 -33
- package/esm2020/lib/file/file.module.mjs +4 -4
- package/esm2020/lib/form-validators/abstract/typed-form.mjs +1 -1
- package/esm2020/lib/form-validators/algorithm/luhn-algorithm.mjs +1 -1
- package/esm2020/lib/form-validators/const/app-validators.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/app.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/config-names.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/config-required-fields.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/decorators.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/events.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/html-elements.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/iban-country-wise-regex.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/index.mjs +1 -1
- package/esm2020/lib/form-validators/const/operators.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/validation-alphabet-locale.const.mjs +1 -1
- package/esm2020/lib/form-validators/const/validator.const.mjs +1 -1
- package/esm2020/lib/form-validators/core/defaultContainer.mjs +1 -1
- package/esm2020/lib/form-validators/core/validator.interface.mjs +1 -1
- package/esm2020/lib/form-validators/core/validator.static.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/allOf.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/alpha.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/alphaNumeric.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/and.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/ascii.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/async.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/base-decorator.function.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/choice.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/compare.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/compose.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/contains.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/credit-card.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/cusip.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/custom.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/dataUri.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/date.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/different.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/digit.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/email.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/endsWith.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/even.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/extension.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/factor.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/file.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/fileSize.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/greater-than-equal-to.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/greater-than.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/grid.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/hexColor.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/image.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/index.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/json.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/latLong.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/latitude.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/leapYear.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/less-than-equal-to.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/less-than.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/longitude.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/lowercase.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/mac.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/mask.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/maxDate.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/maxLength.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/maxNumber.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/maxTime.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/minDate.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/minLength.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/minNumber.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/minTime.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/model.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/disable.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/error.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/update-on.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/noneOf.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/not.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/notEmpty.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/numeric.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/odd.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/oneOf.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/or.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/password.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/pattern.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/port.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/primeNumber.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/prop-array.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/prop-object.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/prop.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/range.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/required.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/requiredTrue.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/rule.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/blacklist.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/escape.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/ltrim.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/prefix.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/rtrim.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/sanitize.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/stripLow.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/suffix.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toBoolean.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toDate.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toDouble.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toFloat.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toInt.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/toString.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/trim.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/sanitize/whitelist.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/startsWith.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/time.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/unique.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/uppercase.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/decorators/url.decorator.mjs +1 -1
- package/esm2020/lib/form-validators/directives/base-directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/control-host.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +4 -4
- package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +4 -4
- package/esm2020/lib/form-validators/domain/disable-provider.mjs +1 -1
- package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +4 -4
- package/esm2020/lib/form-validators/domain/element-processor/mask.provider.mjs +1 -1
- package/esm2020/lib/form-validators/domain/form-data.mjs +1 -1
- package/esm2020/lib/form-validators/enums/error-message-binding-strategy.mjs +1 -1
- package/esm2020/lib/form-validators/enums/index.mjs +1 -1
- package/esm2020/lib/form-validators/enums/ip-version.mjs +1 -1
- package/esm2020/lib/form-validators/enums/numeric-value-type.mjs +1 -1
- package/esm2020/lib/form-validators/enums/reset-type.mjs +1 -1
- package/esm2020/lib/form-validators/enums/url-validation-type.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/alpha-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/array-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/base-config-fn.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/base-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/base-date-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/choice-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/compare-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/component-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/compose-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/contains-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/credit-card-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/custom-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/date-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/default-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/digit-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/disable-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/element-class-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/email-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/error-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/extension-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/factor-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/field-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/file-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/hex-color-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/iban-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/image-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/index.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/ip-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/logical-operator-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/mask-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/max-date-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/message-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/min-date-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/model-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/number-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/numeric-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/password-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/pattern-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/prop-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/props-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/range-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/relational-operator-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/required-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/rule-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/sanitize-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/size-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/string-comparison-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/string-value-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/time-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/todate-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/unique-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/update-on-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/config/url-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/form-builder-configuration.mjs +1 -1
- package/esm2020/lib/form-validators/models/index.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/array-prop-instance-config.interface.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/auto-instance-config.interface.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/form-data-config.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/i-abstract-control.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/i-form-group.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/instance-argument.interface.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/object-prop-instance-config.interface.mjs +1 -1
- package/esm2020/lib/form-validators/models/interface/options.mjs +1 -1
- package/esm2020/lib/form-validators/models/password-validation.model.mjs +1 -1
- package/esm2020/lib/form-validators/models/prop-validation-config.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/allOf.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/alpha.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/alphaNumeric.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/and.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/ascii.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/choice.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/compare.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/compose.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/conditional-change.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/contains.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/cusip.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/custom.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/dataUri.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/date.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/different.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/digit.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/email.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/even.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/extension.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/factor.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/file.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/greater-than.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/grid.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/hexcolor.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/iban.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/image.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/index.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/ip.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/json.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/latLong.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/latitude.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/less-than.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/longitude.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/mac.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/mask.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/maxDate.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/maxTime.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/minDate.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/minLength.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/minTime.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/not.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/numeric.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/odd.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/or.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/password.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/pattern.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/port.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/range.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/required.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/rule.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/time.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/unique.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +1 -1
- package/esm2020/lib/form-validators/reactive-form-validators/url.validator.mjs +1 -1
- package/esm2020/lib/form-validators/services/base-form-builder.mjs +1 -1
- package/esm2020/lib/form-validators/services/entity.service.mjs +1 -1
- package/esm2020/lib/form-validators/services/form-control.mjs +1 -1
- package/esm2020/lib/form-validators/services/form-group.mjs +1 -1
- package/esm2020/lib/form-validators/services/reactive-form.module.mjs +9 -9
- package/esm2020/lib/form-validators/services/rx-form-array.mjs +1 -1
- package/esm2020/lib/form-validators/services/rx-form-builder.mjs +4 -4
- package/esm2020/lib/form-validators/services/rx-form-group.mjs +1 -1
- package/esm2020/lib/form-validators/services/typed-form-builder.mjs +4 -4
- package/esm2020/lib/form-validators/util/alphabet-regex.locale.mjs +1 -1
- package/esm2020/lib/form-validators/util/app-util.mjs +1 -1
- package/esm2020/lib/form-validators/util/check-length.mjs +1 -1
- package/esm2020/lib/form-validators/util/config-provider.mjs +1 -1
- package/esm2020/lib/form-validators/util/date-checker.function.mjs +1 -1
- package/esm2020/lib/form-validators/util/date-provider.mjs +1 -1
- package/esm2020/lib/form-validators/util/form-const.mjs +1 -1
- package/esm2020/lib/form-validators/util/form-provider.mjs +1 -1
- package/esm2020/lib/form-validators/util/index.mjs +1 -1
- package/esm2020/lib/form-validators/util/instance-provider.function.mjs +1 -1
- package/esm2020/lib/form-validators/util/ip-checker.mjs +1 -1
- package/esm2020/lib/form-validators/util/linq.mjs +1 -1
- package/esm2020/lib/form-validators/util/object-maker.mjs +1 -1
- package/esm2020/lib/form-validators/util/reactive-form-config.mjs +1 -1
- package/esm2020/lib/form-validators/util/regex-rules.mjs +1 -1
- package/esm2020/lib/form-validators/util/regex-validator.mjs +1 -1
- package/esm2020/lib/form-validators/util/relational-checker.function.mjs +1 -1
- package/esm2020/lib/form-validators/util/reset-form.mjs +1 -1
- package/esm2020/lib/form-validators/util/sanitizers.mjs +1 -1
- package/esm2020/lib/form-validators/util/time-checker.function.mjs +1 -1
- package/esm2020/lib/form-validators/util/type.mjs +1 -1
- package/esm2020/lib/form-validators/util/validator-value-checker.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/allOf-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/alpha-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/alphaNumeric-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/and-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/ascii-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/base-validator.function.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/choice-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/compare-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/compose-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/contains-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/credit-card-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/cusip-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/custom-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/dataUri-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/date-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/different-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/digit-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/email-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/endsWith-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/even-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/extension-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/factor-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/file-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/fileSize-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/greater-than-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/grid-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/hexcolor-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/iban-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/image-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/index.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/ip-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/json-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/latLong-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/latitude-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/leapYear-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/less-than-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/longitude-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/lowercase-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/mac-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/mask-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/maxDate-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/maxLength-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/maxNumber-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/maxTime-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/minDate-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/minLength-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/minNumber-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/minTime-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/noneOf-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/not-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/notEmpty-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/numeric-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/odd-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/oneOf-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/or-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/password-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/pattern-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/port-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/primeNumber-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/range-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/required-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/requiredTrue-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/rxweb-validators.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/startsWith-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/time-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/unique-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/uppercase-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-extension/url-validator.extension.mjs +1 -1
- package/esm2020/lib/form-validators/validators-function/alpha-validation.function.mjs +1 -1
- package/esm2020/lib/form-validators/validators-function/regex-validation.function.mjs +1 -1
- package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +17 -17
- package/esm2020/lib/forms/directives/mat-form-field-editor.directive.mjs +3 -3
- package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +3 -3
- package/esm2020/lib/forms/forms.module.mjs +4 -4
- package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +17 -7
- package/esm2020/lib/forms/helpers/value-accessor-base.mjs +3 -3
- package/esm2020/lib/forms/models/form-field-definition.mjs +1 -1
- package/esm2020/lib/forms/validators/empty-string-reset.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/equal-validator.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/unique-validator-directive.mjs +3 -3
- package/esm2020/lib/http/http.module.mjs +4 -4
- package/esm2020/lib/layout/dynamic-menu/dynamic-menu.component.mjs +3 -3
- package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +5 -5
- package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +3 -3
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +4 -4
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +3 -3
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +3 -3
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-toggle.class.mjs +3 -3
- package/esm2020/lib/layout/layout.component.mjs +3 -3
- package/esm2020/lib/layout/layout.directives.mjs +9 -9
- package/esm2020/lib/layout/layout.module.mjs +4 -4
- package/esm2020/lib/layout/list-toolbar/list-toolbar.component.mjs +3 -3
- package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +10 -10
- package/esm2020/lib/media/directives/media-toggle.directive.mjs +3 -3
- package/esm2020/lib/media/media.module.mjs +4 -4
- package/esm2020/lib/media/services/media.service.mjs +3 -3
- package/esm2020/lib/menu/components/menu.component.mjs +6 -7
- package/esm2020/lib/menu/menu.module.mjs +4 -4
- package/esm2020/lib/menu/models/menu-item.mjs +1 -1
- package/esm2020/lib/menu/models/menu.mjs +1 -1
- package/esm2020/lib/menu/services/menu-items.service.mjs +3 -3
- package/esm2020/lib/menu/services/menu.resolve.mjs +6 -6
- package/esm2020/lib/menu/services/menu.service.mjs +3 -3
- package/esm2020/lib/search/search.module.mjs +4 -4
- package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +4 -4
- package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +7 -7
- package/esm2020/lib/select/components/select.component.mjs +36 -10
- package/esm2020/lib/select/directives/vd-select-option.directive.mjs +3 -3
- package/esm2020/lib/select/directives/vd-select-trigger.directive.mjs +3 -3
- package/esm2020/lib/select/select.module.mjs +4 -4
- package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +5 -5
- package/esm2020/lib/table/components/filter-clear.component.mjs +10 -10
- package/esm2020/lib/table/components/filter-date.component.mjs +28 -19
- package/esm2020/lib/table/components/filter-input.component.mjs +31 -20
- package/esm2020/lib/table/components/filter-select.component.mjs +41 -15
- package/esm2020/lib/table/directives/data-source-filter.directive.mjs +3 -3
- package/esm2020/lib/table/functions/decorators.mjs +2 -2
- package/esm2020/lib/table/models/table-column-config.mjs +1 -1
- package/esm2020/lib/table/paginator-intl.mjs +3 -3
- package/esm2020/lib/table/table.module.mjs +4 -4
- package/fesm2015/messaia-cdk.mjs +682 -573
- package/fesm2015/messaia-cdk.mjs.map +1 -1
- package/fesm2020/messaia-cdk.mjs +683 -574
- package/fesm2020/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/base.component.d.ts +1 -1
- package/lib/base/components/dynamic-table-config-dialog.comnponent.d.ts +1 -1
- package/lib/base/components/generic-form-base.component.d.ts +1 -1
- package/lib/base/components/generic-form.component.d.ts +1 -1
- package/lib/base/components/generic-list.component.d.ts +1 -1
- package/lib/base/components/generic-reactive-form.component.d.ts +1 -1
- package/lib/chips/components/chips.component.d.ts +1 -1
- package/lib/chips/directives/autocomplete-option.directive.d.ts +1 -1
- package/lib/chips/directives/chip.directive.d.ts +1 -1
- package/lib/common/directives/disable-control.directive.d.ts +1 -1
- package/lib/common/functions/utils.d.ts +1 -1
- package/lib/common/helpers/app-storage.d.ts +1 -1
- package/lib/common/pipes/only-number.d.ts +1 -1
- package/lib/common/pipes/order.pipe.d.ts +1 -1
- package/lib/common/styles/_common-theme.scss +8 -7
- package/lib/common/styles/_layout.scss +1 -1
- package/lib/common/styles/core/_button.scss +1 -1
- package/lib/common/styles/core/_card.scss +40 -36
- package/lib/common/styles/core/_icons.scss +2 -1
- package/lib/common/styles/core/_sidenav.scss +2 -1
- package/lib/common/styles/utilities/_general.scss +197 -31
- package/lib/common/theming/_all-theme.scss +4 -0
- package/lib/dialogs/alert-dialog/alert-dialog.component.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/lib/dialogs/dialog.component.d.ts +4 -4
- package/lib/dialogs/prompt-dialog/prompt-dialog.component.d.ts +1 -1
- package/lib/file/file-input.component.d.ts +1 -1
- package/lib/form-validators/directives/base-directive.d.ts +1 -1
- package/lib/form-validators/directives/control-host.directive.d.ts +1 -1
- package/lib/form-validators/directives/html-control-template.directive.d.ts +1 -1
- package/lib/form-validators/directives/rx-form.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/file-control.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/image-file-control.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/rxformcontrol.directive.d.ts +1 -1
- package/lib/forms/components/generic-form/generic-form.component.d.ts +5 -5
- package/lib/forms/directives/mat-form-field-editor.directive.d.ts +1 -1
- package/lib/forms/directives/mat-form-field-readonly.directive.d.ts +1 -1
- package/lib/forms/helpers/abstract-mat-form-field.d.ts +8 -3
- package/lib/forms/helpers/value-accessor-base.d.ts +1 -1
- package/lib/forms/models/form-field-definition.d.ts +3 -0
- package/lib/forms/validators/empty-string-reset.directive.d.ts +1 -1
- package/lib/forms/validators/equal-validator.directive.d.ts +1 -1
- package/lib/forms/validators/native-element-injector.directive.d.ts +1 -1
- package/lib/forms/validators/unique-validator-directive.d.ts +1 -1
- package/lib/layout/_layout-theme.scss +133 -2
- package/lib/layout/dynamic-menu/dynamic-menu.component.d.ts +1 -1
- package/lib/layout/layout-card-over/layout-card-over.component.d.ts +1 -1
- package/lib/layout/layout-footer/layout-footer.component.d.ts +1 -1
- package/lib/layout/layout-manage-list/layout-manage-list.component.d.ts +1 -1
- package/lib/layout/layout-manage-list/layout-manage-list.directives.d.ts +3 -3
- package/lib/layout/layout-nav/layout-nav.component.d.ts +1 -1
- package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +1 -1
- package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +3 -3
- package/lib/layout/layout-toggle.class.d.ts +1 -1
- package/lib/layout/layout.component.d.ts +1 -1
- package/lib/layout/layout.directives.d.ts +3 -3
- package/lib/layout/list-toolbar/list-toolbar.component.d.ts +1 -1
- package/lib/layout/navigation-drawer/navigation-drawer.component.d.ts +3 -3
- package/lib/media/directives/media-toggle.directive.d.ts +1 -1
- package/lib/menu/components/menu.component.d.ts +1 -1
- package/lib/search/vd-search-box/vd-search-box.component.d.ts +1 -1
- package/lib/search/vd-search-input/vd-search-input.component.d.ts +1 -1
- package/lib/select/components/select.component.d.ts +22 -5
- package/lib/select/directives/vd-select-option.directive.d.ts +1 -1
- package/lib/select/directives/vd-select-trigger.directive.d.ts +1 -1
- package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +1 -1
- package/lib/table/components/filter-clear.component.d.ts +1 -1
- package/lib/table/components/filter-date.component.d.ts +10 -1
- package/lib/table/components/filter-input.component.d.ts +10 -1
- package/lib/table/components/filter-select.component.d.ts +11 -2
- package/lib/table/directives/data-source-filter.directive.d.ts +1 -1
- package/package.json +1 -1
|
@@ -543,9 +543,9 @@ export class RxFormBuilder extends BaseFormBuilder {
|
|
|
543
543
|
});
|
|
544
544
|
}
|
|
545
545
|
}
|
|
546
|
-
/** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
547
|
-
/** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
548
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
546
|
+
/** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: RxFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
547
|
+
/** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: RxFormBuilder });
|
|
548
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: RxFormBuilder, decorators: [{
|
|
549
549
|
type: Injectable
|
|
550
550
|
}], ctorParameters: function () { return []; } });
|
|
551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkksT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFD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QUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztZQUM1RSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDUCxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDZixJQUFJLFVBQVU7d0JBQ1YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0o7Z0JBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7NkhBdGlCUSxhQUFhO2lJQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sT3B0aW9ucywgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBCT09MRUFOLCBGVU5DVElPTl9TVFJJTkcsIE1PREVMLCBOVU1CRVIsIE9CSkVDVF9QUk9QRVJUWSwgT0JKRUNUX1NUUklORywgUFJPUEVSVFksIFJYX1dFQl9WQUxJREFUT1IsIFNUUklORyB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IHsgQVBQX1ZBTElEQVRPUlMgfSBmcm9tICcuLi9jb25zdC9hcHAtdmFsaWRhdG9ycy5jb25zdCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29udGFpbmVyIH0gZnJvbSAnLi4vY29yZS9kZWZhdWx0Q29udGFpbmVyJztcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIi4uL2NvcmUvdmFsaWRhdG9yLnN0YXRpY1wiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbCB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlL2ktYWJzdHJhY3QtY29udHJvbFwiO1xuaW1wb3J0IHsgQXBwRm9ybUdyb3VwIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZmFjZS9pLWZvcm0tZ3JvdXAnO1xuaW1wb3J0IHsgUHJvcFZhbGlkYXRpb25Db25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb3AtdmFsaWRhdGlvbi1jb25maWdcIjtcbmltcG9ydCB7IGFuZFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9hbmQudmFsaWRhdG9yJztcbmltcG9ydCB7IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBub3RWYWxpZGF0b3IgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvbm90LnZhbGlkYXRvcic7XG5pbXBvcnQgeyBvclZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9vci52YWxpZGF0b3InO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBMaW5xIH0gZnJvbSAnLi4vdXRpbC9saW5xJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gJy4uL3V0aWwvcmVhY3RpdmUtZm9ybS1jb25maWcnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vdXRpbC9yZWdleC12YWxpZGF0b3JcIjtcbmltcG9ydCB7IEJhc2VGb3JtQnVpbGRlciB9IGZyb20gJy4vYmFzZS1mb3JtLWJ1aWxkZXInO1xuaW1wb3J0IHsgUnhGb3JtQ29udHJvbCB9IGZyb20gJy4vZm9ybS1jb250cm9sJztcbmltcG9ydCB7IFJ4Rm9ybUFycmF5IH0gZnJvbSAnLi9yeC1mb3JtLWFycmF5JztcbmltcG9ydCB7IFJ4Rm9ybUdyb3VwIH0gZnJvbSAnLi9yeC1mb3JtLWdyb3VwJztcblxuY29uc3QgTE9HSUNBTF9WQUxJREFUT1JTOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0gPSB7IGFuZDogYW5kVmFsaWRhdG9yLCBvcjogb3JWYWxpZGF0b3IsIG5vdDogbm90VmFsaWRhdG9yIH1cbmNvbnN0IEFTWU5DOiBzdHJpbmcgPSBcImFzeW5jXCJcbmNvbnN0IEVOVElUWV9PQkpFQ1Q6IHN0cmluZyA9IFwiZW50aXR5T2JqZWN0XCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSeEZvcm1CdWlsZGVyIGV4dGVuZHMgQmFzZUZvcm1CdWlsZGVyIHtcbiAgICBwcml2YXRlIGNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSBidWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBmb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0dyb3VwQ2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc05lc3RlZEJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5zdGFuY2VDb250YWluZXIoaW5zdGFuY2VGdW5jOiBhbnksIGVudGl0eU9iamVjdDogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YWNlUHJvdmlkZXIoaW5zdGFuY2VGdW5jLCBlbnRpdHlPYmplY3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdEV4cHJlc3Npb25zKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHtcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGRlY29yYXRvciBpbiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XVtkZWNvcmF0b3JdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmFkZENoYW5nZVZhbGlkYXRpb24odGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSwgcHJvcGVydHksIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQXN5bmNWYWxpZGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eUluZm8sIHByb3BlcnR5VmFsaWRhdG9yczogRGVjb3JhdG9yQ29uZmlndXJhdGlvbltdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcpIHtcbiAgICAgICAgbGV0IGFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eVZhbGlkYXRvciBvZiBwcm9wZXJ0eVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3IuaXNBc3luYylcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcbiAgICAgICAgICAgIHByb3BWYWxpZGF0aW9uQ29uZmlnW0FTWU5DXS5mb3JFYWNoKHQgPT4geyBhc3luY1ZhbGlkYXRvcnMucHVzaCh0KSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbXTtcbiAgICAgICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKVxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCB8fCB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgcHJvcENvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5wcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0LnByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpLmZvckVhY2godCA9PiBwcm9wQ29uZGl0aW9ucy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHByb3BDb25kaXRpb25zLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godC5yZWZlcmVuY2VQcm9wTmFtZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IoY29sdW1ucykpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbGlkYXRvci5pc0FzeW5jKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLCBlbnRpdHkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMub3I6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLm5vdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWcpXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRvcnMsIHByb3BWYWxpZGF0aW9uQ29uZmlnKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4geyB2YWxpZGF0b3JzLnB1c2godCk7IH0pXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkaXRpb25hbFZhbGlkYXRpb24odmFsaWRhdGlvbnM6IGFueVtdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcgfCBhbnkpIHtcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xuICAgICAgICAgICAgaWYgKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSAmJiBjb2wgIT0gXCJjdXN0b21cIikge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2goQVBQX1ZBTElEQVRPUlNbQW5ub3RhdGlvblR5cGVzW2NvbF1dKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sID09IEFubm90YXRpb25UeXBlcy5jdXN0b20gJiYgcHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gocHJvcFZhbGlkYXRpb25Db25maWdbY29sXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgICAgICAgcmV0dXJuIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXSlcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdLmNvbnN0cnVjdG9yO1xuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV1bMF0uY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eShvYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHlJbmZvLm5hbWUpXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICB2YXIgcHJvcHMgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzLmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSB8fCB0LnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSlcbiAgICAgICAgcHJvcHMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcbiAgICAgICAgICAgIGlmICghdC5lbnRpdHkpXG4gICAgICAgICAgICAgICAgZW50aXR5ID0gdGhpcy5nZXRPYmplY3RQcm9wZXJ0eUluc3RhbmNlKG9iamVjdCwgdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2VDb250YWluZXIoZW50aXR5LCBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5uYW1lID09IGtleSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5wcm9wZXJ0eVR5cGUgIT0gQVJSQVlfUFJPUEVSVFkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignW10nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBsZXQganNvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxuICAgICAgICAgICAganNvbi5tb2RlbCA9IG1vZGVsO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwgZW50aXR5T2JqZWN0KVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSBlbnRpdHlPYmplY3Q7XG5cbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBlbnRpdHlPYmplY3Q7XG4gICAgICAgIGVsc2UgaWYgKCEoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBqc29uLmVudGl0eU9iamVjdClcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKCFlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcbiAgICAgICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcbiAgICAgICAgICAgIGpzb25bTU9ERUxdID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uW0VOVElUWV9PQkpFQ1RdID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWwpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG4gICAgY29udHJvbCh2YWx1ZT86IGFueSwgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW10sIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yRm5bXSk6IElBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gbmV3IFJ4Rm9ybUNvbnRyb2wodmFsdWUsIHsgdmFsaWRhdG9yczogdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzOiBhc3luY1ZhbGlkYXRvcnMgfSwge30sIHt9LCAnJywgW10pO1xuICAgIH1cblxuICAgIGFycmF5KHZhbHVlczogW3sgW2tleTogc3RyaW5nXTogYW55IH1dLCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuZ3JvdXAoeyB0ZW1wOiB2YWx1ZXMgfSwgdmFsaWRhdG9yQ29uZmlnKS5nZXQoXCJ0ZW1wXCIpIGFzIEZvcm1BcnJheTtcbiAgICAgICAgdmFyIGZvcm1CdWlsZGVyID0gbmV3IEZvcm1CdWlsZGVyKCk7XG4gICAgICAgIHJldHVybiBmb3JtQnVpbGRlci5hcnJheShmb3JtQXJyYXkuY29udHJvbHMpO1xuICAgIH1cblxuICAgIGdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBGb3JtR3JvdXAge1xuICAgICAgICBsZXQgbW9kZWxJbnN0YW5jZSA9IHN1cGVyLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICAgIGxldCBlbnRpdHlPYmplY3QgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I7XG4gICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0LCBlbnRpdHlPYmplY3QsIG1vZGVsSW5zdGFuY2UsIHZhbGlkYXRvckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLmlzR3JvdXBDYWxsZWQgPSB0cnVlO1xuICAgICAgICBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAobW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgZW50aXR5T2JqZWN0LCB2YWxpZGF0b3JDb25maWcpO1xuICAgICAgICB0aGlzLmlzR3JvdXBDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsSW5zdGFuY2U6IGFueSkge1xuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnICYmIHZhbGlkYXRvckNvbmZpZy5hcHBseUFsbFByb3BzKSB7XG4gICAgICAgICAgICBpZiAoISh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzICYmIHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMubGVuZ3RoID4gMCAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmluZGV4T2YocHJvcE5hbWUpID09IC0xKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvckNvbmZpZy5hcHBseUFsbFByb3BzLmZvckVhY2goKHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodC5uYW1lID09IFJYX1dFQl9WQUxJREFUT1IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQocHJvcE5hbWUsIG1vZGVsSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXS5wdXNoKHQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkeW5hbWljVmFsaWRhdGlvblByb3BDaGVjayhwcm9wTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICByZXR1cm4gKHZhbGlkYXRvckNvbmZpZyA9PSB1bmRlZmluZWQpID8gdHJ1ZSA6ICghdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSkgPyB0cnVlIDogdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSA9PSBwcm9wTmFtZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm90T2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9IE9CSkVDVF9TVFJJTkc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbW9kZWxJbnN0YW5jZTogYW55LCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBncm91cE9iamVjdCkge1xuXG4gICAgICAgICAgICB2YXIgcHJvcCA9IGdyb3VwT2JqZWN0W3Byb3BOYW1lXTtcbiAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgQXJyYXkgJiYgcHJvcC5sZW5ndGggPiAwICYmIHRoaXMuaXNOb3RPYmplY3QocHJvcFswXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFZhbGlkYXRvcnMgPSAocHJvcC5sZW5ndGggPiAxICYmIHByb3BbMV0gaW5zdGFuY2VvZiBBcnJheSkgPyBwcm9wWzFdIDogKHByb3AubGVuZ3RoID09IDIpID8gW3Byb3BbMV1dIDogW107XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5QWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsaWRhdG9yc1tpXS5uYW1lID09IFJYX1dFQl9WQUxJREFUT1IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BWYWxpZGF0b3JzW2ldKHByb3BOYW1lLCBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0ucHVzaChwcm9wVmFsaWRhdG9yc1tpXSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5QWRkZWQpXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gbnVsbCB8fCBwcm9wID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHByb3AgPT0gU1RSSU5HIHx8IHR5cGVvZiBwcm9wID09IE5VTUJFUiB8fCB0eXBlb2YgcHJvcCA9PSBCT09MRUFOIHx8IHByb3AgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIFBST1BFUlRZLCB1bmRlZmluZWQsIHR5cGVvZiBtb2RlbEluc3RhbmNlID09IE9CSkVDVF9TVFJJTkcgPyBtb2RlbEluc3RhbmNlIDogeyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnLCBtb2RlbEluc3RhbmNlKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcE1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA9IG1vZGVsSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBBUlJBWV9QUk9QRVJUWSwgcHJvcE1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIG1vZGVsSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgak9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5wdXNoKGpPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChyb3csIGpPYmplY3QsIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCB2YWxpZGF0b3JDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3AgPT0gT0JKRUNUX1NUUklORyAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkpIHtcblxuICAgICAgICAgICAgICAgIGxldCBmb3JtR3JvdXA6IGFueSA9IChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSA/IHByb3AuY29udHJvbHNbMF0gOiBwcm9wXG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAubW9kZWwgJiYgKHByb3AgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAgPSB0aGlzLmdyb3VwKGZvcm1Hcm91cC5jb250cm9scyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIE9CSkVDVF9QUk9QRVJUWSwgZm9ybUdyb3VwLm1vZGVsLCBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBBUlJBWV9QUk9QRVJUWSwgZm9ybUdyb3VwLm1vZGVsLCBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5keW5hbWljVmFsaWRhdGlvblByb3BDaGVjayhwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcE1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3RvciA9IHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIE9CSkVDVF9QUk9QRVJUWSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3RvciwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA9PSBGdW5jdGlvbiA/IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSA6IG1vZGVsSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbGlkYXRpb25Db25maWcgPSB0aGlzLmdldFZhbGlkYXRvckNvbmZpZyh2YWxpZGF0b3JDb25maWcsIGdyb3VwT2JqZWN0LCBwcm9wTmFtZSArIFwiLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBncm91cE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT0gU1RSSU5HIHx8IHR5cGVvZiBwcm9wID09IE5VTUJFUiB8fCB0eXBlb2YgcHJvcCA9PSBCT09MRUFOIHx8IHByb3AgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9wICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pICYmICEocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSkge1xuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wWzBdXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkYXRvckNvbmZpZyh2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgZW50aXR5T2JqZWN0OiBhbnksIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgYXJyYXlQcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgZXhjbHVkZVByb3BzID0gW107XG4gICAgICAgIGxldCBpbmNsdWRlUHJvcHMgPSBbXTtcbiAgICAgICAgbGV0IGlnbm9yZVVuZGVmaW5lZFByb3BzID0gW107XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0b3JDb25maWcpIHJldHVybiB7fTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvcHMgPSB0aGlzLmdldE9iamVjdEZvclByb3BlcnR5KHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbiwgcm9vdFByb3BlcnR5TmFtZSwgYXJyYXlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9ucywgcm9vdFByb3BlcnR5TmFtZSwgYXJyYXlQcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzKVxuICAgICAgICAgICAgZXhjbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5pbmNsdWRlUHJvcHMpXG4gICAgICAgICAgICBpbmNsdWRlUHJvcHMgPSB0aGlzLmdldFByb3BzKHZhbGlkYXRvckNvbmZpZy5pbmNsdWRlUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmlnbm9yZVVuZGVmaW5lZFByb3BzKVxuICAgICAgICAgICAgaWdub3JlVW5kZWZpbmVkUHJvcHMgPSB0aGlzLmdldFByb3BzKHZhbGlkYXRvckNvbmZpZy5pZ25vcmVVbmRlZmluZWRQcm9wcywgcm9vdFByb3BlcnR5TmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoYWJzdHJhY3RDb250cm9sT3B0aW9ucykubGVuZ3RoICYmIHJvb3RQcm9wZXJ0eU5hbWUuZW5kc1dpdGgoJy4nKSAmJiB2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiB2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9uc1tyb290UHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCByb290UHJvcGVydHlOYW1lLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddID0gdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV07XG5cbiAgICAgICAgY29uc3QgZHluYW1pY1ZhbGlkYXRpb24gPSAodmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSAmJiBlbnRpdHlPYmplY3RbdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZV0pID8gZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdIDogdmFsaWRhdGlvblByb3BzO1xuICAgICAgICByZXR1cm4geyBpZ25vcmVVbmRlZmluZWRQcm9wczogaWdub3JlVW5kZWZpbmVkUHJvcHMsIGluY2x1ZGVQcm9wczogaW5jbHVkZVByb3BzLCBkeW5hbWljVmFsaWRhdGlvbjogZHluYW1pY1ZhbGlkYXRpb24sIGV4Y2x1ZGVQcm9wczogZXhjbHVkZVByb3BzLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBhYnN0cmFjdENvbnRyb2xPcHRpb25zIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9iamVjdEZvclByb3BlcnR5PFQ+KHJvb3RPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogVCB9LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgcHJvcE5hbWUgaW4gcm9vdE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wTmFtZS5zdGFydHNXaXRoKHJvb3RQcm9wZXJ0eU5hbWUpICYmICghYXJyYXlQcm9wZXJ0eU5hbWUgfHwgIXByb3BOYW1lLnN0YXJ0c1dpdGgoYXJyYXlQcm9wZXJ0eU5hbWUpKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBzcGxpdFByb3AgPSBwcm9wTmFtZS5zcGxpdChcIi5cIiwgMilbMV07XG4gICAgICAgICAgICBpZiAoIXNwbGl0UHJvcClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHJlc3VsdFtzcGxpdFByb3BdID0gcm9vdE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcHMocHJvcGVydGllczogc3RyaW5nW10sIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNJZ25vcmVQcm9wOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHByb3BzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChwcm9wLmluZGV4T2Yocm9vdFByb3BlcnR5TmFtZSkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXRQcm9wcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wc1sxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdFByb3BzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wcy5qb2luKFwiLlwiKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSWdub3JlUHJvcCAmJiBwcm9wZXJ0aWVzLmZpbHRlcih4ID0+IHggPT0gcm9vdFByb3BlcnR5TmFtZS5yZXBsYWNlKCcuJywgJycpKS5sZW5ndGggPT0gMSlcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xuXG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBmb3JtR3JvdXA8VD4obW9kZWw6IFR5cGU8VD4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBSeEZvcm1Hcm91cCB8IEZvcm1Hcm91cCB8IEFwcEZvcm1Hcm91cDxUPiB7XG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgbW9kZWwgPSBqc29uLm1vZGVsO1xuICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdDtcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XG4gICAgICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMudXBkYXRlT2JqZWN0KG1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEV4cHJlc3Npb25zKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xuICAgICAgICB0aGlzLmNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uKGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBmb3JtR3JvdXBPYmplY3QgPSB7fTtcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xuICAgICAgICB2YXIgYWRkaXRpb25hbFZhbGlkYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IFByb3BWYWxpZGF0aW9uQ29uZmlnIH0gPSB7fTtcbiAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgICAgIGxldCBpc0luY2x1ZGVQcm9wID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmluZGV4T2YocHJvcGVydHkubmFtZSkgPT0gLTFcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVmFsaWRhdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpICE9IC0xXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gIShwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gUFJPUEVSVFkgJiYgIVJlZ2V4VmFsaWRhdG9yLmlzTm90QmxhbmsoanNvbi5lbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0pICYmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPT0gLTEgfHwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmlnbm9yZVVuZGVmaW5lZFByb3BzLmluZGV4T2YoXCI6c2VsZjpcIikgIT09IC0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkuaWdub3JlKVxuICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhcHJvcGVydHkuaWdub3JlLmNhbGwoanNvbi5lbnRpdHlPYmplY3QsIGpzb24uZW50aXR5T2JqZWN0KTtcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5VmFsaWRhdG9ycyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnR5QW5ub3RhdGlvbnMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eU5hbWUgPT0gcHJvcGVydHkubmFtZSAmJiB0LmlzVmFsaWRhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlT24gPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0eUFubm90YXRpb25zLmZpbHRlcih0ID0+IHQucHJvcGVydHlOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgIXQuaXNWYWxpZGF0b3IgJiYgdC5hbm5vdGF0aW9uVHlwZSA9PT0gXCJ1cGRhdGVPblwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2FuaXRpemVWYWx1ZSA9IHN1cGVyLnNhbml0aXplVmFsdWUoaW5zdGFuY2VDb250YWluZXIsIHByb3BlcnR5Lm5hbWUsIHN1cGVyLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pLCBqc29uLmVudGl0eU9iamVjdCwgT2JqZWN0LmFzc2lnbih7fSwganNvbi5lbnRpdHlPYmplY3QpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID09PSB1bmRlZmluZWQgJiYgc2FuaXRpemVWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc2FuaXRpemVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9ycyA9IHRoaXMuYWRkRm9ybUNvbnRyb2wocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdLCBpbnN0YW5jZUNvbnRhaW5lciwgZW50aXR5T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWJzdHJhY3RDb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHsgdmFsaWRhdG9yczogdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmFkZEFzeW5jVmFsaWRhdGlvbihwcm9wZXJ0eSwgcHJvcGVydHlWYWxpZGF0b3JzLCBhZGRpdGlvbmFsVmFsaWRhdGlvbnNbcHJvcGVydHkubmFtZV0pIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZU9uICYmICFhYnN0cmFjdENvbnRyb2xPcHRpb25zLnVwZGF0ZU9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zLnVwZGF0ZU9uID0gdXBkYXRlT24uY29uZmlnLnJ1bk9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IG5ldyBSeEZvcm1Db250cm9sKHNhbml0aXplVmFsdWUsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCksIHByb3BlcnR5Lm5hbWUsIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHkubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHN1cGVyLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRQcm9wZXJ0aWVzW3Byb3BlcnR5Lm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE9CSkVDVF9QUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RWYWx1ZSAmJiBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKG9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IG9iamVjdFZhbHVlIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIgJiYgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbGlkYXRpb25Db25maWcgPSB0aGlzLmdldFZhbGlkYXRvckNvbmZpZyhmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG9iamVjdFZhbHVlLCBgJHtwcm9wZXJ0eS5uYW1lfS5gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlciA/IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSB0aGlzLmZvcm1Hcm91cChlbnRpdHkgfHwgcHJvcGVydHkuZW50aXR5IHx8IHRoaXMuZ2V0RW50aXR5KG9iamVjdFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBvYmplY3RWYWx1ZSwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBvYmplY3RWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1BST1BFUlRZOlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5T2JqZWN0VmFsdWUgPSBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPYmplY3RWYWx1ZSAmJiBhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgIShhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWRCaW5kaW5nID0gdGhpcy5pc05lc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1BcnJheUdyb3VwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbGlkYXRpb25Db25maWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1Yk9iamVjdCBvZiBhcnJheU9iamVjdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lciAmJiBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbE9iamVjdFByb3BzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgdC5hcnJheUluZGV4ID09IGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgdC5hcnJheUluZGV4ID09IGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFZhbGlkYXRpb25Db25maWcgPSB0aGlzLmdldFZhbGlkYXRvckNvbmZpZyhmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHN1Yk9iamVjdCwgYCR7cHJvcGVydHkubmFtZX0uYCwgYCR7cHJvcGVydHkubmFtZX1bJHtpbmRleH1dLmApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BcnJheUdyb3VwLnB1c2godGhpcy5mb3JtR3JvdXAoZW50aXR5IHx8IHByb3BlcnR5LmVudGl0eSB8fCB0aGlzLmdldEVudGl0eShzdWJPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHkubmFtZSwgdHJ1ZSksIHN1Yk9iamVjdCwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMocHJvcGVydHkubmFtZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3RpdmVGb3JtQ29uZmlnLmF1dG9JbnN0YW5jZVB1c2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5wdXNoID0gKGluc3RhbmNlOiBhbnlbXSk6IG51bWJlciA9PiB7IGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cChpbnN0YW5jZS5jb25zdHJ1Y3RvciwgaW5zdGFuY2UsIG9iamVjdFZhbGlkYXRpb25Db25maWcpOyBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucHVzaChmb3JtR3JvdXAsIHsgaXNBZGRlZEluc3RhbmNlOiB0cnVlIH0pOyByZXR1cm4gMDsgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZCA9IChzdGFydCArIGRlbGV0ZUNvdW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBhcnJheU9iamVjdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuYXJyYXlDb25maWcgJiYgcHJvcGVydHkuYXJyYXlDb25maWcuY3JlYXRlQmxhbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlID0ge307XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zID0ge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogW10sXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxuICAgICAgICAgICAgdXBkYXRlT246IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ11cbiAgICAgICAgICAgICAgICA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMoXCJnbG9iYWxcIiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb250YWluZXIuaXNFeHBlcmltZW50YWwpIHtcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0W1wiZm9ybUdyb3VwXCJdID0gZm9ybUdyb3VwO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNOZXN0ZWRCaW5kaW5nICYmICF0aGlzLmlzR3JvdXBDYWxsZWQpXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcblxuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wZXJ0aWVzKGZvcm1Hcm91cDogUnhGb3JtR3JvdXAsIGVudGl0eU9iamVjdDogYW55LCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3AoZW50aXR5T2JqZWN0LCB0LCBmb3JtR3JvdXApO1xuICAgICAgICB9KVxuICAgIH1cbiAgICBwcml2YXRlIGdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMobmFtZTogc3RyaW5nLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucykge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdKVxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmJhc2VBYnN0cmFjdENvbnRyb2xPcHRpb25zIDogbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0udXBkYXRlT24pXG4gICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGNvbnRyb2xPcHRpb25zW25hbWVdLnVwZGF0ZU9uO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpLmZvckVhY2godmFsaWRhdG9yID0+ICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2godmFsaWRhdG9yKSlcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYnN0cmFjdENvbnRyb2xPcHRpb25zO1xuICAgIH1cbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBSeEZvcm1Hcm91cCkge1xuICAgICAgICBsZXQgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVudGl0eU9iamVjdCksIHByb3BOYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudGl0eU9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXG4gICAgICAgICAgICBzZXQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChlbnRpdHlPYmplY3QsIHYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdLnNldFZhbHVlKHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkksT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFD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QUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztZQUM1RSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDUCxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDZixJQUFJLFVBQVU7d0JBQ1YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0o7Z0JBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7NkhBdGlCUSxhQUFhO2lJQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBUlJBWV9QUk9QRVJUWSwgQk9PTEVBTiwgRlVOQ1RJT05fU1RSSU5HLCBNT0RFTCwgTlVNQkVSLCBPQkpFQ1RfUFJPUEVSVFksIE9CSkVDVF9TVFJJTkcsIFBST1BFUlRZLCBSWF9XRUJfVkFMSURBVE9SLCBTVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgQVBQX1ZBTElEQVRPUlMgfSBmcm9tICcuLi9jb25zdC9hcHAtdmFsaWRhdG9ycy5jb25zdCc7XHJcbmltcG9ydCB7IGRlZmF1bHRDb250YWluZXIgfSBmcm9tICcuLi9jb3JlL2RlZmF1bHRDb250YWluZXInO1xyXG5pbXBvcnQgeyBEZWNvcmF0b3JDb25maWd1cmF0aW9uLCBJbnN0YW5jZUNvbnRhaW5lciwgUHJvcGVydHlJbmZvIH0gZnJvbSAnLi4vY29yZS92YWxpZGF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIi4uL2NvcmUvdmFsaWRhdG9yLnN0YXRpY1wiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IElBYnN0cmFjdENvbnRyb2wgfSBmcm9tIFwiLi4vbW9kZWxzL2ludGVyZmFjZS9pLWFic3RyYWN0LWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgQXBwRm9ybUdyb3VwIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZmFjZS9pLWZvcm0tZ3JvdXAnO1xyXG5pbXBvcnQgeyBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcHJvcC12YWxpZGF0aW9uLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBhbmRWYWxpZGF0b3IgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvYW5kLnZhbGlkYXRvcic7XHJcbmltcG9ydCB7IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7IG5vdFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9ub3QudmFsaWRhdG9yJztcclxuaW1wb3J0IHsgb3JWYWxpZGF0b3IgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvb3IudmFsaWRhdG9yJztcclxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tICcuLi91dGlsL2xpbnEnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1Db25maWcgfSBmcm9tICcuLi91dGlsL3JlYWN0aXZlLWZvcm0tY29uZmlnJztcclxuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vdXRpbC9yZWdleC12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgQmFzZUZvcm1CdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWZvcm0tYnVpbGRlcic7XHJcbmltcG9ydCB7IFJ4Rm9ybUNvbnRyb2wgfSBmcm9tICcuL2Zvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IFJ4Rm9ybUFycmF5IH0gZnJvbSAnLi9yeC1mb3JtLWFycmF5JztcclxuaW1wb3J0IHsgUnhGb3JtR3JvdXAgfSBmcm9tICcuL3J4LWZvcm0tZ3JvdXAnO1xyXG5cclxuY29uc3QgTE9HSUNBTF9WQUxJREFUT1JTOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0gPSB7IGFuZDogYW5kVmFsaWRhdG9yLCBvcjogb3JWYWxpZGF0b3IsIG5vdDogbm90VmFsaWRhdG9yIH1cclxuY29uc3QgQVNZTkM6IHN0cmluZyA9IFwiYXN5bmNcIlxyXG5jb25zdCBFTlRJVFlfT0JKRUNUOiBzdHJpbmcgPSBcImVudGl0eU9iamVjdFwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUnhGb3JtQnVpbGRlciBleHRlbmRzIEJhc2VGb3JtQnVpbGRlciB7XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIGNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlOiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBmb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIHByaXZhdGUgY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0dyb3VwQ2FsbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzTmVzdGVkQmluZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSwgZW50aXR5T2JqZWN0OiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFjZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RFeHByZXNzaW9ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB7XHJcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkZWNvcmF0b3IgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5hZGRDaGFuZ2VWYWxpZGF0aW9uKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UsIHByb3BlcnR5LCBjb2x1bW5zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHk6IFByb3BlcnR5SW5mbywgcHJvcGVydHlWYWxpZGF0b3JzOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uW10sIHByb3BWYWxpZGF0aW9uQ29uZmlnOiBQcm9wVmFsaWRhdGlvbkNvbmZpZykge1xyXG4gICAgICAgIGxldCBhc3luY1ZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcclxuICAgICAgICAgICAgcHJvcFZhbGlkYXRpb25Db25maWdbQVNZTkNdLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4gcHJvcHMucHVzaCh0KSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmxlbmd0aCA+IDAgfHwgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHByb3BDb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSkuZm9yRWFjaCh0ID0+IHByb3BDb25kaXRpb25zLnB1c2godCkpO1xyXG4gICAgICAgICAgICBwcm9wQ29uZGl0aW9ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0LnJlZmVyZW5jZVByb3BOYW1lKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihjb2x1bW5zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFQUF9WQUxJREFUT1JTW3Byb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlXShwcm9wZXJ0eVZhbGlkYXRvci5jb25maWcsIGVudGl0eSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5vcjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5ub3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZylcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVmFsaWRhdGlvbih2YWxpZGF0b3JzLCBwcm9wVmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiB7IHZhbGlkYXRvcnMucHVzaCh0KTsgfSlcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRpb25zOiBhbnlbXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnIHwgYW55KSB7XHJcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xyXG4gICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dICYmIGNvbCAhPSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKEFQUF9WQUxJREFUT1JTW0Fubm90YXRpb25UeXBlc1tjb2xdXShwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wgPT0gQW5ub3RhdGlvblR5cGVzLmN1c3RvbSAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKHByb3BWYWxpZGF0aW9uQ29uZmlnW2NvbF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSAmJiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXVswXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHkob2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5SW5mby5uYW1lKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHZhciBwcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eVR5cGUgPT0gT0JKRUNUX1BST1BFUlRZIHx8IHQucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgIHByb3BzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcclxuICAgICAgICAgICAgaWYgKCF0LmVudGl0eSlcclxuICAgICAgICAgICAgICAgIGVudGl0eSA9IHRoaXMuZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3QsIHQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5nZXRJbnN0YW5jZUNvbnRhaW5lcihlbnRpdHksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0ga2V5KVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcGVydHlUeXBlICE9IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5wdXNoKFt0Lm5hbWUsIHhdLmpvaW4oJ1tdJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgICAgIGxldCBqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxyXG4gICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XHJcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBlbnRpdHlPYmplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IGVudGl0eU9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IGVudGl0eU9iamVjdDtcclxuICAgICAgICBlbHNlIGlmICghKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGpzb24uZW50aXR5T2JqZWN0KVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmICghZW50aXR5T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcclxuICAgICAgICAgICAgICAgIGpzb24ubW9kZWwgPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbClcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcclxuICAgICAgICAgICAganNvbltNT0RFTF0gPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbltFTlRJVFlfT0JKRUNUXSA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb250cm9sKHZhbHVlPzogYW55LCB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXSwgYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbltdKTogSUFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSeEZvcm1Db250cm9sKHZhbHVlLCB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogYXN5bmNWYWxpZGF0b3JzIH0sIHt9LCB7fSwgJycsIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBhcnJheSh2YWx1ZXM6IFt7IFtrZXk6IHN0cmluZ106IGFueSB9XSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuZ3JvdXAoeyB0ZW1wOiB2YWx1ZXMgfSwgdmFsaWRhdG9yQ29uZmlnKS5nZXQoXCJ0ZW1wXCIpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB2YXIgZm9ybUJ1aWxkZXIgPSBuZXcgRm9ybUJ1aWxkZXIoKTtcclxuICAgICAgICByZXR1cm4gZm9ybUJ1aWxkZXIuYXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cChncm91cE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcclxuICAgICAgICBsZXQgbW9kZWxJbnN0YW5jZSA9IHN1cGVyLmNyZWF0ZUluc3RhbmNlKCk7XHJcbiAgICAgICAgbGV0IGVudGl0eU9iamVjdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3QsIGVudGl0eU9iamVjdCwgbW9kZWxJbnN0YW5jZSwgdmFsaWRhdG9yQ29uZmlnKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcclxuICAgICAgICB0aGlzLmlzR3JvdXBDYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cChtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCBlbnRpdHlPYmplY3QsIHZhbGlkYXRvckNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xyXG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsSW5zdGFuY2U6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcgJiYgdmFsaWRhdG9yQ29uZmlnLmFwcGx5QWxsUHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKCEodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcyAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmxlbmd0aCA+IDAgJiYgdmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcy5pbmRleE9mKHByb3BOYW1lKSA9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvckNvbmZpZy5hcHBseUFsbFByb3BzLmZvckVhY2goKHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0Lm5hbWUgPT0gUlhfV0VCX1ZBTElEQVRPUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0KHByb3BOYW1lLCBtb2RlbEluc3RhbmNlKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXS5wdXNoKHQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGR5bmFtaWNWYWxpZGF0aW9uUHJvcENoZWNrKHByb3BOYW1lOiBzdHJpbmcsIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuICh2YWxpZGF0b3JDb25maWcgPT0gdW5kZWZpbmVkKSA/IHRydWUgOiAoIXZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUpID8gdHJ1ZSA6IHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgPT0gcHJvcE5hbWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc05vdE9iamVjdCh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9IE9CSkVDVF9TVFJJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbW9kZWxJbnN0YW5jZTogYW55LCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGdyb3VwT2JqZWN0KSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IGdyb3VwT2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBBcnJheSAmJiBwcm9wLmxlbmd0aCA+IDAgJiYgdGhpcy5pc05vdE9iamVjdChwcm9wWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BWYWxpZGF0b3JzID0gKHByb3AubGVuZ3RoID4gMSAmJiBwcm9wWzFdIGluc3RhbmNlb2YgQXJyYXkpID8gcHJvcFsxXSA6IChwcm9wLmxlbmd0aCA9PSAyKSA/IFtwcm9wWzFdXSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5QWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRvcnNbaV0ubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BWYWxpZGF0b3JzW2ldKHByb3BOYW1lLCBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlBZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0ucHVzaChwcm9wVmFsaWRhdG9yc1tpXSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5QWRkZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIFBST1BFUlRZLCB1bmRlZmluZWQsIHR5cGVvZiBtb2RlbEluc3RhbmNlID09IE9CSkVDVF9TVFJJTkcgPyBtb2RlbEluc3RhbmNlIDogeyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcsIG1vZGVsSW5zdGFuY2UpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gbnVsbCB8fCBwcm9wID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHByb3AgPT0gU1RSSU5HIHx8IHR5cGVvZiBwcm9wID09IE5VTUJFUiB8fCB0eXBlb2YgcHJvcCA9PSBCT09MRUFOIHx8IHByb3AgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgdHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gT0JKRUNUX1NUUklORyA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wTW9kZWxJbnN0YW5jZSA9IHN1cGVyLmNyZWF0ZUluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RlbEluc3RhbmNlID09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA9IG1vZGVsSW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIEFSUkFZX1BST1BFUlRZLCBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqT2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0ucHVzaChqT2JqZWN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChyb3csIGpPYmplY3QsIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCB2YWxpZGF0b3JDb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wID09IE9CSkVDVF9TVFJJTkcgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1Hcm91cDogYW55ID0gKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpID8gcHJvcC5jb250cm9sc1swXSA6IHByb3BcclxuICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLm1vZGVsICYmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAgPSB0aGlzLmdyb3VwKGZvcm1Hcm91cC5jb250cm9scyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgT0JKRUNUX1BST1BFUlRZLCBmb3JtR3JvdXAubW9kZWwsIG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIEFSUkFZX1BST1BFUlRZLCBmb3JtR3JvdXAubW9kZWwsIG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5keW5hbWljVmFsaWRhdGlvblByb3BDaGVjayhwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcE1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IgPSBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIE9CSkVDVF9QUk9QRVJUWSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3RvciwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA9PSBGdW5jdGlvbiA/IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSA6IG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKHZhbGlkYXRvckNvbmZpZywgZ3JvdXBPYmplY3QsIHByb3BOYW1lICsgXCIuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3Rvciwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBncm91cE9iamVjdFtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PSBTVFJJTkcgfHwgdHlwZW9mIHByb3AgPT0gTlVNQkVSIHx8IHR5cGVvZiBwcm9wID09IEJPT0xFQU4gfHwgcHJvcCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKHByb3AgJiYgcHJvcC5sZW5ndGggPiAwICYmIHRoaXMuaXNOb3RPYmplY3QocHJvcFswXSkgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpICYmICEocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFswXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIFBST1BFUlRZLCB1bmRlZmluZWQsIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPyBtb2RlbEluc3RhbmNlIDogeyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbGlkYXRvckNvbmZpZyh2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgZW50aXR5T2JqZWN0OiBhbnksIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgYXJyYXlQcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGxldCBleGNsdWRlUHJvcHMgPSBbXTtcclxuICAgICAgICBsZXQgaW5jbHVkZVByb3BzID0gW107XHJcbiAgICAgICAgbGV0IGlnbm9yZVVuZGVmaW5lZFByb3BzID0gW107XHJcblxyXG4gICAgICAgIGlmICghdmFsaWRhdG9yQ29uZmlnKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9wcyA9IHRoaXMuZ2V0T2JqZWN0Rm9yUHJvcGVydHkodmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uLCByb290UHJvcGVydHlOYW1lLCBhcnJheVByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgY29uc3QgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0T2JqZWN0Rm9yUHJvcGVydHkodmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMsIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMpXHJcbiAgICAgICAgICAgIGV4Y2x1ZGVQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcywgcm9vdFByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5pbmNsdWRlUHJvcHMpXHJcbiAgICAgICAgICAgIGluY2x1ZGVQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmluY2x1ZGVQcm9wcywgcm9vdFByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5pZ25vcmVVbmRlZmluZWRQcm9wcylcclxuICAgICAgICAgICAgaWdub3JlVW5kZWZpbmVkUHJvcHMgPSB0aGlzLmdldFByb3BzKHZhbGlkYXRvckNvbmZpZy5pZ25vcmVVbmRlZmluZWRQcm9wcywgcm9vdFByb3BlcnR5TmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhhYnN0cmFjdENvbnRyb2xPcHRpb25zKS5sZW5ndGggJiYgcm9vdFByb3BlcnR5TmFtZS5lbmRzV2l0aCgnLicpICYmIHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zW3Jvb3RQcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHJvb3RQcm9wZXJ0eU5hbWUubGVuZ3RoIC0gMSldKVxyXG4gICAgICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXSA9IHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zW3Jvb3RQcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHJvb3RQcm9wZXJ0eU5hbWUubGVuZ3RoIC0gMSldO1xyXG5cclxuICAgICAgICBjb25zdCBkeW5hbWljVmFsaWRhdGlvbiA9ICh2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lICYmIGVudGl0eU9iamVjdFt2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lXSkgPyBlbnRpdHlPYmplY3RbdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZV0gOiB2YWxpZGF0aW9uUHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIHsgaWdub3JlVW5kZWZpbmVkUHJvcHM6IGlnbm9yZVVuZGVmaW5lZFByb3BzLCBpbmNsdWRlUHJvcHM6IGluY2x1ZGVQcm9wcywgZHluYW1pY1ZhbGlkYXRpb246IGR5bmFtaWNWYWxpZGF0aW9uLCBleGNsdWRlUHJvcHM6IGV4Y2x1ZGVQcm9wcywgYWJzdHJhY3RDb250cm9sT3B0aW9uczogYWJzdHJhY3RDb250cm9sT3B0aW9ucyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYmplY3RGb3JQcm9wZXJ0eTxUPihyb290T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBhcnJheVByb3BlcnR5TmFtZT86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IHByb3BOYW1lIGluIHJvb3RPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wTmFtZS5zdGFydHNXaXRoKHJvb3RQcm9wZXJ0eU5hbWUpICYmICghYXJyYXlQcm9wZXJ0eU5hbWUgfHwgIXByb3BOYW1lLnN0YXJ0c1dpdGgoYXJyYXlQcm9wZXJ0eU5hbWUpKSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgc3BsaXRQcm9wID0gcHJvcE5hbWUuc3BsaXQoXCIuXCIsIDIpWzFdO1xyXG4gICAgICAgICAgICBpZiAoIXNwbGl0UHJvcClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHRbc3BsaXRQcm9wXSA9IHJvb3RPYmplY3RbcHJvcE5hbWVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByb3BzKHByb3BlcnRpZXM6IHN0cmluZ1tdLCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGlzSWdub3JlUHJvcDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHByb3BzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHByb3Agb2YgcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKHJvb3RQcm9wZXJ0eU5hbWUpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXRQcm9wcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0UHJvcHMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKHNwbGl0UHJvcHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdFByb3BzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzcGxpdFByb3BzLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKHNwbGl0UHJvcHMuam9pbihcIi5cIikpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzSWdub3JlUHJvcCAmJiBwcm9wZXJ0aWVzLmZpbHRlcih4ID0+IHggPT0gcm9vdFByb3BlcnR5TmFtZS5yZXBsYWNlKCcuJywgJycpKS5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgcHJvcHMucHVzaCgnOnNlbGY6Jyk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH1cclxuXHJcbiAgICBmb3JtR3JvdXA8VD4obW9kZWw6IFR5cGU8VD4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBSeEZvcm1Hcm91cCB8IEZvcm1Hcm91cCB8IEFwcEZvcm1Hcm91cDxUPiB7XHJcbiAgICAgICAgbGV0IGpzb24gPSB0aGlzLmdldE9iamVjdChtb2RlbCwgZW50aXR5T2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIG1vZGVsID0ganNvbi5tb2RlbDtcclxuICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdDtcclxuICAgICAgICBpZiAoZW50aXR5T2JqZWN0LmNvbnN0cnVjdG9yICE9IG1vZGVsICYmICF0aGlzLmlzR3JvdXBDYWxsZWQpIHtcclxuICAgICAgICAgICAgZW50aXR5T2JqZWN0ID0ganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLnVwZGF0ZU9iamVjdChtb2RlbCwganNvbi5lbnRpdHlPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xyXG4gICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEV4cHJlc3Npb25zKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciA9IHRoaXMuZ2V0SW5zdGFuY2VDb250YWluZXIobW9kZWwsIGVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgdGhpcy5jaGVja09iamVjdFByb3BBZGRpdGlvbmFsVmFsaWRhdGlvbihpbnN0YW5jZUNvbnRhaW5lciwgZW50aXR5T2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGxldCBmb3JtR3JvdXBPYmplY3QgPSB7fTtcclxuICAgICAgICBsZXQgZXh0ZW5kZWRQcm9wZXJ0aWVzID0ge307XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XHJcbiAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzSW5jbHVkZVByb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVmFsaWRhdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBQUk9QRVJUWSAmJiAhUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayhqc29uLmVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSkgJiYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpICE9PSAtMSB8fCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMuaW5kZXhPZihcIjpzZWxmOlwiKSAhPT0gLTEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lmlnbm9yZSlcclxuICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhcHJvcGVydHkuaWdub3JlLmNhbGwoanNvbi5lbnRpdHlPYmplY3QsIGpzb24uZW50aXR5T2JqZWN0KTtcclxuICAgICAgICAgICAgaWYgKGlzSW5jbHVkZVByb3ApIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eVZhbGlkYXRvcnMgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0eUFubm90YXRpb25zLmZpbHRlcih0ID0+IHQucHJvcGVydHlOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgdC5pc1ZhbGlkYXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlT24gPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0eUFubm90YXRpb25zLmZpbHRlcih0ID0+IHQucHJvcGVydHlOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgIXQuaXNWYWxpZGF0b3IgJiYgdC5hbm5vdGF0aW9uVHlwZSA9PT0gXCJ1cGRhdGVPblwiKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW5pdGl6ZVZhbHVlID0gc3VwZXIuc2FuaXRpemVWYWx1ZShpbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHkubmFtZSwgc3VwZXIuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5LCBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiksIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc2FuaXRpemVWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5hZGRGb3JtQ29udHJvbChwcm9wZXJ0eSwgcHJvcGVydHlWYWxpZGF0b3JzLCBhZGRpdGlvbmFsVmFsaWRhdGlvbnNbcHJvcGVydHkubmFtZV0sIGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlT24gJiYgIWFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHVwZGF0ZU9uLmNvbmZpZy5ydW5PbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IG5ldyBSeEZvcm1Db250cm9sKHNhbml0aXplVmFsdWUsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCksIHByb3BlcnR5Lm5hbWUsIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHkubmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHN1cGVyLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFByb3BlcnRpZXNbcHJvcGVydHkubmFtZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIE9CSkVDVF9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUgJiYgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgIShvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lciAmJiBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgb2JqZWN0VmFsdWUsIGAke3Byb3BlcnR5Lm5hbWV9LmApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSB0aGlzLmZvcm1Hcm91cChlbnRpdHkgfHwgcHJvcGVydHkuZW50aXR5IHx8IHRoaXMuZ2V0RW50aXR5KG9iamVjdFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBvYmplY3RWYWx1ZSwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gb2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlfUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheU9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPYmplY3RWYWx1ZSAmJiBhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgIShhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtQXJyYXlHcm91cCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlciA/IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1Yk9iamVjdCBvZiBhcnJheU9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSAmJiB0LmFycmF5SW5kZXggPT0gaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgc3ViT2JqZWN0LCBgJHtwcm9wZXJ0eS5uYW1lfS5gLCBgJHtwcm9wZXJ0eS5uYW1lfVske2luZGV4fV0uYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQXJyYXlHcm91cC5wdXNoKHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkoc3ViT2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBzdWJPYmplY3QsIG9iamVjdFZhbGlkYXRpb25Db25maWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHt9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KGFycmF5T2JqZWN0VmFsdWUsIGZvcm1BcnJheUdyb3VwLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zLCBudWxsLCBwcm9wZXJ0eS5hcnJheUNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3RpdmVGb3JtQ29uZmlnLmF1dG9JbnN0YW5jZVB1c2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheU9iamVjdFZhbHVlLnB1c2ggPSAoaW5zdGFuY2U6IGFueVtdKTogbnVtYmVyID0+IHsgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwKGluc3RhbmNlLmNvbnN0cnVjdG9yLCBpbnN0YW5jZSwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7IGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXS5wdXNoKGZvcm1Hcm91cCwgeyBpc0FkZGVkSW5zdGFuY2U6IHRydWUgfSk7IHJldHVybiAwOyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T2JqZWN0VmFsdWUuc3BsaWNlID0gKHN0YXJ0LCBkZWxldGVDb3VudCk6IGFueVtdID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZCA9IChzdGFydCArIGRlbGV0ZUNvdW50KSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdLnJlbW92ZUF0KGksIHsgaXNSZW1vdmVkSW5zdGFuY2U6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWRCaW5kaW5nID0gdGhpcy5pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFycmF5T2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBhcnJheU9iamVjdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5hcnJheUNvbmZpZyAmJiBwcm9wZXJ0eS5hcnJheUNvbmZpZy5jcmVhdGVCbGFuaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IG5ldyBSeEZvcm1BcnJheShbXSwgW10sIG51bGwsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmICghdGhpcy5pc05lc3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zID0ge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiBbXSxcclxuICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzOiBbXSxcclxuICAgICAgICAgICAgdXBkYXRlT246IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ11cclxuICAgICAgICAgICAgICAgID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhcImdsb2JhbFwiLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpO1xyXG4gICAgICAgIGxldCBmb3JtR3JvdXAgPSBuZXcgUnhGb3JtR3JvdXAoanNvbi5tb2RlbCwganNvbi5lbnRpdHlPYmplY3QsIGZvcm1Hcm91cE9iamVjdCwgYWJzdHJhY3RDb250cm9sT3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDb250YWluZXIuaXNFeHBlcmltZW50YWwpIHtcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3RbXCJmb3JtR3JvdXBcIl0gPSBmb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVQcm9wZXJ0aWVzKGZvcm1Hcm91cCwganNvbi5lbnRpdHlPYmplY3QsIGV4dGVuZGVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc05lc3RlZEJpbmRpbmcgJiYgIXRoaXMuaXNHcm91cENhbGxlZClcclxuICAgICAgICAgICAgZm9ybUdyb3VwLnJlZnJlc2hEaXNhYmxlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwOiBSeEZvcm1Hcm91cCwgZW50aXR5T2JqZWN0OiBhbnksIHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3AoZW50aXR5T2JqZWN0LCB0LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMobmFtZTogc3RyaW5nLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmFic3RyYWN0Q29udHJvbE9wdGlvbnMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbbmFtZV0pXHJcbiAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24gPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1tuYW1lXTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbE9wdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPyBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYmFzZUFic3RyYWN0Q29udHJvbE9wdGlvbnMgOiBudWxsO1xyXG4gICAgICAgIGlmIChjb250cm9sT3B0aW9ucyAmJiBjb250cm9sT3B0aW9uc1tuYW1lXSkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0udXBkYXRlT24pXHJcbiAgICAgICAgICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zLnVwZGF0ZU9uID0gY29udHJvbE9wdGlvbnNbbmFtZV0udXBkYXRlT247XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKSlcclxuICAgICAgICAgICAgICAgICAgICAoPFZhbGlkYXRvckZuW10+Y29udHJvbE9wdGlvbnNbbmFtZV0udmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMudmFsaWRhdG9ycykucHVzaCh2YWxpZGF0b3IpKVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sT3B0aW9uc1tuYW1lXS5hc3luY1ZhbGlkYXRvcnMpKVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5jb250cm9sT3B0aW9uc1tuYW1lXS5hc3luY1ZhbGlkYXRvcnMpLmZvckVhY2godmFsaWRhdG9yID0+ICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLmFzeW5jVmFsaWRhdG9ycykucHVzaCh2YWxpZGF0b3IpKVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLmFzeW5jVmFsaWRhdG9ycykucHVzaCg8VmFsaWRhdG9yRm4+Y29udHJvbE9wdGlvbnNbbmFtZV0udmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFic3RyYWN0Q29udHJvbE9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBSeEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGxldCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZW50aXR5T2JqZWN0KSwgcHJvcE5hbWUpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGVudGl0eU9iamVjdFtwcm9wTmFtZV07XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gbnVsbDtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50aXR5T2JqZWN0LCBwcm9wTmFtZSwge1xyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHsgcmV0dXJuIGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLmdldC5jYWxsKGVudGl0eU9iamVjdCkgOiB2YWx1ZSB9LFxyXG4gICAgICAgICAgICBzZXQ6ICh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldC5jYWxsKGVudGl0eU9iamVjdCwgdik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY2hhbmdpbmcgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdLnNldFZhbHVlKHYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuIl19
|